{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/swiper/shared/utils.mjs","webpack:///./node_modules/moment/moment.js","webpack:///./app/javascript/packs/util/methods.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/swiper/shared/ssr-window.esm.mjs","webpack:///./node_modules/filepond/dist/filepond.js","webpack:///./node_modules/swiper/modules/keyboard.mjs","webpack:///./node_modules/swiper/shared/create-element-if-not-defined.mjs","webpack:///./node_modules/swiper/modules/navigation.mjs","webpack:///./node_modules/swiper/shared/classes-to-selector.mjs","webpack:///./node_modules/swiper/modules/pagination.mjs","webpack:///./node_modules/swiper/modules/thumbs.mjs","webpack:///./app/javascript/packs/components/product/product_page.js","webpack:///./app/javascript/packs/views/creator/products/form_sections.js","webpack:///./app/javascript/packs/util/touchDevice.js","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/core-js/internals/is-callable.js","webpack:///./app/javascript/packs/components/product/bar_rating.js","webpack:///./node_modules/swiper/shared/swiper-core.mjs","webpack:///./app/javascript/packs/components/product/product_rating_form.js","webpack:///./app/javascript/packs/components/product/product_ratings_pagination.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/core-js/internals/function-uncurry-this.js","webpack:///./node_modules/sortablejs/modular/sortable.esm.js","webpack:///./node_modules/core-js/internals/has-own-property.js","webpack:///./app/javascript/packs/components/swiper_init/swiper.js","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/js-cookie/src/js.cookie.js","webpack:///./app/javascript/packs/views/creator/products/version_form.js","webpack:///./node_modules/chartkick/dist/chartkick.js","webpack:///./node_modules/highcharts/highcharts.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bn-bd.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-in.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/en-sg.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-mx.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fil.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-deva.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/oc-lnc.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tk.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-mo.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/chart.js/dist/Chart.js","webpack:///./node_modules/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.js","webpack:///./node_modules/filepond-plugin-file-metadata/dist/filepond-plugin-file-metadata.js","webpack:///./node_modules/filepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type.js","webpack:///./node_modules/filepond-plugin-file-validate-size/dist/filepond-plugin-file-validate-size.js","webpack:///./node_modules/core-js/internals/function-bind-native.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/core-js/internals/function-call.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///./node_modules/core-js/internals/define-global-property.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///./node_modules/core-js/internals/engine-user-agent.js","webpack:///./node_modules/core-js/internals/a-callable.js","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/to-integer-or-infinity.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./app/javascript/packs/jquery.js","webpack:///./app/javascript/packs/util/staging_placeholder.js","webpack:///./app/javascript/packs/components/backend_menu/backend_menu.js","webpack:///./app/javascript/packs/components/backend_search/backend_search.js","webpack:///./app/javascript/packs/components/chart/chartkick.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./app/javascript/packs/components/chart/highcharts.js","webpack:///./app/javascript/packs/components/checkout/checkout.js","webpack:///./app/javascript/packs/components/input_date/input_date.js","webpack:///./app/javascript/packs/components/input_file/input_file.js","webpack:///./app/javascript/packs/components/input_password/show_password.js","webpack:///./app/javascript/packs/components/input_select/input_select.js","webpack:///./app/javascript/packs/components/input_select/input_user_select.js","webpack:///./app/javascript/packs/components/input_select/input_variant_file_select.js","webpack:///./app/javascript/packs/components/input_slug/input_slug.js","webpack:///./app/javascript/packs/components/input_text/input_text.js","webpack:///./app/javascript/packs/components/input_text/counted.js","webpack:///./app/javascript/packs/components/modal/modal_cart_login.js","webpack:///./app/javascript/packs/components/modal/modal_support.js","webpack:///./app/javascript/packs/components/modal/modal_youtube.js","webpack:///./app/javascript/packs/components/product/product_content.js","webpack:///./app/javascript/packs/components/product/product_sidebar.js","webpack:///./app/javascript/packs/components/product/variant_pricing.js","webpack:///./app/javascript/packs/components/sort/sort.js","webpack:///./app/javascript/packs/components/sort/product_grid.js","webpack:///./app/javascript/packs/components/analytics/google_analytics.js","webpack:///./app/javascript/packs/components/copy/copy_text.js","webpack:///./app/javascript/packs/components/mailchimp/mailchimp_subscribe_form.js","webpack:///./app/javascript/packs/views/account/account.js","webpack:///./app/javascript/packs/views/admin/coupons/coupons.js","webpack:///./app/javascript/packs/views/admin/orders/orders.js","webpack:///./app/javascript/packs/views/admin/payouts/payouts.js","webpack:///./app/javascript/packs/views/admin/product_review/flags.js","webpack:///./app/javascript/packs/views/admin/product_review/product_edit.js","webpack:///./app/javascript/packs/views/admin/refunds/refunds.js","webpack:///./app/javascript/packs/views/admin/sale_campaigns/sale_campaigns.js","webpack:///./app/javascript/packs/views/creator/affiliates/creator_affiliates.js","webpack:///./app/javascript/packs/views/creator/emails/emails.js","webpack:///./app/javascript/packs/views/creator/products/categories.js","webpack:///./app/javascript/packs/views/creator/products/commission.js","webpack:///./app/javascript/packs/views/creator/products/dev_fund.js","webpack:///./app/javascript/packs/views/creator/products/edit_product.js","webpack:///./app/javascript/packs/views/creator/products/submit_review.js","webpack:///./app/javascript/packs/views/creator/products/variants_sortable.js","webpack:///./app/javascript/packs/views/creator/products/version_downloads_sortable.js","webpack:///./app/javascript/packs/views/creator/products/webhook_form.js","webpack:///./app/javascript/packs/views/creator/products/webhook_resend_form.js","webpack:///./app/javascript/packs/views/header/main_menu.js","webpack:///./app/javascript/packs/views/header/search.js","webpack:///./app/javascript/packs/views/header/user_dropdown.js","webpack:///./app/javascript/packs/views/header/creator_dropdown.js","webpack:///./app/javascript/packs/views/inbox/read_all_switch.js","webpack:///./app/javascript/packs/views/login/login.js","webpack:///./app/javascript/packs/views/order/pickup.js","webpack:///./app/javascript/packs/views/privacy/privacy.js","webpack:///./node_modules/@yaireo/tagify/dist/tagify.min.js","webpack:///./node_modules/core-js/internals/define-built-in-accessor.js","webpack:///./node_modules/core-js/internals/make-built-in.js","webpack:///./node_modules/core-js/internals/document-all.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/core-js/internals/is-null-or-undefined.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/internals/to-property-key.js","webpack:///./node_modules/core-js/internals/is-symbol.js","webpack:///./node_modules/core-js/internals/object-is-prototype-of.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/core-js/internals/symbol-constructor-detection.js","webpack:///./node_modules/core-js/internals/try-to-string.js","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/define-built-in.js","webpack:///./node_modules/core-js/internals/length-of-array-like.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/task.js","webpack:///./node_modules/core-js/internals/function-apply.js","webpack:///./node_modules/core-js/internals/array-slice.js","webpack:///./node_modules/core-js/internals/validate-arguments-length.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./app/javascript/packs/application.js","webpack:///./node_modules/core-js/modules/es.regexp.flags.js","webpack:///./node_modules/core-js/internals/function-name.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/core-js/internals/weak-map-basic-detection.js","webpack:///./node_modules/core-js/internals/v8-prototype-define-bug.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/internals/engine-v8-version.js","webpack:///./node_modules/core-js/internals/get-method.js","webpack:///./node_modules/core-js/internals/ordinary-to-primitive.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///./node_modules/core-js/modules/es.typed-array.set.js","webpack:///./node_modules/core-js/internals/array-buffer-view-core.js","webpack:///./node_modules/core-js/internals/array-buffer-basic-detection.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/core-js/internals/function-uncurry-this-accessor.js","webpack:///./node_modules/core-js/internals/a-possible-prototype.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/math-trunc.js","webpack:///./node_modules/core-js/internals/to-offset.js","webpack:///./node_modules/core-js/internals/to-positive-integer.js","webpack:///./node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/core-js/modules/web.clear-immediate.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/internals/function-uncurry-this-clause.js","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/internals/engine-is-ios.js","webpack:///./node_modules/core-js/internals/engine-is-node.js","webpack:///./node_modules/core-js/modules/web.set-immediate.js","webpack:///./node_modules/core-js/internals/schedulers-fix.js","webpack:///./node_modules/core-js/internals/engine-is-bun.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/turbolinks/dist/turbolinks.js","webpack:///./node_modules/jquery-ujs/src/rails.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js","webpack:///./node_modules/bootstrap-switch-button/dist/bootstrap-switch-button.min.js","webpack:///./node_modules/summernote/dist/summernote-lite.min.js","webpack:///./node_modules/cocoon-js/index.js","webpack:///./node_modules/flatpickr/dist/flatpickr.js","webpack:///./node_modules/select2/dist/js/select2.js","webpack:///./node_modules/sweetalert/dist/sweetalert.min.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./app/javascript/libraries/detect-swipe.js","webpack:///./app/javascript/libraries/featherlight.js","webpack:///./app/javascript/libraries/featherlight-gallery.js","webpack:///./app/javascript/libraries/jquery-bar-rating.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","classesToTokens","classes","trim","split","filter","deleteProps","obj","keys","forEach","e","nextTick","callback","delay","setTimeout","now","Date","getTranslate","el","axis","window","matrix","curTransform","transformMatrix","curStyle","style","getComputedStyle","currentStyle","WebKitCSSMatrix","transform","webkitTransform","length","map","a","replace","join","MozTransform","OTransform","MsTransform","msTransform","getPropertyValue","toString","m41","parseFloat","m42","isObject","constructor","slice","extend","to","arguments","undefined","noExtend","nextSource","node","HTMLElement","nodeType","keysArray","indexOf","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","translate","time","startTime","duration","params","speed","wrapperEl","scrollSnapType","cancelAnimationFrame","cssModeFrameID","dir","isOutOfBound","current","target","animate","getTime","progress","Math","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","requestAnimationFrame","getSlideTransformEl","slideEl","querySelector","shadowRoot","elementChildren","element","selector","children","matches","showWarning","text","console","warn","err","createElement","tag","document","classList","add","Array","isArray","elementOffset","box","getBoundingClientRect","body","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","elementPrevAll","prevEls","previousElementSibling","prev","push","elementNextAll","nextEls","nextElementSibling","next","elementStyle","prop","elementIndex","child","previousSibling","elementParents","parents","parent","parentElement","elementTransitionEnd","addEventListener","fireCallBack","removeEventListener","elementOuterSize","size","includeMargins","offsetWidth","hookCallback","some","hooks","apply","setHookCallback","input","hasOwnProp","b","isObjectEmpty","getOwnPropertyNames","k","isUndefined","isNumber","isDate","arr","fn","res","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","this","momentProperties","updateInProgress","copyConfig","from","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","args","Error","stack","deprecations","deprecateSimple","isFunction","Function","set","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","source","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","abs","zerosToFill","pow","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","localeData","removeFormattingTokens","match","makeFormatFunction","array","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","toUpperCase","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","h","hh","dd","w","ww","M","MM","y","yy","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","u","sort","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","stringGet","stringSet","prioritized","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","x","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","parseInt","getSetYear","getIsLeapYear","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","charAt","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","j","loadLocale","oldLocale","_abbr","getSetGlobalLocale","values","data","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","exec","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","defaults","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","isValid$1","createInvalid$1","createDuration","Duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","invalid","isString","String","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","properties","arrayTest","dataTypeTest","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","toISOString","keepOffset","toDate","inspect","prefix","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","argWithSuffix","argThresholds","withSuffix","th","assign","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","url_add_param","url","param","hash","parser","href","parameters","search","ary","list","url_remove_param","parameter","urlparts","encodeURIComponent","pars","lastIndexOf","splice","url_get_param","sParameterName","sURLVariables","decodeURIComponent","location","substring","get_base_url","text_to_slug","Text","dollars_to_cents","amount","showLoadingMessage","message","$","addClass","prepend","hideLoadingMessage","remove","removeClass","get_sale_campaign_params","displayFlashMessage","type","$notice","global","noGlobal","getProto","getPrototypeOf","flat","class2type","hasOwn","fnToString","ObjectFunctionString","support","isWindow","preservedScriptAttributes","src","nonce","noModule","DOMEval","code","doc","script","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","rhtmlSuffix","jQuery","context","init","isArrayLike","nodeName","elem","jquery","num","pushStack","elems","merge","prevObject","each","first","eq","last","even","grep","_elem","odd","end","options","copy","copyIsArray","deep","isPlainObject","expando","random","isReady","error","noop","Ctor","isEmptyObject","globalEval","textContent","documentElement","nodeValue","makeArray","results","inArray","isXMLDoc","namespace","namespaceURI","docElem","ownerDocument","invert","callbackExpect","guid","iterator","pop","whitespace","rtrimCSS","contains","bup","compareDocumentPosition","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","escapeSelector","sel","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","identifier","attributes","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","fromCharCode","unloadHandler","setDocument","inDisabledFieldset","addCombinator","disabled","childNodes","els","find","seed","nid","groups","newSelector","newContext","getElementById","id","getElementsByTagName","getElementsByClassName","testContext","scope","tokenize","toSelector","querySelectorAll","qsaError","removeAttribute","select","cache","cacheLength","markFunction","assert","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","subWindow","webkitMatchesSelector","msMatchesSelector","defaultView","getById","getElementsByName","disconnectedMatch","cssHas","attrId","getAttributeNode","className","innerHTML","compare","sortDetached","expr","elements","matchesSelector","attr","attrHandle","uniqueSort","duplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","pattern","operator","check","what","_argument","simple","forward","ofType","_context","xml","outerCache","nodeIndex","start","useCache","firstChild","lastChild","pseudo","setFilters","idx","not","compile","unmatched","has","elemLang","root","focus","activeElement","safeActiveElement","hasFocus","tabIndex","enabled","checked","selected","selectedIndex","nextSibling","header","button","_matchIndexes","lt","gt","nth","radio","checkbox","file","password","image","submit","reset","parseOnly","soFar","preFilters","cached","combinator","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","filters","unique","getText","isXML","selectors","truncate","is","siblings","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","contents","sibling","cur","targets","closest","prevAll","addBack","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","_","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","disable","lock","fireWith","Deferred","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","handler","special","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","rejectWith","getErrorHook","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","asyncError","readyException","readyList","completed","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","acceptData","owner","Data","uid","configurable","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_removeData","attrs","dequeue","startLength","_queueHooks","unshift","stop","clearQueue","count","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","show","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","defaultValue","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","optgroup","rhtml","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","on","types","one","origFn","event","off","leverageNative","isSetup","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","isImmediatePropagationStopped","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","focusMappedHandler","documentMode","simulate","attaches","dataHolder","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","rcustomProp","getStyles","opener","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","isCustomProp","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","dimension","isBorderBox","styles","computedVal","extra","delta","marginDelta","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","scrollboxSizeBuggy","margin","padding","border","expand","expanded","propHooks","run","percent","eased","step","fx","linear","swing","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","stopped","prefilters","currentTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","opt","speeds","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","classNames","curValue","finalValue","toggleClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","triggerHandler","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","valueOrFunction","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","rtrim","proxy","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","noConflict","ssrDocument","createEvent","initEvent","createElementNS","importNode","hostname","origin","pathname","getDocument","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","Image","screen","matchMedia","getWindow","isNode","createStore","initialState","queries","actions","actionQueue","dispatchQueue","processDispatchQueue","isBlocking","actionHandlers","query","str","_queryHandles","_len","queryHandles","api","getState","processActionQueue","action","definition","forin","cb","createObject","hasAttribute","svgElements","isSVGElement","includes","appendChildView","childViews","removeChildView","IS_BROWSER","isBrowser","getChildCount","getViewRect","elementRect","bottom","inner","outer","childView","isRectIgnored","childViewRect","expandRect","calculateRectSize","marginBottom","marginRight","thereYet","destination","velocity","errorMargin","spring","_ref$stiffness","stiffness","_ref$damping","damping","_ref$mass","mass","resting","interpolate","ts","skipToEndState","onupdate","oncomplete","easeInOutQuad","_ref$duration","_ref$easing","_ref$delay","animator","createAnimator","category","def","addGetSet","overwrite","addEvent","isDefined","scaleX","scaleY","translateX","translateY","rotateX","rotateY","rotateZ","originX","originY","mixinConfig","viewProps","viewInternalAPI","viewExternalAPI","initialProps","currentProps","getOffset","getScale","getRect","write","propsHaveChanged","applyStyles","destroy","newProps","_ref2","perspective","transforms","elementCurrentStyle","Mixins","listeners","viewState","findIndex","animations","apis","updateRect","layoutCalculated","paddingTop","marginTop","offsetLeft","offsetTop","createView","_ref$tag","_ref$name","_ref$attributes","_ref$read","read","_ref$write","_ref$create","_ref$destroy","_ref$filterFrameActio","filterFrameActionsForChild","_ref$didCreateView","didCreateView","_ref$didWriteView","didWriteView","_ref$ignoreRect","ignoreRect","_ref$ignoreRectUpdate","ignoreRectUpdate","_ref$mixins","mixins","store","frameRect","isResting","activeMixins","ref","writers","readers","destroyers","getElement","getChildViews","getReference","createChildView","_read","internalAPI","reader","_write","frameActions","shouldOptimize","writer","timestamp","mixin","_destroy","destroyer","sharedAPIDefinition","internalAPIDefinition","needle","linkView","unlinkView","registerWriter","registerReader","registerDestroyer","invalidateLayout","externalAPIDefinition","mixinAPIDefinition","mixinAPI","childCount","createPainter","fps","painter","requestTick","cancelTick","setTimerType","performance","pause","createRoute","routes","_ref$actions","newNode","referenceNode","isEmpty","splitter","isBoolean","toBoolean","toNumber","toFloat","isInt","toBytes","naturalFileSize","toFunctionReference","levels","level","methods","patch","revert","fetch","restore","createServerAPI","outline","createAction","withCredentials","ondata","isNull","isAPI","getType","replaceSingleQuotes","conversionTable","boolean","int","float","bytes","function","serverapi","convertTo","getValueByType","newValue","valueType","newValueType","convertedValue","createOption","optionDefinition","createInitialState","items","listUpdateTimeout","itemUpdateTimeout","processingQueue","fromCamels","part","createOptionAPI","createOptionActions","createOptionQueries","InteractionMethod","API","DROP","BROWSE","PASTE","NONE","getUniqueId","_AwaitValue","wrapped","_AsyncGenerator","gen","front","Promise","request","resume","wrappedAwait","settle","_invoke","return","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","iter","asyncIterator","throw","arrayRemove","sync","listener","_fire","fireSync","_len2","_key2","onOnce","_cb","copyObjectPropertiesToObject","PRIVATE","createItemAPI","removeReleasedItems","released","ItemStatus","INIT","IDLE","PROCESSING_QUEUED","PROCESSING","PROCESSING_COMPLETE","PROCESSING_ERROR","PROCESSING_REVERT_ERROR","LOADING","LOAD_ERROR","FileOrigin","INPUT","LIMBO","LOCAL","getNonNumeric","getDecimalSeparator","toLocaleString","getThousandsSeparator","decimalSeparator","thousandsStringWithSeparator","Type","BOOLEAN","INT","NUMBER","STRING","ARRAY","OBJECT","FUNCTION","ACTION","SERVER_API","REGEX","applyFilterChain","utils","matchingFilters","f","initialFilter","reduce","applyFilters","addFilter","extendDefaultOptions","additionalOptions","defaultOptions","getOptions","setOptions","required","captureMethod","allowSyncAcceptAttribute","allowDrop","allowBrowse","allowPaste","allowMultiple","allowReplace","allowRevert","allowRemove","allowProcess","allowReorder","allowDirectoriesOnly","storeAsFile","forceRevert","maxFiles","checkValidity","itemInsertLocationFreedom","itemInsertLocation","itemInsertInterval","dropOnPage","dropOnElement","dropValidation","ignoredFiles","instantUpload","maxParallelUploads","allowMinimumUploadDuration","chunkUploads","chunkForce","chunkSize","chunkRetryDelays","server","fileSizeBase","labelFileSizeBytes","labelFileSizeKilobytes","labelFileSizeMegabytes","labelFileSizeGigabytes","labelDecimalSeparator","labelThousandsSeparator","labelIdle","labelInvalidField","labelFileWaitingForSize","labelFileSizeNotAvailable","labelFileCountSingular","labelFileCountPlural","labelFileLoading","labelFileAdded","labelFileLoadError","labelFileRemoved","labelFileRemoveError","labelFileProcessing","labelFileProcessingComplete","labelFileProcessingAborted","labelFileProcessingError","labelFileProcessingRevertError","labelTapToCancel","labelTapToRetry","labelTapToUndo","labelButtonRemoveItem","labelButtonAbortItemLoad","labelButtonRetryItemLoad","labelButtonAbortItemProcessing","labelButtonUndoItemProcessing","labelButtonRetryItemProcessing","labelButtonProcessItem","iconRemove","iconProcess","iconRetry","iconUndo","iconDone","oninit","onwarning","onactivatefile","oninitfile","onaddfilestart","onaddfileprogress","onaddfile","onprocessfilestart","onprocessfileprogress","onprocessfileabort","onprocessfilerevert","onprocessfile","onprocessfiles","onremovefile","onpreparefile","onupdatefiles","onreorderfiles","beforeDropFile","beforeAddFile","beforeRemoveFile","beforePrepareFile","stylePanelLayout","stylePanelAspectRatio","styleItemPanelAspectRatio","styleButtonRemoveItemPosition","styleButtonProcessItemPosition","styleLoadIndicatorPosition","styleProgressIndicatorPosition","styleButtonRemoveItemAlign","files","credits","getItemByQuery","getNumericAspectRatioFromString","getActiveItems","archived","Status","EMPTY","ERROR","BUSY","READY","canUpdateFileInput","dataTransfer","DataTransfer","File","ITEM_ERROR","ITEM_BUSY","ITEM_READY","isItemInErrorState","isItemInBusyState","isItemInReadyState","isAsync","GET_STATUS","GET_ITEM","GET_ACTIVE_ITEM","GET_ACTIVE_ITEMS","GET_ITEMS","GET_ITEM_NAME","filename","GET_ITEM_SIZE","fileSize","GET_STYLES","GET_PANEL_ASPECT_RATIO","GET_ITEM_PANEL_ASPECT_RATIO","GET_ITEMS_BY_STATUS","GET_TOTAL_ITEMS","SHOULD_UPDATE_FILE_INPUT","IS_ASYNC","GET_FILE_SIZE_LABELS","labelBytes","labelKilobytes","labelMegabytes","labelGigabytes","hasRoomForItem","maxFileCount","arrayInsert","insertItem","isBase64DataURI","getFilenameFromURL","getExtensionFromFilename","guesstimateExtension","subtype","leftPad","getDateString","getHours","getMinutes","getSeconds","getFileFromBlob","blob","extension","lastModifiedDate","_relativePath","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","createBlob","arrayBuffer","BB","bb","getBlob","Blob","getBlobFromByteStringWithMimeType","byteString","ab","ArrayBuffer","ia","Uint8Array","getMimeTypeFromBase64DataURI","dataURI","getBase64DataFromBase64DataURI","getByteStringFromBase64DataURI","atob","getBlobFromBase64DataURI","getFileFromBase64DataURI","getFileNameFromHeader","decodeURI","getFileSizeFromHeader","getTranfserIdFromHeader","getFileInfoFromHeaders","info","rows","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","createFileLoader","fetchFn","getProgress","loadURL","computable","fileinfo","setSource","isGet","sendRequest","onheaders","onprogress","aborted","headersReceived","encodeURI","stringify","upload","lengthComputable","loaded","unescape","createResponse","createTimeoutResponse","hasQS","buildURL","createFetchFunction","apiUrl","ChunkStatus","QUEUED","COMPLETE","WAITING","processFileChunked","metadata","transfer","chunks","chunkTransferId","chunkServer","serverId","fd","requestTransferId","formData","FormData","requestParams","requestTransferOffset","requestUrl","lastChunkIndex","retries","completeProcessingChunks","canProcessChunk","chunk","processChunk","processChunks","updateTotalProgress","retryProcessChunk","every","totalBytesTransfered","totalSize","abortChunks","createFileProcessorFunction","canChunkUpload","shouldChunkUpload","willChunkUpload","createProcessorFunction","createRevertFunction","uniqueFileId","getRandomNumber","createPerceivedPerformanceUpdater","tickMin","tickMax","runtime","clear","createFileProcessor","processFn","perceivedProgress","perceivedPerformanceUpdater","perceivedDuration","progressFn","completeFn","transferId","getDuration","getFilenameWithoutExtension","createFileStub","isFile","deepCloneObject","createItem","serverFileReference","frozen","processingAborted","activeLoader","activeProcessor","abortProcessingRequestComplete","setStatus","getFileExtension","getFileType","getFileSize","getFile","loader","meta","retryLoad","abortLoad","processor","onprocess","requestProcessing","abortProcessing","revertFileUpload","serverTransferId","_setMetadata","silent","getMetadata","filenameWithoutExtension","fileExtension","fileType","relativePath","setMetadata","itemAPI","freeze","release","archive","getItemIndexByQuery","getItemById","itemId","fetchBlob","getDomainFromURL","isExternalURL","dynamicLabel","label","isMockItem","listUpdated","optionalPromise","sortItems","getItemByQueryFromState","itemHandler","_ref$success","_ref$failure","failure","ABORT_ALL","DID_SET_FILES","_ref2$value","activeItems","interactionMethod","DID_UPDATE_ITEM_METADATA","_ref3","change","doUpload","shouldPrepareOutput","MOVE_ITEM","_ref4","currentIndex","SORT","_ref5","ADD_ITEMS","_ref6","_ref6$success","_ref6$failure","insertLocation","totalItems","isValidFile","promises","all","ADD_ITEM","_ref7","_ref7$index","_ref7$success","_ref7$failure","_ref7$options","_item","mainStatus","main","sub","handleAdd","shouldAdd","loadComplete","_ref8","REQUEST_PREPARE_OUTPUT","_ref9","_ref9$failure","COMPLETE_LOAD_ITEM","_ref10","RETRY_ITEM_LOAD","REQUEST_ITEM_PREPARE","_success","REQUEST_ITEM_PROCESSING","processNow","PROCESS_ITEM","processNext","queueEntry","itemReference","RETRY_ITEM_PROCESSING","REQUEST_REMOVE_ITEM","shouldRemove","RELEASE_ITEM","REMOVE_ITEM","removeFromView","ABORT_ITEM_LOAD","ABORT_ITEM_PROCESSING","REQUEST_REVERT_ITEM_PROCESSING","handleRevert","shouldRevert","requestRemoveResult","REVERT_ITEM_PROCESSING","SET_OPTIONS","_ref11","optionKeys","prioritizedOptionKeys","PrioritizedOptions","formatFilename","createElement$1","tagName","textNode","polarToCartesian","centerX","centerY","radius","angleInDegrees","angleInRadians","sin","describeArc","startAngle","endAngle","arcSweep","percentageArc","progressIndicator","spin","svg","path","align","dataset","ringStrokeWidth","ringFrom","ringTo","coordinates","fileActionButton","icon","shouldDisable","toNaturalFileSize","_options$labelBytes","_options$labelKilobyt","_options$labelMegabyt","_options$labelGigabyt","KB","MB","GB","removeDecimalsWhenZero","decimalCount","create$2","fileName","updateFile","updateFileSizeOnError","fileInfo","DID_LOAD_ITEM","DID_UPDATE_ITEM_META","DID_THROW_ITEM_LOAD_ERROR","DID_THROW_ITEM_INVALID","toPercentage","create$3","didSetItemLoadProgress","title","fileStatus","DID_REVERT_ITEM_PROCESSING","DID_REQUEST_ITEM_PROCESSING","DID_ABORT_ITEM_PROCESSING","DID_COMPLETE_ITEM_PROCESSING","DID_UPDATE_ITEM_PROCESS_PROGRESS","DID_UPDATE_ITEM_LOAD_PROGRESS","DID_THROW_ITEM_PROCESSING_ERROR","DID_THROW_ITEM_PROCESSING_REVERT_ERROR","DID_THROW_ITEM_REMOVE_ERROR","Buttons","AbortItemLoad","RetryItemLoad","RemoveItem","ProcessItem","AbortItemProcessing","RetryItemProcessing","RevertItemProcessing","ButtonKeys","isSupported","calculateFileInfoOffset","getRemoveIndicatorAligment","buttonRect","buttonRemoveItem","calculateButtonWidth","buttonAbortItemLoad","calculateFileVerticalCenterOffset","calculateFileHorizontalCenterOffset","DefaultStyle","buttonRetryItemLoad","buttonProcessItem","buttonAbortItemProcessing","buttonRetryItemProcessing","buttonRevertItemProcessing","loadProgressIndicator","processProgressIndicator","processingCompleteIndicator","IdleStyle","ProcessingStyle","StyleMap","DID_START_ITEM_LOAD","DID_START_ITEM_REMOVE","DID_LOAD_LOCAL_ITEM","DID_START_ITEM_PROCESSING","processingCompleteIndicatorView","create$4","buttonFilter","LocalButtons","curr","alignRemoveItemButton","enabledButtons","_map","buttonView","loadIndicatorView","progressIndicatorView","activeStyles","write$2","route","stylesToApply","defaultStyles","control","DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING","DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD","DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL","buttonAbortItemRemoval","_ref12","fileWrapper","PANEL_SPRING_PROPS","create$6","section","createSection","scalable","viewConstructor","panel","heightCurrent","topRect","bottomRect","center","createDragHelper","itemIds","prevIndex","setIndex","getIndex","getItemIndex","ITEM_TRANSLATE_SPRING","ITEM_SCALE_SPRING","StateMap","create$7","handleClick","markedForRemoval","dragState","grab","isPrimary","removedActivateListener","dragOrigin","dragCenter","drag","dragOffset","drop","route$1","DID_UPDATE_PANEL_HEIGHT","write$4","DID_GRAB_ITEM","DID_DRAG_ITEM","DID_DROP_ITEM","currentState","filepondItemState","getItemsPerRow","horizontalSpace","itemWidth","getItemIndexByPosition","positionInView","itemRect","itemHorizontalMargin","itemsPerRow","childMid","itemVerticalMargin","itemHeight","_index","itemTop","itemRight","itemBottom","dropAreaDimensions","getHeight","setHeight","getWidth","setWidth","setDimensions","create$8","lastItemSpanwDate","moveItem","vx","vy","spawnDate","introItemView","getItemHeight","getItemWidth","route$2","DID_ADD_ITEM","addIndex","cooldown","dist","DID_REMOVE_ITEM","numItems","oldIndex","dragPosition","dragHeight","dragWidth","cols","getGridIndex","getColIndex","visibleChildren","childBottom","childTop","dragCoordinates","dragIndex","dragIndexOffset","removeIndexOffset","addIndexOffset","childRect","visualHeight","prevX","prevY","visualIndex","indexX","indexY","vectorX","vectorY","create$9","overflowing","route$3","DID_DRAG","scopeLeft","scopeTop","DID_END_DRAG","listScroller","newHeight","attrToggle","resetFileInput","form","create$a","setAcceptedFileTypes","toggleAllowMultiple","toggleDirectoryFilter","toggleDisabled","toggleRequired","setCaptureMethod","handleChange","webkitRelativePath","doesAllowBrowse","disableField","updateRequiredStatus","setCustomValidity","browser","DID_SET_DISABLED","DID_SET_ALLOW_BROWSE","DID_SET_ALLOW_DIRECTORIES_ONLY","DID_SET_ALLOW_MULTIPLE","DID_SET_ACCEPTED_FILE_TYPES","DID_SET_CAPTURE_METHOD","DID_SET_REQUIRED","Key","ENTER","SPACE","create$b","handleKeyDown","updateLabelValue","clickable","dropLabel","DID_SET_LABEL_IDLE","addBlob","write$7","route$4","DID_DROP","drip","setInputFiles","create$c","fields","getField","syncFieldPositionsWithItems","didReorderItems","write$8","shouldUseFileInput","dataContainer","fileItem","DID_DEFINE_VALUE","DID_PREPARE_OUTPUT","DID_REORDER_ITEMS","DID_SORT_ITEMS","images","text$1","zip","epub","guesstimateMimeType","requestDataTransferItems","links","getLinks","hasFiles","getFiles","promisedFiles","isFileSystemItem","getFilesFromItem","returnedFileGroups","group","isEntry","entry","getAsEntry","isDirectory","kind","isDirectoryEntry","getFilesInDirectory","getAsFile","dirCounter","fileCounter","resolveIfDone","readEntries","dirEntry","directoryReader","createReader","readBatch","entries","correctedFile","correctMissingFileType","fullPath","webkitGetAsEntry","getLinksFromTransferMetaData","getLinksFromTransferURLData","dragNDropObservers","eventPosition","pageLeft","pageTop","layerX","layerY","createDragNDropClient","scopeToObserve","filterElement","observer","getDragNDropObserver","client","ondrop","onenter","ondrag","onexit","allowdrop","addListener","newObserver","createDragNDropObserver","clients","dragenter","dragover","dragleave","createHandler","elementFromPoint","point","isEventTarget","elementAtPosition","initialTarget","setDropEffect","effect","dropEffect","overDropTarget","allowsTransfer","createHopper","validateItems","catchesDropsOnPage","requiresDropOnElement","_options$filterItems","filterItems","lastState","filteredItems","ondragend","ondragstart","updateHopperState","hopperState","listening","listeners$1","handlePaste","activeEl","inScope","clipboardData","listen","unlisten","createPaster","addFilesNotificationTimeout","notificationClearTimeout","filenames","assist","clear$1","listModified","isUsingFilePond","itemProcessedUndo","itemError","assistant","toCamels","debounce","immidiateOnly","MAX_FILES_LIMIT","prevent","create$e","bounds","widthPrevious","widthUpdated","updateHistory","previousAspectRatio","canHover","hasPointerEvents","passive","frag","rel","write$9","route$5","calculateRootBoundingBoxHeight","_root$ref","hopper","isMultiItem","atMaxCapacity","addAction","listItemMargin","calculateListItemMargin","listHeight","calculateListHeight","labelHeight","currentLabelHeight","listMarginTop","listMarginBottom","visual","boundsHeight","MAX_BOUNCES","bounces","listAvailableHeight","fixedHeight","_listAvailableHeight","cappedHeight","isCappedHeight","panelHeight","_listAvailableHeight2","itemMargin","scrollList","itemList","newItem","removedItem","verticalItemCount","measureHeight","maxHeight","exceedsMaxFiles","maxItems","totalBrowseItems","getDragIndex","toggleDrop","isAllowed","toggleBrowse","togglePaste","paster","DID_SET_ALLOW_DROP","DID_SET_ALLOW_PASTE","createApp","initialOptions","originalElement","visibilityHandler","resizeDoneTimer","isResizing","isResizingHorizontally","initialWindowWidth","currentWindowWidth","resizeHandler","isHidden","readWriteApi","innerWidth","routeActionsToEvents","eventRoutes","DID_DESTROY","DID_INIT","DID_THROW_MAX_FILES","DID_INIT_ITEM","DID_COMPLETE_ITEM_PROCESSING_ALL","DID_UPDATE_ITEMS","DID_ACTIVATE_ITEM","exposeEvent","pond","dispatchEvent","filtered","prepareFile","addFile","addFiles","isFilePondFile","removeFile","sources","lastArgument","processFile","prepareFiles","processFiles","_len3","_key3","removeFiles","_len4","_key4","q","moveFile","browse","replaceElement","restoreElement","isAttachedTo","createAppObject","customOptions","lowerCaseFirstLetter","attributeNameToPropertyName","attributeName","mapObject","propertyMap","mapping","selectorRegExp","getAttributesAsObject","attributeMapping","attribute","createAppAtElement","mergedOptions","attributeOptions","app","createApp$1","PRIVATE_METHODS","createAppAPI","replaceInString","replacements","createWorker","workerBlob","workerURL","URL","createObjectURL","worker","Worker","post","transferList","onmessage","postMessage","terminate","revokeObjectURL","loadImage","img","renameFile","renamedFile","copyFile","registeredPlugins","createAppPlugin","plugin","pluginOutline","views","isOperaMini","operamini","hasPromises","hasBlobSlice","hasCreateObjectURL","hasVisibility","hasTiming","hasCSSSupports","CSS","isIE11","supported","apps","FileStatus","OptionTypes","registerPlugin","updateOptionTypes","indexToRemove","newHook","plugins","Keyboard","extendParams","emit","rtl","rtlTranslate","kc","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","allowSlideNext","isHorizontal","isVertical","allowSlidePrev","onlyInViewport","inView","slideClass","slideActiveClass","swiperWidth","clientWidth","swiperHeight","clientHeight","windowWidth","windowHeight","innerHeight","swiperOffset","swiperCoord","slideNext","slidePrev","enable","createElementIfNotDefined","originalParams","checkProps","createElements","auto","Navigation","navigation","nextEl","prevEl","hideOnClick","disabledClass","hiddenClass","lockClass","navigationDisabledClass","makeElementsArray","getEl","isElement","uniqueNavElements","toggleEl","subEl","watchOverflow","isLocked","update","_swiper$navigation","loop","isBeginning","rewind","isEnd","onPrevClick","onNextClick","initButton","_swiper$navigation2","destroyButton","_swiper$navigation3","_s","_swiper$navigation4","targetEl","pagination","classesToSelector","Pagination","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","onBulletClick","slidesPerGroup","realIndex","slideToLoop","slideTo","previousIndex","slidesLength","virtual","slides","snapGrid","previousRealIndex","snapIndex","previousSnapIndex","activeIndex","firstIndex","midIndex","classesToRemove","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","subElIndex","fractionEl","totalEl","progressbarDirection","progressEl","transitionDuration","render","grid","paginationHTML","numberOfBullets","freeMode","Thumb","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","initialized","swiperCreated","onThumbClick","thumbsSwiper","destroyed","clickedIndex","clickedSlide","slideToIndex","thumbsParams","SwiperClass","watchSlidesProgress","slideToClickedSlide","thumbsSwiperParams","slidesPerView","slidesPerViewDynamic","thumbsToActivate","thumbActiveClass","centeredSlides","slidesEl","useOffset","currentThumbsIndex","newThumbsIndex","newThumbsSlide","visibleSlidesIndexes","getThumbsElementAndInit","thumbsElement","onThumbsSwiper","watchForThumbsToAppear","setTransition","loadSectionContent","$targetElement","targetURL","scrollToTop","viewPartial","$viewPartial","initializeBarRating","initializeRatingsFormHandler","initializeRatingsPaginationHandler","$productTabs","$clickedTab","$prevActiveTab","$visibleElement","checkProductFormCompletion","updateFormCircle","productFormPrimaryInfoComplete","productFormCategoriesComplete","productFormPageComplete","productFormGalleryComplete","productFormFilesComplete","productFormVariantsComplete","productFormDocumentationComplete","productFormCollaboratorsComplete","circleSelector","methodToCheck","$circle","slug","price","categoriesCount","tagsValue","versionsCount","licensesCount","contentText","summernote","$imageInputFeatured","$imageInputMulti","FilePond","dataFilesFeatured","dataFilesMulti","$variants","$container","validatedCount","docsText","$editForm","isTouchDevice","maxTouchPoints","msMaxTouchPoints","it","globalThis","$documentAll","documentAll","IS_HTMLDDA","elementSelector","barrating","deselectable","theme","ownKeys","enumerableOnly","symbols","sym","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","hint","prim","toPrimitive","Number","_toPrimitive","_toPropertyKey","_slicedToArray","_arrayWithHoles","_e","_x","_r","_arr","_n","_iterableToArrayLimit","minLen","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","deviceCached","getSupport","smoothScroll","touch","DocumentTouch","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","needPerspectiveFix","isSafari","_ua$split$1$split$0$s2","major","minor","isWebView","calcBrowser","eventsEmitter","eventsListeners","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","processLazyPreloader","imageEl","lazyEl","lazyPreloaderClass","unlazy","preload","lazyPreloadPrevNext","activeColumn","preloadColumns","column","slideIndexLastInView","transitionEmit","runCallbacks","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","onTouchStart","touchEventsData","touchId","simulateTouch","animating","preventInteractionOnTransition","cssMode","loopFix","touchEventsTarget","isTouched","isMoved","swipingClassHasValue","noSwipingClass","composedPath","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","found","closestElement","allowClick","swipeHandler","currentX","currentY","startY","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","maxTranslate","minTranslate","previousX","previousY","diffX","diffY","sqrt","touchAngle","atan2","touchMoveStopPropagation","nested","touchesDiff","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","allowLoopFix","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","currentTranslate","loopSwapReset","disableParentSwiper","resistanceRatio","slidesSizesGrid","setTranslate","activeSlideIndex","resistance","followFinger","updateActiveIndex","updateSlidesClasses","updateProgress","onTouchEnd","slidesGrid","touchEndTime","timeDiff","pathTree","updateClickedSlide","lastClickTime","currentPos","stopIndex","groupSize","slidesPerGroupSkip","increment","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","onResize","breakpoints","setBreakpoint","isVirtual","updateSlides","isVirtualLoop","autoplay","running","paused","resizeTimeout","onClick","preventClicks","preventClicksPropagation","onScroll","newProgress","previousTranslate","translatesDiff","onLoad","autoHeight","onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","capture","domMethod","swiperMethod","updateOnWindowResize","isGridEnabled","initialSlide","resizeObserver","eventsPrefix","setWrapperSize","virtualTranslate","breakpointsBase","spaceBetween","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","loopAddBlankSlides","loopAdditionalSlides","loopPreventsSliding","passiveListeners","maxBackfaceHiddenSlides","containerModifierClass","slideBlankClass","slideVisibleClass","slideFullyVisibleClass","slideNextClass","slidePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","prototypes","getDirectionPropertyValue","getDirectionLabel","swiperSize","wrongRTL","previousSlidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","gridEnabled","slideSize","initSlides","unsetSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","boxSizing","_slide","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slidesBefore","slidesAfter","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","addToSnapGrid","addToSlidesGrid","updateSlidesOffset","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","getSlideByIndex","getSlideIndexByData","visibleSlides","minusOffset","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","originalProgress","multiplier","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","getFilteredSlide","activeSlide","prevSlide","nextSlide","emitSlidesClasses","newActiveIndex","getVirtualRealIndex","aIndex","getActiveIndexByTranslate","firstSlideInColumn","pathEl","slideFound","byController","translateTo","translateBounds","internal","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transition","transitionDelay","transitionStart","transitionEnd","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_cssModeVirtualInitialSet","onSlideToWrapperTransitionEnd","newIndex","targetSlideIndex","needLoopFix","slideRealIndex","perGroup","_clientLeft","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","slideReset","slideToClosest","currentSnap","slideSelector","loopedSlides","getSlideIndex","loopCreate","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","recalcSlides","_ref4$slideTo","byMousewheel","fill","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","swiperLoopMoveDOM","currentSlideTranslate","controller","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","moving","__preventObserver__","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","wasLoop","changeDirection","isEnabled","hasLoop","containerEl","currentHeight","points","minRatio","_points$i","wasLocked","lastSlideRightEdge","addClasses","suffixes","resultClasses","prepareClasses","removeClasses","extendedDefaults","swipers","newParams","__modules__","swiperParams","passedParams","eventName","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","setProgress","cls","getSlideClasses","updates","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","getWrapperSelector","getWrapper","slideSlots","hostEl","lazyElements","deleteInstance","cleanStyles","static","newDefaults","installModule","prototypeGroup","protoMethod","use","animationFrame","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","parsedData","$ratingsSection","swal","confirm","closeModal","$pagyLinks","$this","paginatedRatingsURL","NATIVE_BIND","FunctionPrototype","uncurryThisWithBind","_objectSpread2","_typeof","_extends","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","getParentOrHost","ctx","includeCTX","_throttleTimeout","R_SPACE","selfOnly","appliedTransforms","matrixFn","DOMMatrix","CSSMatrix","MSCSSMatrix","getWindowScrollingElement","scrollingElement","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","containerRect","elMatrix","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastElementChild","getRelativeScrollOffset","winScroller","includeSelf","gotSelf","scrollWidth","scrollHeight","elemCSS","isRectEqual","rect1","rect2","throttle","scrollBy","Polymer","Zepto","dom","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","indexOfObject","animateAll","_this","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","animationResetTimer","currentRect","animatingX","animatingY","forRepaintDummy","repaint","initializeByDefault","PluginManager","pluginName","pluginEvent","sortable","eventCanceled","cancel","eventNameGlobal","initializePlugins","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","rootEl","cloneEl","toEl","fromEl","oldDraggableIndex","newDraggableIndex","putSortable","extraEventProperties","onName","pullMode","lastPutMode","allEventProperties","_excluded","dragEl","parentEl","ghostEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","pointerEvents","_detectDirection","elCSS","elWidth","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","nearestEmptyInsertDetectEvent","nearest","emptyInsertThreshold","insideHorizontally","insideVertically","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","setData","dropBubble","dragoverBubble","dataIdAttr","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","relatedRect","_disableDraggable","_unsilent","_generateId","sum","_nextTick","_cancelNextTick","_getDirection","originalTarget","inputs","_saveInputCheckedState","criteria","_prepareDragStart","dragStartFn","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","_onTouchMove","_onDragStart","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","_hideClone","cloneId","_loopId","setInterval","effectAllowed","_dragStartId","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","elLastChild","spacer","_ghostIsLast","changed","_ghostIsFirst","targetBeforeFirstSwap","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetS1","targetS2","_getInsertDirection","_getSwapDirection","moveVector","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","save","handleEvent","_globalDragOver","useAnimation","dst","cancelNextTick","detectDirection","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","toSortable","onSpill","Revert","Remove","startIndex","dragStart","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","uncurryThis","productImageSwiper","categorySwiper","productImageSwiperThumb","updateNavigationButtons","swiperInstance","$swiperPrevButton","Swiper","lazy","watchSlidesVisibility","Thumbs","afterInit","slideChange","fails","OldCookies","Cookies","decode","converter","expires","toUTCString","stringifiedAttributes","cookie","jar","cookies","withConverter","addFolderElementListeners","folderElement","nestedFileIDs","filesToAdd","$folder","$collapsibleDownloadsContainer","$folderToggler","$folderIcon","$deleteFolderBtn","folderName","addCollapsibleListener","addCheckBoxListeners","addElementRemover","$downloadItemsContainer","$addFilesBtn","$folderCheckBox","$checkbox","downloadID","$folderDownloadItemsContainer","$downloadCheckboxes","addFolderCheckBoxListener","$deleteBtn","$parentElement","elementName","$fileElement","$versionFiles","cleanUpFileReferences","transferFileElementOutOfPond","downloadHTML","$downloadsContainer","$downloadElement","$newVersionForm","$versionEditForm","$versionFilesContainer","$downloadFolders","$downloadFolderForm","$downloadFoldersContainer","$noFolderDownloadsContainer","$addFolderBtn","$hideFolderFormBtn","$downloadFormContainer","$folderFormContainer","$downloadsModal","Map","itemToInsert","$itemToInsert","firstEntry","fileID","insertedItem","modal","select2","variable","obj1","obj2","DATE_PATTERN","ISO8601_PATTERN","DECIMAL_SEPARATOR","parseISO8601","negativeValues","series","toStr","toArr","jsOptionsFunc","hideLegend","setTitle","setMin","setMax","setStacked","setXtitle","setYtitle","chart","chartOptions","legend","stacked","colors","xtitle","ytitle","library","sortByTime","sortByNumberSeries","sortByNumber","isMinute","getMilliseconds","isHour","isDay","isWeek","dayOfWeek","isMonth","isYear","byteSuffixes","formatValue","pre","precision","byteScale","suffixIdx","baseValue","toPrecision","zeros","thousands","decimal","seriesOption","allZeros","baseOptions","maintainAspectRatio","tooltips","displayColors","callbacks","fontSize","fontColor","scales","yAxes","ticks","maxTicksLimit","scaleLabel","xAxes","gridLines","drawOnChartArea","defaultColors","setBarMin","setBarMax","labelString","addOpacity","hex","notnull","setLabelSize","maxLabelSize","labels","setFormatOptions","chartType","formatOptions","myAxes","stepSize","datasets","datasetIndex","xLabel","yLabel","dataPoint","tooltipItem","dataLabel","valueLabel","jsOptions","createDataTable","i$1","s$1","j$1","rows2","xtype","sortedLabels","i$2","s$2","d$1","j$2","color","backgroundColor","borderColor","pointBackgroundColor","borderWidth","pointHoverBackgroundColor","lineTension","pointRadius","pointHitRadius","xmin","xmax","ticksKey","helpers","minTime","maxTime","value$1","displayFormats","unitStepSize","tooltipFormat","defaultExport","renderLineChart","drawChart","renderPieChart","donut","cutoutPercentage","renderColumnChart","barOptions","renderAreaChart","renderBarChart","renderScatterChart","showLines","renderBubbleChart","log","defaultOptions$1","xAxis","yAxis","tooltip","plotOptions","areaspline","area","marker","hideLegend$1","verticalAlign","layout","setTitle$1","jsOptions$1","stackedValue","stacking","setFormatOptions$1","formatter","pointFormatter","defaultExport$1","curve","symbol","pie","innerSize","categories","d2","newSeries","renderTo","Chart","defaultOptions$2","chartArea","fontName","pointSize","textStyle","alignment","curveType","hAxis","titleTextStyle","gridlines","baselineColor","viewWindow","vAxis","hideLegend$2","setTitle$2","setBarMin$1","setBarMax$1","setStacked$2","isStacked","setXtitle$2","italic","setYtitle$2","jsOptions$2","resize","attachEvent","defaultExport$2","this$1","waitForLoaded","pieHole","visualization","DataTable","addColumn","addRows","areaOpacity","renderGeoChart","colorAxis","row","renderTimeline","clearChart","draw","pack","loadOptions","packages","__config","language","mapsApiKey","charts","LineChart","Timeline","GeoChart","columnType","pendingRequests","runningRequests","maxRequests","pushRequest","runNext","requestComplete","ajaxCall","textStatus","errorThrown","adapters","setText","innerText","chartError","noPrefix","errorCatcher","__render","fetchDataSource","dataSource","rawData","addDownloadButton","link","download","alt","__downloadAttached","__enterEvent","childOf","toImage","__leaveEvent","fn2","detachEvent","getAdapterType","product","addAdapter","adapter","loadAdapters","Highcharts","google","dataEmpty","renderChart","messages","callAdapter","fnName","adapterName","__adapterObject","toFormattedKey","keyType","formatSeriesData","detectXType","noDatetime","detectXTypeWithFunction","copySeries","processSeries","discrete","processSimple","perfectData","elementId","Chartkick","refresh","startRefresh","getDataSource","getChartObject","getAdapter","updateData","__updateOptions","redraw","refreshData","sep","intervalId","stopRefresh","background","canvas","tmpCanvas","tmpCtx","getContext","fillStyle","fillRect","drawImage","toDataURL","toBase64Image","updateRefresh","__processData","__chartName","__proto__","PieChart","ColumnChart","BarChart","AreaChart","ScatterChart","BubbleChart","configure","setDefaultOptions","eachChart","chartId","default","P","F","G","I","createSVGRect","z","opera","B","deg2rad","hasBidiBug","hasTouch","TouchEvent","isMS","isWebKit","isFirefox","isChrome","SVG_NS","chartCount","seriesTypes","symbolSizes","marginNames","dateFormats","Infinity","C","H","g","objectEach","fireEvent","Fx","dSetter","paths","toD","curAnim","initPath","A","endX","isArea","K","J","fillSetter","strokeSetter","tweenTo","extendClass","pad","relativeLength","proceed","datePropsToTimestamps","formatSingle","numberFormat","decimalPoint","thousandsSep","getMagnitude","LN10","normalizeTickInterval","correctFloat","stableSort","safeI","animObject","timeUnits","toExponential","easeInOutSine","getStyle","addEventListenerPolyfill","protoEvents","hcEvents","Point","runTrackerClick","removeEventListenerPolyfill","seriesType","pointClass","uniqueKey","highcharts","arrayMax","arrayMin","defined","destroyObjectProperties","discardElement","garbageBin","erase","isClass","isDOMElement","pick","pInt","setAnimation","renderer","globalAnimation","splat","syncTimeout","Color","parsers","white","black","stops","rgba","brighten","setOpacity","U","S","Q","O","SVGElement","textProps","D","msHidden","webkitHidden","complexColor","N","T","radialGradient","linearGradient","gradients","radialReference","x1","y1","x2","y2","gradientUnits","getRadialAttr","defs","radAttr","gradient","applyTextOutline","getContrast","fakeTS","ySetter","xSetter","removeTextOutline","stroke","symbolCustomAttribs","_defaultGetter","symbolName","symbolAttr","rotation","doTransform","_defaultSetter","styledMode","shadows","updateShadows","afterSetters","updateTransform","cutHeight","clip","crisp","strokeWidth","textWidth","forExport","added","buildText","textOutline","getBBox","ontouchstart","touchEventFired","onclick","setRadialReference","inverted","rotationOriginX","rotationOriginY","toFront","alignedObjects","alignOptions","alignByTranslate","alignTo","placed","alignAttr","textStr","cacheKeys","textOverflow","aa","htmlGetBBox","isSVG","parentGroup","parentInverted","handleZ","zIndexSetter","onAdd","safeRemoveChild","ownerSVGElement","clipPath","onmouseout","onmouseover","onmousemove","destroyShadows","shadow","xGetter","dashstyleSetter","alignSetter","alignValue","opacitySetter","titleSetter","textSetter","bBox","textPxLength","setTextPath","textAnchor","textPathWrapper","startOffset","setAttributeNS","destroyTextPath","visibilitySetter","yGetter","translateXSetter","translateYSetter","rotationSetter","verticalAlignSetter","rotationOriginXSetter","rotationOriginYSetter","scaleXSetter","scaleYSetter","matrixSetter","hasStroke","SVGRenderer","Element","boxWrapper","allowHTML","imgCount","setSize","unSubPixelFix","fontFamily","setStyle","cx","cy","getSubStringLength","ba","getSpanWidth","actualWidth","escapes","whiteSpace","fontMetrics","textCache","setState","crispLine","circle","arc","innerR","rSetter","rx","ry","rGetter","viewBox","preserveAspectRatio","imgwidth","imgheight","backgroundSize","isImg","chartIndex","square","triangle","diamond","clockwise","callout","anchorX","anchorY","clipRect","rotCorr","R","hasBoxWidthChanged","V","widthSetter","heightSetter","paddingSetter","paddingLeftSetter","anchorXSetter","anchorYSetter","Renderer","htmlCss","htmlUpdateTransform","textAlign","invertChild","oldTextWidth","cTT","oldRotation","oldAlign","setSpanRotation","getSpanCorrection","xCorr","yCorr","alignOnAdd","getTransformKey","transformOrigin","addedSetters","classSetter","Time","timezone","timezoneOffset","useUTC","timezoneOffsetFunction","variableTimezone","makeTime","moment","tz","shortWeekdays","shortMonths","Y","resolveDTLFormat","getTimeTicks","unitRange","higherRanks","totalRange","loading","numericSymbols","resetZoom","resetZoomTitle","borderRadius","colorCount","defaultSeriesType","ignoreHiddenSeries","spacing","resetZoomButton","plotBorderColor","widthAdjust","subtitle","alignColumns","labelFormatter","activeColor","inactiveColor","itemStyle","itemHoverStyle","itemHiddenStyle","itemCheckboxStyle","squareSymbol","symbolPadding","labelStyle","dateTimeLabelFormats","footerFormat","headerFormat","pointFormat","defaultPlotOptions","Tick","isNewLabel","isNew","tickmarkOffset","addLabel","tickPositions","isDatetimeAxis","unitName","isFirst","isLast","formatCtx","dateTimeLabelFormat","tickPositionInfo","isLog","lin2log","shortenLabel","getSlotWidth","useHTML","labelGroup","getLabelSize","horiz","handleOverflow","chartWidth","labelLeft","labelRight","isRadial","labelAlign","autoRotation","getPosition","oldChartHeight","chartHeight","transB","opposite","oldChartWidth","getLabelPosition","transA","isLinked","linkedParent","reversed","staggerLines","tickRotCorr","reserveSpaceDefault","labelOffset","getMarkPath","renderGridLine","gridLine","dashstyle","gridGroup","getPlotLinePath","lineWidth","force","renderMark","tickSize","mark","isXAxis","axisGroup","renderLabel","xy","showFirstLabel","showLastLabel","isActive","range","endOnTick","indentation","maxPadding","minorTickLength","minorTickPosition","minPadding","showEmpty","startOfWeek","startOnTick","tickLength","tickPixelInterval","tickmarkPlacement","tickPosition","minorGridLineColor","minorGridLineWidth","minorTickColor","lineColor","gridLineColor","tickColor","defaultYAxisOptions","stackLabels","allowOverlap","crop","gridLineWidth","defaultLeftAxisOptions","defaultRightAxisOptions","defaultBottomAxisOptions","defaultTopAxisOptions","isX","isZAxis","coll","userOptions","defaultLabelFormatter","minPixelPadding","zoomEnabled","hasNames","plotLinesAndBandsGroups","positiveValuesOnly","allowNegativeLog","linkedTo","labelEdge","minorTicks","plotLinesAndBands","alternateBands","minRange","userMinRange","maxZoom","stacks","oldStacks","stacksTouched","crosshair","crosshairs","axes","linearToLogConverter","val2lin","log2lin","lin2val","numericSymbolMagnitude","tickInterval","getSeriesExtremes","hasVisibleSeries","dataMin","dataMax","softThreshold","buildStacks","xData","getXExtremes","getExtremes","oldTransA","oldMin","isOrdinal","isBroken","sector","toPixels","toValue","translatedValue","acrossPanes","getLinearTickPositions","single","getMinorTickInterval","minorTickInterval","getMinorTickPositions","pointRangePadding","paddedTicks","getLogTickPositions","normalizeTimeTickInterval","trimTicks","adjustForMinRange","xIncrement","getClosest","closestPointRange","noSharedTooltip","nameToX","requireSorting","uniqueNames","autoIncrement","updateNames","isDirtyData","generatePoints","setAxisTranslation","axisPointRange","minPointOffset","pointRange","pointPlacement","xrange","ordinalSlope","translationSlope","staticScale","minFromRange","setTickInterval","getTickAmount","userMin","userMax","beforePadding","usePercentage","softMin","softMax","MAX_VALUE","ceiling","tickAmount","oldMax","beforeSetTickPositions","postProcessTickInterval","minTickInterval","allowDecimals","unsquish","setTickPositions","tickPositioner","ordinalPositions","adjustTickAmount","alignToOthers","alignTicks","pane","finalTickAmt","setScale","isDirty","oldAxisLength","setAxisSize","forceRedraw","oldUserMin","oldUserMax","resetStacks","cleanStacks","setExtremes","kdTree","eventArgs","newMin","newMax","allowZoomOutside","displayBtn","zoomed","offsets","plotWidth","plotHeight","plotTop","plotLeft","getThreshold","autoLabelAlign","labelMetrics","autoRotationLimit","labelRotation","slotWidth","renderUnsquish","maxLabelLength","specificTextOverflow","addTitle","axisTitle","low","middle","generateTick","axisOffset","clipOffset","axisParent","showAxis","gridZIndex","reserveSpace","titleOffset","renderLine","axisTitleMargin","getMaxLabelDimensions","maxLabelDimensions","axisLine","getLinePath","getTitlePosition","titlePosition","renderMinorTick","hasRendered","renderTick","alternateGridColor","overlap","polar","PlotLineOrBand","_addedPlotLB","plotLines","plotBands","addPlotBandOrLine","isPlaced","renderStackTotals","keepProps","keepEvents","drawCrosshair","cross","crosshairPos","plotX","plotY","chartX","chartY","stackY","hideCrosshair","dashStyle","Axis","_minorAutoInterval","svgElem","getPlotBandPath","isFlat","getLabelText","xBounds","yBounds","addPlotBand","addPlotLine","removePlotBandOrLine","removePlotBand","removePlotLine","Tooltip","shared","outside","scrollablePixelsX","scrollablePixelsY","cleanSplit","tt","applyFilter","stdDeviation","slope","getLabel","shape","distance","hideTimer","tooltipTimeout","move","followPointer","hideDelay","getAnchor","pointer","tooltipPos","plotLow","plotHigh","getChartPosition","containerScaling","ttBelow","negative","defaultFormatter","tooltipFooterHeaderFormatter","bodyFormatter","tooltipOptions","getLabelConfig","applyInactiveState","renderSplit","spacingBox","colorIndex","updatePosition","isHeader","headerShape","rank","positioner","distribute","getDateFormat","getXDateFormat","xDateFormat","isFooter","labelConfig","tooltipDateKeys","styledModeFormat","formatPrefix","tooltipFormatter","Pointer","runChartClick","pinchDown","lastValidTouch","followTouchMove","setDOMEvents","zoomOption","zoomType","pinchType","zoomX","zoomY","zoomHor","zoomVert","hasZoom","chartPosition","getCoordinates","findNearestKDPoint","findNearestPointBy","searchPoint","distX","getPointFromEvent","getChartCoordinatesFromPoint","shapeArgs","getHoverData","stickyTracking","directTouch","enableMouseTracking","isBoosting","getPoint","hoverPoint","hoverSeries","hoverPoints","runPointActions","isDirectTouch","onMouseOver","firePointEvent","unDocMouseMove","hoverChartIndex","onDocumentMouseMove","linkedSeries","navigatorSeries","inactiveOtherPoints","setAllPointsToState","isCartesian","onMouseOut","hoverX","scaleGroups","getPlotBox","markerGroup","dataLabelsGroup","clipBox","mouseIsDown","cancelClick","mouseDownX","mouseDownY","selectionMarker","panKey","hasDragged","isInsidePlot","hasCartesianSeries","selectionMarkerFill","panning","pan","hasPinched","_cursor","onContainerMouseDown","onDocumentMouseUp","inClass","onContainerMouseLeave","onContainerMouseMove","openMenu","onTrackerMouseOut","onContainerClick","onmousedown","unbindContainerMouseLeave","unbindDocumentMouseUp","onContainerTouchStart","onContainerTouchMove","unbindDocumentTouchEnd","onDocumentTouchEnd","pinchTranslate","pinchTranslateDirection","pinch","initiated","plotBox","PointerEvent","MSPointerEvent","MSPOINTER_TYPE_TOUCH","onContainerPointerDown","onContainerPointerMove","onDocumentPointerUp","batchMSEvents","Legend","positionCheckboxes","proximate","unchartrender","proximatePositions","positionItems","itemMarginTop","itemMarginBottom","initialItemY","symbolWidth","pages","isDirtyLegend","isDirtyBox","colorizeItem","legendGroup","legendItem","legendLine","legendSymbol","isMarker","pointAttribs","allItems","positionItem","_legendItemPos","legendWidth","destroyItem","getAllItems","clipHeight","legendHeight","titleHeight","scrollOffset","checkboxOffset","renderTitle","maxLegendWidth","contentGroup","labelFormat","renderItem","itemDistance","drawLegendSymbol","createCheckboxForItem","showCheckbox","scrollGroup","baseline","symbolHeight","setItemEvents","widthOption","legendItemWidth","maxItemWidth","totalItemWidth","legendItemHeight","layoutItem","itemX","lastLineHeight","itemY","lastItemY","showInLegend","legendItems","legendType","getAlignment","floating","adjustMargins","legendIndex","arrowSize","nav","currentPage","fullHeight","pageIx","up","pager","down","upTracker","downTracker","LegendSymbolMixin","drawRectangle","symbolRadius","drawLineMarker","bubbleLegend","getArgs","labelCollectors","showAxes","pointCount","colorCounter","symbolCounter","firstRender","initSeries","missingModuleFor","orderSeries","getName","setResponsive","temporaryDisplay","layOutTitles","updateTotals","getStacks","getMargins","extKey","drawChartBox","getAxes","getSelectedPoints","hasGroupedData","selectedStaging","getSelectedSeries","applyDescription","isStock","getChartSize","containerWidth","containerHeight","hcOrigStyle","hcOrigDetached","hcOricDetached","setClassName","getContainer","skipClone","exporting","resetMargins","getAxisMargins","setChartSize","reflow","isPrinting","reflowTimeout","setReflow","unbindReflow","plotSizeX","plotSizeY","plotBorderWidth","skipAxes","chartBackground","plotBackground","plotBorder","plotBGImage","plotBackgroundColor","plotBackgroundImage","plotShadow","propFromSeries","linkSeries","renderSeries","renderLabels","seriesGroup","addCredits","updateContainerScaling","mapCredits","scroller","isReadyToRender","scrollablePlotArea","minHeight","setUpScrolling","applyFixed","fixedDiv","WebkitOverflowScrolling","scrollingContainer","innerContainer","moveFixedElements","fixedRenderer","scrollableMask","scrollPositionX","scrollPositionY","redrawTrigger","applyOptions","resolveColor","colorByPoint","pointValKey","optionsToObject","dataLabels","setNestedProperty","pointArrayMap","_hasPointLabels","_hasPointMarkers","getClassName","getZone","zones","zoneAxis","nonZonedColor","hasNewShapeType","graphic","shapeType","destroyElements","percentage","stackTotal","valueDecimals","valuePrefix","valueSuffix","importEvents","allowPointSelect","Series","enabledThreshold","states","normal","radiusPlus","lineWidthPlus","fillColor","cropThreshold","halo","inactive","turboThreshold","axisTypes","cropShoulder","parallelArrays","sorted","eventOptions","bindAxes","getColor","getSymbol","optionalAxis","updateParallelArrays","toYData","yData","pointIntervalUnit","pointStart","pointInterval","negativeColor","negativeFillColor","getCyclic","findPointIndex","cropped","cropStart","touched","hasDerivedData","addPoint","isSeriesBoosting","getFirstValidPoint","getExtremesFromAll","forceCrop","cropData","processedXData","processedYData","basePointRange","dataGroup","groupMap","stackedYData","modifyValue","pointPlacementToXValue","startFromThreshold","negStacks","stackKey","X","getStackIndicator","irregularWidths","pointXOffset","barW","yBottom","isInside","Z","closestPointRangePx","getValidPoints","getClipBox","setClip","sharedClipKey","afterAnimate","finishedAnimating","drawPoints","specialGroup","markerAttribs","hasImage","animationTimeout","survive","getGraphPath","connectNulls","leftCliff","rightCliff","getPointSpline","xMap","graphPath","drawGraph","gappedPath","getZonesGraphs","preventGraphAnimation","fillGraph","linecap","applyZones","clips","graph","showLine","isVML","resetZones","invertGroups","plotGroup","invertable","drawDataLabels","redrawPoints","drawTracker","kdAxisArray","searchKDTree","buildKDTree","buildingKdTree","kdNow","StackItem","isNegative","labelrank","getStackBox","justifyDataLabel","reversedStacks","setStackedPoints","modifyStacks","stackTotalGroup","cumulative","singleStacks","percentStacker","cleanRecursively","addSeries","addAxis","createAxis","addColorAxis","ColorAxis","showLoading","loadingDiv","loadingSpan","loadingShown","showDuration","hideLoading","hideDuration","propsRequireDirtyBox","propsRequireReflow","propsRequireUpdateSeries","collectionsWithUpdate","isResponsiveOptions","isInternal","collectionsWithInit","setSubtitle","setCaption","connector","fixedBox","removePoint","initialType","dataGrouping","setName","setCategories","getStackPoints","leftNull","rightNull","isCliff","doCurve","rectPlotX","areaPath","shiftUnit","rightContX","rightContY","groupPadding","pointPadding","minPointLength","brightness","trackerGroups","getColumnMetrics","grouping","columnIndex","maxPointWidth","pointWidth","columnMetrics","crispCol","dense","translatedThreshold","barX","pointAttrToOptions","animationLimit","allowShadow","jitter","takeOrdinalPosition","applyJitter","CenteredSeriesMixin","getCenter","slicedOffset","getStartAndEndRadians","connectorPadding","softConnector","connectorShape","crookDistance","ignoreHiddenPoint","startAngleRad","startR","getX","radii","asin","labelDistance","endAngleRad","maxLabelDistance","slicedTranslation","half","angle","labelPosition","natural","connectorPosition","breakAt","touchingSliceAt","drawEmpty","shadowGroup","delayedRendering","sortByAngle","setVisible","sliced","haloPath","connectorShapes","fixedOffset","straight","crookedLine","getConnectorPath","reducedLen","dlOptions","dataLabelOnNull","connectors","contrastColor","inside","textPath","getDataLabelPath","alignDataLabel","dlBox","forceDL","dataLabelPositioners","radialDistributionY","distributeBox","radialDistributionX","justify","alignToPlotEdges","alignToConnectors","shortened","_pos","positionIndex","_attr","sideOverflow","verifyDataLabelOverflow","placeDataLabels","connectorWidth","connectorColor","minSize","below","hideOverlappingLabels","oldOpacity","newOpacity","absoluteBox","isOld","TrackerMixin","drawTrackerPoint","_hasTracking","drawTrackerGraph","trackByArea","tracker","scatter","browserEvent","defaultChecked","showResetZoom","zoomOut","relativeTo","resetSelection","accumulate","hasImportedEvents","stateMarkerGraphic","currentSymbol","mouseOver","mouseOut","labelBySeries","responsive","currentResponsive","rules","_id","matchResponsiveRule","ruleIds","undoOptions","currentOptions","condition","_modules","isCallable","symbolMap","numberMap","pluralForm","plurals","pluralize","weekdaysParseExact","plural","word","forms","relativeTimeWithPlural","standalone","lastDigit","last2Digits","monthsParseExact","relativeTimeWithMutation","mutation","specialMutationForYears","lastNumber","softMutation","mutationTable","monthsStrictRegex","monthsShortStrictRegex","fullWeekdaysParse","shortWeekdaysParse","minWeekdaysParse","longMonthsParse","shortMonthsParse","ll","lll","llll","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","eraYearOrdinalRegex","$0","$1","$2","isUpper","processFutureTime","eifelerRegelAppliesToNumber","processPastTime","translateSeconds","translateSingular","relativeTimeWithSingular","relativeSeconds","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","numbersNouns","translateFuture","translatePast","numberNoun","numberAsNoun","hundred","ten","weekdaysCaseReplace","nominative","accusative","genitive","processHoursFunction","createCommonjsModule","getCjsExportFromNamespace","colorName","conversions","reverseKeywords","convert","rgb","channels","hsl","hsv","hwb","cmyk","xyz","lab","lch","keyword","ansi16","ansi256","hcg","apple","gray","comparativeDistance","rdif","gdif","bdif","diffc","currentClosestKeyword","currentClosestDistance","t1","t2","t3","smin","lmin","hi","sl","vmin","wh","bl","z2","hr","ansi","mult","rem","colorString","char","integer","hue","chroma","pure","mg","buildGraph","models","deriveBFS","fromModel","adjacents","adjacent","wrapConversion","toModel","conversion","wrapRaw","wrappedFn","wrapRounded","colorConvert","colorName$1","getRgba","getHsla","getRgb","getHsl","getHwb","getAlpha","hexString","rgbString","rgbaString","percentString","percentaString","hslString","hslaString","hwbString","per","hexAlpha","alpha","hsla","vals","hexDouble","reverseNames","valid","setValues","red","lightness","whiteness","cyan","setSpace","rgbArray","hslArray","hsvArray","hwbArray","cmykArray","rgbaArray","hslaArray","setChannel","green","blue","saturation","saturationv","blackness","magenta","yellow","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","contrastRatio","dark","light","negate","lighten","darken","saturate","desaturate","whiten","blacken","greyscale","clearer","opaquer","rotate","degrees","mix","mixinColor","weight","color1","w1","w2","spaces","maxes","getValues","space","capped","chans","sname","svalues","chartjsColor","isValidKey","isNullOrUndef","valueOrDefault","valueAtIndexOrDefault","thisArg","loopable","arrayEquals","a0","a1","ilen","v0","v1","klen","_merger","tval","sval","_mergerIf","mergeIf","merger","inherits","extensions","me","ChartElement","Surrogate","__super__","_deprecated","previous","helpers_core","callCallback","fromIndex","getValueOrDefault","getValueAtIndexOrDefault","effects","easeInQuad","easeOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","helpers_easing","easingEffects","RAD_PER_DEG","DOUBLE_PI","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","exports$1","clearRect","roundedRect","moveTo","closePath","drawPoint","xOffset","yOffset","cornerRadius","rad","beginPath","lineTo","SQRT1_2","_isPointInArea","epsilon","clipArea","unclipArea","flip","stepped","steppedLine","midpoint","tension","bezierCurveTo","controlPointPreviousX","controlPointNextX","controlPointPreviousY","controlPointNextY","helpers_canvas","drawRoundedRectangle","_set","defaultColor","defaultFontColor","defaultFontFamily","defaultFontSize","defaultFontStyle","defaultLineHeight","core_defaults","toFontString","font","family","helpers_options","toLineHeight","toPadding","_parseFont","globalDefaults","fontStyle","cacheable","exports$2","_factorize","log10","exponent","LOG10E","powerOf10","helpers_math","getRtlAdapter","rectX","xPlus","leftForLtr","getLtrAdapter","_itemWidth","helpers$1","math","overrideTextDirection","getPropertyPriority","prevTextDirection","restoreTextDirection","ease","actual","c0","c1","configuration","initialize","_type","pivot","_view","_model","_start","tooltipPosition","hasValue","core_element","exports$3","currentStep","numSteps","onAnimationProgress","onAnimationComplete","core_animation","onComplete","core_animations","addAnimation","cancelAnimation","requestAnimFrame","startDigest","advance","nextStep","arrayEvents","listenArrayEvents","_chartjs","unlistenArrayEvents","stub","DatasetController","datasetElementType","dataElementType","_datasetElementOptions","_dataElementOptions","linkScales","addElements","getMeta","updateIndex","getDataset","scalesOpts","xAxisID","yAxisID","getDatasetMeta","getScaleForId","scaleID","_getValueScaleId","_getIndexScaleId","_getValueScale","_getIndexScale","_update","createMetaDataset","_chart","_datasetIndex","createMetaData","metaData","addElementAndReset","updateElement","buildOrUpdateElements","isExtensible","resyncElements","_configure","_cachedDataOpts","easingValue","_resolveDatasetElementOptions","_resolveDataElementOptions","readKey","datasetOpts","custom","elementOptions","dataIndex","removeHoverStyle","$previousStyle","setHoverStyle","getHoverColor","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","_removeDatasetHoverStyle","_setDatasetHoverStyle","hoverOptions","numMeta","numData","insertElements","onDataPush","onDataPop","onDataShift","onDataSplice","onDataUnshift","core_datasetController","TAU","clipArc","pixelMargin","angleMargin","outerRadius","innerRadius","drawFullCircleBorders","vm","fullCircles","drawBorder","borderAlign","lineJoin","element_arc","inLabelRange","mouseX","hoverRadius","inRange","pointRelativePosition","getAngleFromPoint","betweenAngles","withinRadius","getCenterPoint","halfAngle","halfRadius","getArea","centreAngle","rangeFromCentre","circumference","strokeStyle","valueOrDefault$1","line","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","capBezierPoints","element_line","currentVM","spanGaps","_children","globalOptionLineElements","lastDrawnIndex","_loop","previousItem","lineCap","setLineDash","lineDashOffset","valueOrDefault$2","defaultColor$1","xRange","hitRadius","yRange","mouseY","pointStyle","element_point","inXRange","inYRange","defaultColor$2","getBarBounds","v2","parseBorderSkipped","edge","borderSkipped","horizontal","parseBorderWidth","maxW","maxH","boundingRects","skipX","skipY","rectangle","element_rectangle","rects","Arc","Line","Rectangle","deprecated","valueOrDefault$3","computeMinSampleSize","pixels","_length","getTicks","getPixelForTick","computeFitCategoryTraits","ruler","thickness","barThickness","stackCount","categoryPercentage","barPercentage","computeFlexCategoryTraits","offsetGridLines","bar","controller_bar","scaleOpts","minBarLength","maxBarThickness","_ruler","getRuler","_xScale","_yScale","datasetLabel","_updateElementGeometry","vscale","getBasePixel","vpixels","calculateBarValuePixels","ipixels","calculateBarIndexPixels","_getStacks","metasets","_getMatchingVisibleMetas","getStackCount","getStackIndex","getPixelForValue","_startPixel","_endPixel","imeta","ivalue","stackLength","_parseValue","stackIndex","indexOpts","valueOpts","valueOrDefault$4","resolve$1","controller_bubble","xScale","yScale","dsIndex","getPixelForDecimal","_options","valueOrDefault$5","PI$1","DOUBLE_PI$1","HALF_PI$1","animateRotate","animateScale","legendCallback","listItem","outerHTML","generateLabels","controller_doughnut","getRingIndex","ringIndex","isDatasetVisible","ratioX","ratioY","arcs","cutout","chartWeight","_getRingWeight","endY","contains0","contains90","contains270","minX","minY","maxX","maxY","getMaxBorderWidth","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","animationOpts","calculateCircumference","hoverWidth","ringWeightOffset","dataSetIndex","horizontalBar","controller_horizontalBar","valueOrDefault$6","resolve$2","isPointInArea","scaleClip","halfBorderWidth","tickOpts","defaultClip","toClip","controller_line","_showLine","_scale","updateBezierControlPoints","lineModel","calculatePointY","lineOptions","ds","dsMeta","stackedRightValue","rightValue","sumPos","sumNeg","getRightValue","_getSortedVisibleDatasetMetas","controlPoints","capControlPoint","pt","cubicInterpolationMode","splineCurveMonotone","splineCurve","nextItem","resolve$3","angleLines","circular","pointLabels","beginAtZero","controller_polarArea","starts","_starts","angles","_angles","_updateRadius","countVisibleElements","_computeAngle","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getDistanceFromCenterForValue","resetRadius","doughnut","controller_pie","valueOrDefault$7","controller_radar","pointPosition","getPointPositionForValue","controllers","polarArea","radar","getRelativePosition","native","parseVisibleItems","jlen","getIntersectItems","getNearestItems","intersect","distanceMetric","minDistance","POSITIVE_INFINITY","nearestItems","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","indexMode","core_interaction","modes","intersectsItem","filterByPosition","where","sortByWeight","wrapBoxes","boxes","layoutBoxes","setLayoutDims","layouts","fullWidth","availableWidth","vBoxMaxWidth","hBoxMaxHeight","buildLayoutBoxes","leftAndTop","rightAndBottom","getCombinedMax","updateDims","getPadding","boxPadding","outerWidth","outerHeight","sizes","handleMaxPadding","updatePos","marginForPositions","positions","fitBoxes","refit","refitBoxes","placeBoxes","userPadding","core_layouts","addBox","_layers","removeBox","layoutOptions","availableHeight","verticalBoxes","horizontalBoxes","platform_basic","acquireContext","platform_dom","stylesheet","EXPANDO_KEY","CSS_PREFIX","CSS_SIZE_MONITOR","CSS_RENDER_MONITOR","CSS_RENDER_ANIMATION","ANIMATION_START_EVENTS","EVENT_TYPES","touchstart","touchmove","touchend","pointerdown","pointermove","pointerup","pointerout","readUsedSize","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","supports","removeListener","fromNativeEvent","throttled","ticking","createDiv","createResizer","maxSize","resizer","shrink","_reset","watchForRender","renderProxy","animationName","unwatchForRender","addResizeListener","removeResizeListener","injectCSS","rootNode","containsStyles","platform_dom$2","disableCSSInjection","_enabled","_ensureLoaded","releaseContext","proxies","core_plugins","_plugins","_cacheId","register","unregister","descriptor","descriptors","$plugins","_invalidate","core_scaleService","constructors","registerScaleType","scaleConstructor","scaleDefaults","getScaleConstructor","getScaleDefaults","updateScaleDefaults","additions","addScalesToLayout","valueOrDefault$8","getRtlHelper","titleFontStyle","titleSpacing","titleMarginBottom","titleFontColor","titleAlign","bodySpacing","bodyFontColor","bodyAlign","footerFontStyle","footerSpacing","footerMarginTop","footerFontColor","footerAlign","yPadding","xPadding","caretPadding","caretSize","multiKeyBackground","beforeTitle","tooltipItems","labelCount","afterTitle","beforeBody","beforeLabel","labelColor","labelTextColor","afterLabel","afterBody","beforeFooter","footer","afterFooter","positioners","average","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","indexScale","valueScale","getLabelForIndex","getBaseModel","tooltipOpts","xAlign","yAlign","textDirection","_bodyFontFamily","bodyFontFamily","_bodyFontStyle","bodyFontStyle","_bodyAlign","bodyFontSize","_titleFontFamily","titleFontFamily","_titleFontStyle","titleFontSize","_titleAlign","_footerFontFamily","footerFontFamily","_footerFontStyle","footerFontSize","_footerAlign","legendColorBackground","getTooltipSize","combinedBodyLength","bodyItem","lines","titleLineCount","footerLineCount","widthPadding","maxLineWidth","measureText","fontString","determineAlignment","lf","rf","olf","orf","yf","midX","midY","getBackgroundPoint","paddingAndSize","radiusAndPadding","getAlignedX","getBeforeAfterBodyLines","exports$4","_lastActive","getTitle","getBeforeBody","getBody","bodyItems","getAfterBody","getFooter","existingModel","_active","backgroundPoint","tooltipSize","caretX","caretY","labelColors","labelTextColors","_eventPosition","itemSort","dataPoints","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","drawTitle","rtlHelper","textBaseline","fillText","drawBody","textColor","drawColorBoxes","xLinePadding","colorX","fillLineOfText","bodyAlignForCalculation","rtlColorX","strokeRect","drawFooter","drawBackground","quadraticCurveTo","hasTooltipContent","globalAlpha","getElementsAtEventForMode","positioners_1","core_tooltip","valueOrDefault$9","mergeScaleConfig","slen","mergeConfig","initConfig","updateConfig","newOptions","ensureScalesHaveIDs","buildOrUpdateScales","nextAvailableScaleId","axesOpts","hasId","positionIsHorizontal","compare2Level","l1","l2","onHover","animationDuration","responsiveAnimationDuration","construct","_bufferedRender","instances","retinaScale","bindEvents","initToolTip","getMaximumWidth","getMaximumHeight","newSize","scalesOptions","scaleOptions","xAxisOptions","yAxisOptions","updated","dtype","dposition","isDefault","scaleType","scaleClass","mergeTicksOptions","hasUpdated","buildOrUpdateControllers","newControllers","destroyDatasetMeta","ControllerClass","resetElements","updateLayout","updateDatasets","lastActive","_bufferedRequest","_idx","updateDataset","animationOptions","animationObject","easingFunction","stepDecimal","layers","drawDatasets","_drawTooltip","_getSortedDatasetMetas","filterVisible","drawDataset","getElementAtEvent","getElementsAtEvent","getElementsAtXAxis","getDatasetAtEvent","_meta","generateLegend","unbindEvents","_chartInstance","_listeners","updateHoverStyle","bufferedRequest","core_controller","Controller","configMerge","scaleMerge","core_helpers","parseMaxStyle","styleValue","parentProperty","valueInPixels","isConstrainedValue","getConstraintDimension","domNode","maxStyle","percentageProperty","_getParentNode","constrainedNode","constrainedContainer","hasCNode","hasCContainer","infinity","filterCallback","findNextWhere","arrayToSearch","currentItem","findPreviousWhere","almostEquals","almostWhole","rounded","NEGATIVE_INFINITY","toRadians","toDegrees","radians","_decimalPlaces","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","aliasPixel","pixelWidth","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","EPSILON","pointBefore","pointCurrent","pointAfter","alphaK","betaK","tauK","squaredMagnitude","pointsWithTangents","deltaK","mK","pointsLen","slopeDeltaX","niceNum","fraction","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","srcElement","boundingRect","paddingBottom","getConstraintWidth","getConstraintHeight","_calculatePadding","parentDimension","cw","forceRatio","pixelRatio","pixelSize","longestText","arrayOfThings","gc","garbageCollect","thing","nestedThing","longest","gcLen","numberOfLabelLines","numberOfLines","CanvasGradient","colorValue","CanvasPattern","abstract","DateAdapter","_create","override","members","core_adapters","_date","core_ticks","formatters","tickValue","logDelta","tickString","logTick","numExponential","numDecimal","logarithmic","remain","valueOrDefault$a","sample","getPixelForGridLine","validIndex","lineValue","caches","computeLabelSizes","tickFonts","tickFont","nestedLabel","widest","highest","widths","heights","widestLabelSize","highestLabelSize","valueAt","getTickMarkLength","drawTicks","tickMarkLength","getScaleLabelHeight","parseFontOptions","nestedOpts","parseTickFontOptions","nonSkipped","ticksToFilter","getEvenSpacing","calculateSpacing","majorIndices","axisLength","ticksLimit","factors","factor","evenMajorSpacing","getMajorIndices","skipMajors","majorStart","majorEnd","zeroLineWidth","zeroLineColor","zeroLineBorderDash","zeroLineBorderDashOffset","minRotation","maxRotation","mirror","autoSkip","autoSkipPadding","Scale","zeroLineIndex","_ticks","_getLabels","xLabels","yLabels","beforeUpdate","margins","samplingEnabled","sampleSize","_labelSizes","_maxLabelLines","longestLabelWidth","longestTextCache","_gridLineItems","_labelItems","beforeSetDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","_convertTicksToLabels","beforeCalculateTickRotation","calculateTickRotation","afterCalculateTickRotation","beforeFit","fit","afterFit","_ticksToDraw","_autoSkip","afterUpdate","startPixel","endPixel","reversePixels","_reversePixels","beforeTickToLabelConversion","convertTicksToLabels","userCallback","afterTickToLabelConversion","labelSizes","maxLabelWidth","maxLabelHeight","tickWidth","maxLabelDiagonal","numTicks","_isVisible","_getLabelSizes","scaleLabelOpts","gridLineOpts","isBottom","firstLabelSize","lastLabelSize","lineSpace","tickPadding","isRotated","angleRadians","cosRotation","sinRotation","offsetRight","labelWidth","handleMargins","isFullWidth","rawValue","_getScaleLabel","getValueForPixel","getDecimalForPixel","getBaseValue","avgMajorSpacing","_tickSize","numMajorIndices","optionTicks","rot","_computeGridLineItems","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","ticksLength","tl","axisWidth","axisHalfWidth","alignPixel","alignBorderValue","_computeLabelItems","lineCount","textOffset","isMirrored","fonts","_drawGrid","firstLineWidth","lastLineWidth","_drawLabels","_drawTitle","scaleLabelX","scaleLabelY","scaleLabelFontColor","scaleLabelFont","scaleLabelPadding","halfLineHeight","isLeft","gz","_draw","core_scale","isNullOrUndef$1","defaultConfig","scale_category","ticksOpts","minIndex","maxIndex","_startValue","_valueRange","valueCategory","_defaults","isNullOrUndef$2","generateTicks","generationOptions","dataRange","niceMin","niceMax","numSpaces","MIN_SPACING","maxNumSpaces","maxTicks","rmin","rmax","scale_linearbase","handleTickRangeOptions","minSign","maxSign","suggestedMin","suggestedMax","getTickLimit","_computeTickLimit","handleDirectionalChanges","numericGeneratorOptions","fixedStepSize","ticksAsNumbers","_endValue","defaultConfig$1","DEFAULT_MIN","DEFAULT_MAX","getOrCreateStack","neg","stackData","relativePoints","updateMinMax","scale_linear","hasStacks","stackValues","_defaults$1","valueOrDefault$b","generateTicks$1","exp","significand","tickVal","endExp","endSignificand","minNotZero","lastTick","defaultConfig$2","nonNegativeOrDefault","scale_logarithmic","IDMatches","valuesPerStack","valuesForType","minVal","maxVal","tickValues","_getFirstTickValue","_valueOffset","_defaults$2","valueOrDefault$c","valueAtIndexOrDefault$1","resolve$4","defaultConfig$3","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","textSize","plFont","furthestLimits","furthestAngles","_pointLabelSizes","valueCount","getPointPosition","drawingArea","getIndexAngle","hLimits","vLimits","setReductions","getTextAlignForAngle","adjustPointPositionForLabelHeight","drawPointLabels","pointLabelOpts","tickBackdropHeight","outerDistance","pointLabelPosition","pointLabelFontColor","drawRadiusLine","numberOrZero","scale_radialLinear","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","scalingFactor","distanceFromCenter","thisAngle","getBasePosition","angleLineOpts","tickFontColor","_defaults$3","deprecated$1","resolve$5","valueOrDefault$d","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_INTEGER","MAX_SAFE_INTEGER","INTERVALS","common","steps","UNITS","sorter","arrayUnique","getMin","getMax","buildLookupTable","timestamps","distribution","lookup","mid","i0","i1","lo","interpolate$1","skey","tkey","span","toTimestamp","_adapter","determineUnitForAutoTicks","minUnit","capacity","determineUnitForFormatting","determineMajorUnit","generate","timeOpts","computeOffsets","setMajorTicks","majorUnit","ticksFromTimestamps","defaultConfig$4","displayFormat","scale_time","labelsAdded","_table","_timestamps","getLabelCapacity","_unit","_majorUnit","_offsets","tickFormatFunction","minorFormat","majorFormat","nestedTickOpts","getPixelForOffset","_getLabelSize","tickLabelWidth","tickFontSize","getLabelWidth","exampleTime","exampleLabel","_defaults$4","radialLinear","FORMATS","filler","propagate","mappers","boundary","decodeFill","computeLinearBoundary","scaleBottom","scaleTop","scaleZero","computeCircularBoundary","computeBoundary","resolveTarget","visited","createMapper","isDrawable","drawArea","curve0","curve1","len0","len1","doFill","mapper","p0","d0","d1","loopOffset","plugin_filler","afterDatasetsUpdate","$filler","beforeDatasetsDraw","getRtlHelper$1","noop$1","valueOrDefault$e","getBoxWidth","labelOpts","usePointStyle","boxWidth","ci","onLeave","lineDash","legendHitBoxes","_hoveredItem","doughnutMode","beforeBuildLabels","buildLabels","afterBuildLabels","labelFont","hitboxes","lineWidths","totalHeight","vPadding","columnWidths","columnHeights","totalWidth","currentColWidth","currentColHeight","lineDefault","drawLegendBox","SQRT2","halfFontSize","xLeft","yMiddle","alignmentOffset","realX","_getLegendItemAt","hitBox","lh","hoveredItem","createNewLegendAndAttach","legendOpts","plugin_legend","_element","beforeInit","afterEvent","noop$2","Title","titleX","titleY","fontOpts","createNewTitleBlockAndAttach","titleOpts","titleBlock","_adapters","animationService","Interaction","scaleService","Ticks","pluginService","PluginBase","canvasHelpers","layoutService","LinearScaleBase","klass","cfg","isPreviewableImage","vectorMultiply","createVector","vectorAdd","vectorNormalize","vectorRotate","getMarkupValue","scalar","getMarkupStyles","markup","lineStyle","borderStyle","getMarkupRect","pointsToPathShape","setAttributes","updateEllipse","IMAGE_FIT_STYLE","contain","cover","updateImage","TEXT_ANCHOR","updateText","updateLine","begin","lineDecoration","arrowBeginRotationPoint","arrowBeginCenter","arrowBeginA","arrowBeginB","arrowEndRotationPoint","arrowEndCenter","arrowEndA","arrowEndB","updatePath","createShape","createLine","CREATE_TYPE_ROUTES","ellipse","UPDATE_TYPE_ROUTES","createMarkupByType","updateMarkupByType","MARKUP_RECT","toOptionalFraction","prepareMarkup","_markup","sortMarkupByZIndex","createMarkupView","dirty","viewWidth","viewHeight","cropWidth","cropHeight","_size","outputWidth","outputHeight","outputFit","outputUpscale","upscale","shouldUpscale","scalarWidth","scalarHeight","markupFilter","createVector$1","vectorDot","vectorSubtract","vectorDistanceSquared","vectorDistance","getOffsetPointOnEdge","sinA","sinB","sinC","cosC","getRotatedRectSize","hor","ver","calculateCanvasSize","canvasAspectRatio","imageAspectRatio","canvasWidth","canvasHeight","imgWidth","imgHeight","getImageRectZoomFactor","imageRect","cropRect","imageWidth","imageHeight","rotatedCropSize","getCenteredCropRect","getCurrentCropSize","imageSize","canvasSize","canvasCenter","stage","shouldLimit","scaleToFit","widthFloat","heightFloat","IMAGE_SCALE_SPRING_PROPS","createBitmapView","createImageCanvasWrapper","bitmap","createClipView","createMarkup","destroyMarkup","transparencyIndicator","translation","cropAspectRatio","stageZoomFactor","imageView","createImageView","fixedPreviewHeight","minPreviewHeight","maxPreviewHeight","panelAspectRatio","clipWidth","SVG_MASK","SVGMaskUniqueId","createImageOverlayView","fpAPI","mask","BitmapWorker","createImageBitmap","ColorMatrixWorker","imageData","colorMatrix","m11","m12","m13","m14","m15","m21","m22","m23","m24","m25","m31","m32","m33","m34","m35","m43","m44","m45","buffer","getImageSize","naturalWidth","naturalHeight","fixImageOrientation","orientation","createPreviewImage","isBitmap","MAX_WIDTH","MAX_HEIGHT","calculateAverageColor","getImageData","averageColor","cloneCanvas","cloneImageData","ImageData","createImageData","Uint8ClampedArray","crossOrigin","createImageWrapperView","OverlayView","ImageView","putImageData","removeImageView","shiftImage","imageViewBin","pushImage","didUpdateItemMetadata","_imageView","canCreateImageBitmap","didCreatePreviewContainer","fileURL","drawPreview","loadPreviewFallback","previewImageLoaded","pixelDensityFactor","scaleFactor","previewImageRatio","previewContainerWidth","previewContainerHeight","previewImage","close","overlayShadow","imageBitmap","didDrawPreview","restoreOverlay","overlayError","overlaySuccess","didThrowError","didCompleteProcessing","_ref13","_ref14","DID_IMAGE_PREVIEW_DRAW","DID_IMAGE_PREVIEW_CONTAINER_CREATE","DID_FINISH_CALCULATE_PREVIEWSIZE","_ref15","viewsToRemove","imagePreviewView","viewAPI","didLoadItem","supportsCreateImageBitmap","maxPreviewFileSize","imagePreview","rescaleItem","itemPanelAspectRatio","previewAspectRatio","previewHeightMax","previewHeight","didResizeView","shouldRescale","didCalculatePreviewSize","shouldDrawPreview","DID_RESIZE_ROOT","DID_STOP_RESIZE","DID_IMAGE_PREVIEW_CALCULATE_SIZE","allowImagePreview","imagePreviewFilterItem","imagePreviewHeight","imagePreviewMinHeight","imagePreviewMaxHeight","imagePreviewMaxFileSize","imagePreviewZoomFactor","imagePreviewUpscale","imagePreviewMaxInstantPreviewFileSize","imagePreviewTransparencyIndicator","imagePreviewCalculateAverageImageColor","imagePreviewMarkupShow","imagePreviewMarkupFilter","allowFileMetadata","fileMetadataObject","mimeTypeMatchesWildCard","wildcard","isValidMimeType","acceptedTypes","userInputType","acceptedType","getItemType","validateFile","acceptedFileTypes","typeDetector","detectedType","applyMimeTypeMap","acceptedFileType","accept","validationResult","handleRejection","acceptedFileTypesMapped","acceptedFileTypesMapped_unique","allButLastType","lastType","allowFileTypeValidation","labelFileTypeNotAllowed","fileValidateTypeLabelExpectedTypes","fileValidateTypeLabelExpectedTypesMap","fileValidateTypeDetectType","sizeMax","sizeMin","fileFilter","filesize","totalSizeMax","allowFileSizeValidation","maxFileSize","minFileSize","maxTotalFileSize","fileValidateSizeFilter","labelMinFileSizeExceeded","labelMinFileSize","labelMaxFileSizeExceeded","labelMaxFileSize","labelMaxTotalFileSizeExceeded","labelMaxTotalFileSize","DESCRIPTORS","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","toPropertyKey","$TypeError","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","CONFIGURABLE","WRITABLE","Attributes","$String","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","stringSlice","requireObjectCoercible","$Object","defineGlobalProperty","SHARED","definePropertyModule","createPropertyDescriptor","tryToString","postfix","IndexedObject","errorHandled","lastSetting","mq","menuWidthChange","$spinner","valEqual","notEmpty","searchPath","basePath","blacklistedKeys","webpackPolyfill","webpackContext","req","webpackContextResolve","$el","errorMessage","$error","class","$icon","pastedText","setRangeText","selectionStart","selectionEnd","$body","$cart_total","paypal","fundingSource","FUNDING","PAYPAL","createOrder","purchase_units","currency_code","breakdown","item_total","tax_total","description","$item","quantity","unit_amount","onApprove","authorize","authorization","gateway","coupon_id","paypal_payment","subtotal_amount","flatpickr","enableTime","startDate","endDate","minDate","maxDate","onChange","selectedDates","dateStr","instance","alert","Turbolinks","visit","initializeFlatpickr","temporaryImageReorderTimeout","loadFile","processImageFile","fieldName","getPresignParams","createProductImage","processFeaturedImage","updateProductFeaturedImage","processDownloadFile","createProductDownload","processVersionDownloadFile","createProductVersionDownload","processAvatarImage","updateUserAvatarImage","processMessageFile","assignMessageFiles","processPostImage","updatePostImage","processBannerImage","updateShopBannerImage","callbackMethod","presignResponse","awsResponse","presignFileData","sendFileToS3","formatCachedUpload","storage","mime_type","ajaxUpdateForm","formSelector","requestMethod","successCallback","$form","_method","authenticity_token","uploadedFileData","images_attributes","downloads_attributes","user","avatar","shop","settings_attributes","banner","reorderProductImages","filesArray","formattedData","updateProductImageOrdinals","removeFeaturedImage","remove_image","removeImage","destroy_product_images","removeAvatarImage","remove_avatar","removePostImage","removeBannerImage","remove_banner","FilePondPluginImagePreview","FilePondPluginFileMetadata","FilePondPluginFileValidateType","FilePondPluginFileValidateSize","$multiImageInputs","$addToTop","imageInsertLocation","$input","$rep","placeholderText","initializeSelect2","selectElement","$selectElement","term","processResults","minimumInputLength","placeholder","$selects","$sel","$multiSelects","cleanupLastLoad","multiple","$userSelect","$selectSpinner","$variantFormsContainer","productId","initializeVariantFileSelect","fileSelect","$fileSelect","Option","$variantNestedFields","$variantFileSelect","$insertedItem","preventInvalidSlugInput","preventPasteSlugInput","lowercaseSlugValue","checkSlug","slugTimer","clearSlugFeedback","$target","slugSuccess","$slugInputs","checkApiToUse","$couponCodeInput","summernoteImageUpload","$summernote","insertDefaultWidthImage","cdnImageUrl","sendSummernoteFileToS3","$img","basicEditors","$basicNote","toolbar","onImageUpload","onImageLinkInsert","onBlurCodeview","codeviewHtml","prettifyHtml","codemirror","htmlMode","lineWrapping","lineNumbers","codeviewFilter","codeviewIframeFilter","expandedEditors","$expandedNote","nativeVideoNodeBuilderFunc","createVideoNode","$embed","$iframeWrapper","slimEditors","$slimNote","simpleEditors","strip_html_tags","updateCounterInput","$textarea","$counter","$noteTextarea","minLength","noteTextLength","strippedInputCountedContainerLength","currentLength","$counterContainer","$createBtn","$loginForm","$loginLink","$signUpForm","$supportModal","$modal","videoSrc","$productContent","$noneResponsiveIframes","$wrapper","$span","$priceCart","$addToCartForm","$variantContainer","$variantPrices","queryStr","varId","variantId","baseAction","removeSortParams","removeOrderParams","supportedFilters","sort_val","sort_type","savedGridRowAmount","localStorage","getItem","$gridImgButton","$productWrapper","$gridAmount","setItem","isTrackedPage","isTrackingSetUp","dataLayer","gtmId","gaId","logAnalytics","eventData","updatedProductViewInfo","gtmData","user_id","currentUser","gtm","pageTitle","pagePath","elementTarget","productSlug","productViewInfo","gtag","send_to","updateProductData","productData","image_data","getEcommerceStep","clickedElement","pageViewInfo","copyText","$btn","textToCopyId","$textToCopyElement","textToCopy","clipboard","writeText","reportValidity","$selected","$paypalEmailInput","$stripeConnect","$couponForm","toggleCouponType","$productSelects","inputNumber","$productsToggle","$productsTarget","updateProductsTarget","$affiliateToogle","$affiliateTarget","$affiliateCardHeader","updateAffiliateTarget","$nestedAffiliateCoupon","$destroyAffiliateCoupon","$adminOrderForm","calcSubTotal","$orderSubTotal","$nestedItems","$totalPrice","$price","calcOrderTotal","subTotal","taxAmount","$taxAmount","$orderTotal","fieldsInit","$variantSelect","$itemPrice","$itemName","$itemVendorId","$itemSaleId","getProductVariants","getProductDetails","getVariantPrice","$nameField","$priceField","$vendorIdField","$saleIdField","updateItemDetails","productObj","$orderItems","$payoutConfirm","$payoutBtn","$detailsToggle","$detailsForm","$detailsDisplay","postUrl","$status","updateReviewMessage","flagChecked","$reviewMessage","addHeaderToReviewMessage","escapedHeader","headerRegex","newText","removeHeaderFromReviewMessage","flagSelectorDataAttr","$flag","$isFlagged","isFlagged","$navFlag","$flagClassAry","findFlag","startsWith","findNavFlag","updateFlag","$reviewEditProductForm","errors","$refundForm","$checkboxes","$heroTrigger","$heroFields","$popularTrigger","$popularFields","$submit","$sendToAllCustomers","$hintText","$productNestedFields","$productSelect","originalEmailSendText","$sendInput","setupVariantSelectDropdown","variants","variant","hideEmailProductNestedFields","showEmailProductNestedFields","disableUnselectedCheckboxes","checkboxList","enableCheckboxes","$categories","mainCategoryCount","$subcategories","subcategoryCount","calculateCollaboratorAmounts","totalPriceRounded","$wrap","max_rate","dev_fund","max_rate_dollars","dev_fund_dollars","rate","total_rate","total_dollars","commissionTotal","commission_value","totalPrice","setPrice","$devFundSlider","$percentText","$amountText","$dataBoxText","toggle_conditional_field","$parent","minuteIncrement","action_id","loadingMessages","trusted","newVal","review_text","isConfirm","updatePositions","$object","onSort","$collapsible","$collapseToggler","$id","setUpCollapsibleForm","maskMoney","allowZero","$removedItem","createAppendObserver","mutationsList","_createForOfIteratorHelper","$addedElement","addedNodes","$sortableHandle","createSortable","sortableContainer","draggableElementClassName","sortableHandleClassName","groupName","onEnd","$draggedItem","newFolderID","destroySortable","$downloadsMainContainer","newFolderObserver","newDownloadObserver","disableSorting","$saveSortedFilesBtn","$sortFilesBtn","observerConfig","sortableFolderClassName","sortableDownloadClassName","sortingActive","$sortableFoldersContainer","$sortableDownloadsContainers","sortableFolders","noFolderSortableDownloads","$folders","$noFolderDownloads","download_folders_attributes","$downloads","folderAttributes","downloadAttributes","download_folder_id","$checkBoxWrapper","$checkBox","$info","$resend_form","hideDropdownTimeout","$mainMenuDropdownBtn","$mainMenuToggle","$offCanvasElement","removeMainMenuHoverEvents","updatePageResponsiveness","getOffCanvasBackdrop","dropdown","$offCanvasBackdrop","sale_campaign_params","fullURL","$userDropdownToggle","$userDropdownMenu","$creatorDropdownToggle","$creatorDropdownMenu","$readAllSwitch","sortAboutVal","$versionSelects","minimumResultsForSearch","version_id","$downLoadsList","consent","policy_id","accepted","DOM","parseTemplate","dropdownWrapper","enforceWhitelist","whitelist","inputText","templates","dropdownItemNoMatch","isLoading","dropdownHide__bindEventsTimeout","suggestedListItems","filterListItems","editing","autocomplete","suggest","autoComplete","highlightFirst","highlightOption","binding","anchorOffset","anchorNode","ddItemData","ddItemElm","flaggedTags","baseOffset","dropdownInital","appendTarget","createListHTML","refilter","getCaretGlobalPosition","onKeyDown","onMouseLeave","dropdownItemActive","ArrowLeft","rightKey","selectOption","backspace","removeTags","editTag","dropdownItem","suggestionClick","tagify","suggestionElm","getNodeIndex","clearOnSelect","closeOnSelect","addTags","elm","onEditTagDone","__isValid","toggleFocusClass","selectAll","searchKeys","isTagDuplicate","caseSensitive","fuzzySearch","accentedSearch","mapValueTo","delimiters","tagTextProp","maxTags","addTagOnBlur","blacklist","keepInvalidTags","mixTagsAllowedAfter","mixTagsInterpolator","skipInvalid","editTags","clicks","keepInvalid","transformTag","mixMode","insertAfterTag","selectMode","tagNoAnimation","tagInvalid","tagNotAllowed","inputInvalid","tagX","tagText","scopeLoading","tagLoading","tagEditing","tagFlash","tagHide","hasMaxTags","hasNoTags","classname","beforeRemoveTag","customBinding","customEventsList","mainEvents","isIE","isJQueryPlugin","originalInput","removeAllTags","onFocusBlur","keydown","onKeydown","onClickScope","dblclick","onDoubleClickScope","paste","onPaste","addNew","postUpdate","triggerChangeEvent","setStateSelection","cloneEvent","getTagElms","placeCaretAfterNode","setRangeAtStartEnd","fixFirefoxLastTagNoCaret","tagData","readonly","inputSuggestion","onInput","onMixTagsInput","inputElm","validateTag","getRangeAt","inputType","createTagElem","insertNode","withoutChangeEvent","rangeCount","cloneRange","collapse","setStart","focusNode","endOffset","matchedPatternCount","onInputIE","injectAtCaret","onEditTagInput","__tagifyTagData","__originalHTML","originalIsValid","onEditTagFocus","onEditTagBlur","__originalData","getWhitelistItem","onEditTagkeydown","InstallTrigger","applySettings","build","getCSSVars","loadOriginalValues","autofocus","TEXTS","exceed","duplicate","notAllowed","wrapper","getAttributes","startContainer","createRange","setEnd","CSSVars","tagHideTransition","integrated","parseMixTags","insertAdjacentHTML","lastOriginalValueReported","loadedOriginalValues","simulated","_valueTracker","setValue","setStartBefore","setEndBefore","addRange","getLastTag","editable","skipValidation","editTagToggleValidity","previousData","replaceTag","reCheckInvalidTags","getInvalidTagAttrs","updateValueByDOMTags","deleteContents","validate","replaceTextWithNode","getTagIdx","getTagIndexByValue","getTagElmByValue","flashTag","isTagBlacklisted","isTagWhitelisted","setReadonly","contentEditable","normalizeTags","splitText","selectTag","appendTag","addEmptyTag","addMixTags","__preInvalidData","prefixedTextToTag","createNodeIterator","NodeFilter","SHOW_TEXT","nextNode","__removed","getMixedTagsAsString","originalInputValueFormat","removeTag","makeBuiltIn","CONFIGURABLE_FUNCTION_NAME","inspectSource","InternalStateModule","enforceInternalState","enforce","getInternalState","CONFIGURABLE_LENGTH","TEMPLATE","arity","isNullOrUndefined","NATIVE_WEAK_MAP","createNonEnumerableProperty","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","facade","STATE","getterFor","TYPE","EXISTS","isSymbol","getBuiltIn","isPrototypeOf","$Symbol","sham","V8_VERSION","IS_PURE","copyright","license","unsafe","nonConfigurable","nonWritable","toLength","defineBuiltIn","copyConstructorProperties","isForced","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","dontCallGetSet","forced","propertyIsEnumerableModule","toIndexedObject","$location","channel","port","arraySlice","validateArgumentsLength","IS_IOS","IS_NODE","setImmediate","clearImmediate","Dispatch","MessageChannel","counter","ONREADYSTATECHANGE","runner","eventListener","globalPostMessageDefer","port2","port1","importScripts","Reflect","passed","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","env","argv","versions","removeAllListeners","prependListener","prependOnceListener","cwd","chdir","umask","Timeout","clearFn","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","require","toast","$tagInputs","taglist","Tagify","$orderItemIdInputs","featherlightGallery","previousIcon","nextIcon","galleryFadeIn","openSpeed","switchButton","targetNode","subtree","defineBuiltInAccessor","regExpFlags","RegExpPrototype","INDICES_SUPPORT","calls","expected","addGetter","chr","pairs","dotAll","ignoreCase","multiline","sticky","hasIndices","getDescriptor","PROPER","functionToString","getMethod","ordinaryToPrimitive","wellKnownSymbol","TO_PRIMITIVE","pref","exoticToPrim","Deno","v8","aCallable","unicode","unicodeSets","ArrayBufferViewCore","lengthOfArrayLike","toOffset","RangeError","Int8Array","Int8ArrayPrototype","$set","aTypedArray","exportTypedArrayMethod","WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS","TO_OBJECT_BUG","NATIVE_ARRAY_BUFFER_VIEWS","arrayLike","NAME","Constructor","Prototype","NATIVE_ARRAY_BUFFER","classof","setPrototypeOf","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","TYPED_ARRAY_TAG_REQUIRED","TypedArrayConstructorsList","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","getTypedArrayConstructor","isTypedArray","aTypedArrayConstructor","KEY","TypedArrayConstructor","error2","exportTypedArrayStaticMethod","isView","DataView","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tryGet","callee","CORRECT_PROTOTYPE_GETTER","IE_PROTO","uncurryThisAccessor","aPossiblePrototype","CORRECT_SETTER","toIntegerOrInfinity","toPositiveInteger","$RangeError","BYTES","$propertyIsEnumerable","NASHORN_BUG","getOwnPropertyDescriptorModule","exceptions","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","internalObjectKeys","toAbsoluteIndex","createMethod","IS_INCLUDES","replacement","feature","detection","POLYFILL","NATIVE","setTask","schedulersFix","ENGINE_IS_BUN","USER_AGENT","WRAP","Bun","scheduler","hasTimeArg","firstParamIndex","boundArgs","Op","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","makeInvokeMethod","tryCatch","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","record","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","doneResult","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","awrap","skipTempReset","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","clearCache","setProgressBarDelay","copyObject","Node","ELEMENT_NODE","mozMatchesSelector","uuid","Location","absoluteURL","requestURL","getOrigin","getPath","getPathComponents","getLastPathComponent","getExtension","isHTML","isPrefixedBy","isEqualTo","toCacheKey","HttpRequest","requestCanceled","requestTimedOut","requestFailed","requestLoaded","requestProgressed","referrer","createXHR","NETWORK_FAILURE","TIMEOUT_FAILURE","notifyApplicationBeforeRequestStart","requestStarted","endRequest","requestCompletedWithResponse","failed","requestFailedWithStatusCode","notifyApplicationAfterRequestEnd","requestFinished","ProgressBar","trickle","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","defaultCSS","installStylesheetElement","installProgressElement","startTrickling","hiding","fadeProgressElement","uninstallProgressElement","stopTrickling","trickleInterval","BrowserAdapter","showProgressBar","progressBar","visitProposedToLocationWithAction","startVisitToLocationWithAction","visitStarted","issueRequest","changeHistory","loadCachedSnapshot","visitRequestStarted","hasCachedSnapshot","showProgressBarAfterDelay","visitRequestProgressed","visitRequestCompleted","loadResponse","visitRequestFailedWithStatusCode","reload","visitRequestFinished","hideProgressBar","visitCompleted","followRedirect","pageInvalidated","progressBarTimeout","progressBarDelay","History","onPageLoad","onPopState","started","shouldHandlePopState","turbolinks","restorationIdentifier","historyPoppedToLocationWithRestorationIdentifier","pageLoaded","pageIsLoaded","HeadDetails","tracked","fromHeadElement","hasElementWithKey","getTrackedElementSignature","getScriptElementsNotInDetails","getElementsMatchingTypeNotInDetails","getStylesheetElementsNotInDetails","getProvisionalElements","getMetaValue","findMetaElementByName","Snapshot","headDetails","bodyElement","fromHTMLString","fromHTMLElement","getRootLocation","getSetting","getCacheControlValue","getElementForAnchor","getPermanentElements","getPermanentElementById","getPermanentElementsPresentInSnapshot","findFirstAutofocusableElement","hasAnchor","isPreviewable","isCacheable","isVisitable","renderView","viewWillRender","newBody","viewRendered","invalidateView","viewInvalidated","createScriptElement","SnapshotRenderer","currentSnapshot","newSnapshot","isPreview","currentHeadDetails","newHeadDetails","currentBody","shouldRender","mergeHead","replaceBody","focusFirstAutofocusableElement","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","relocateCurrentBodyPermanentElements","activateNewBodyScriptElements","assignNewBody","replacePlaceholderElementsWithClonedPermanentElements","trackedElementsAreIdentical","getNewHeadStylesheetElements","getNewHeadScriptElements","getCurrentHeadProvisionalElements","getNewHeadProvisionalElements","getCurrentBodyPermanentElements","permanentElement","getNewBodyScriptElements","ErrorRenderer","newHead","replaceHeadAndBody","activateBodyScriptElements","getScriptElements","View","htmlElement","getSnapshot","snapshot","markAsPreview","renderSnapshot","renderError","ScrollManager","scrollToElement","scrollIntoView","scrollToPosition","scrollPositionChanged","SnapshotCache","snapshots","Visit","performScroll","timingMetrics","recordTimingMetric","cancelRender","visitFailed","historyChanged","shouldIssueRequest","getCachedSnapshot","getCachedSnapshotForLocation","cacheSnapshot","visitRendered","redirectedToLocation","followedRedirect","replaceHistoryWithLocationAndRestorationIdentifier","scrolled","scrollToRestoredPosition","scrollToAnchor","restorationData","scrollPosition","getTimingMetrics","snapshotCached","frame","clickBubbled","clickCaptured","scrollManager","startHistory","stopHistory","applicationAllowsVisitingLocation","locationIsVisitable","getRestorationDataForIdentifier","startVisit","pushHistoryWithLocationAndRestorationIdentifier","shouldCacheSnapshot","notifyApplicationBeforeCachingSnapshot","lastRenderedLocation","getCurrentRestorationData","notifyApplicationBeforeRender","currentVisit","notifyApplicationAfterRender","notifyApplicationAfterPageLoad","clickEventIsSignificant","getVisitableLinkForNode","getVisitableLocationForLink","applicationAllowsFollowingLinkToLocation","getActionForLink","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","notifyApplicationAfterVisitingLocation","timing","createVisit","nodeIsVisitable","currentScript","rails","$document","linkClickSelector","buttonClickSelector","inputChangeSelector","formSubmitSelector","formInputClickSelector","disableSelector","enableSelector","requiredInputSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","csrfToken","csrfParam","CSRFProtection","refreshCSRFTokens","isRemote","handleRemote","isCrossDomain","handleMethod","metadataInput","formElements","disableFormElements","disableFormElement","enableFormElements","enableFormElement","allowAction","answer","blankInputs","specifiedSelector","nonBlank","radiosForNameWithNoneSelected","radioName","foundInputs","requiredInputs","checkedRadioButtonNames","nonBlankInputs","stopEverything","disableElement","enableElement","metaClick","blankRequiredInputs","nonBlankFileInputs","remote","delete","attachShadow","ShadowRoot","jQueryInterface","_window$getComputedSt","Set","uidEvent","callable","delegationSelector","_L2","oneOff","Boolean","_L4","setDataAttribute","removeDataAttribute","getDataAttributes","getDataAttribute","Default","DefaultType","_getConfig","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","super","DATA_KEY","dispose","EVENT_KEY","_queueCallback","getInstance","VERSION","findOne","focusableChildren","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","getOrCreateInstance","_destroyElement","et","endCallback","leftCallback","rightCallback","nt","st","_deltaX","_supportPointerEvents","_initEvents","_eventIsPointerPenTouch","_end","_handleSwipe","_move","ot","rt","at","ht","dt","ut","ft","mt","_t","bt","vt","yt","wt","At","Et","Tt","ArrowRight","Ct","ride","Ot","xt","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","nextWhenVisible","_clearInterval","_updateInterval","_maybeEnableCycle","_getItems","_getItemIndex","_getActive","defaultInterval","_keydown","_addTouchEventListeners","_directionToOrder","_setActiveIndicatorElement","_orderToDirection","_isAnimated","kt","Lt","St","Dt","$t","It","Nt","Pt","jt","Mt","Ft","Ht","Wt","Bt","_isTransitioning","_triggerArray","_initializeChildren","_addAriaAndCollapsedClass","_isShown","_getFirstLevelChildren","_getDimension","zt","Rt","qt","Vt","Kt","Qt","Xt","Yt","Ut","Gt","Jt","Zt","te","ee","ie","ne","se","oe","re","ae","le","ce","he","de","ue","fe","pe","ge","phase","popper","strategy","arrow","reference","requires","be","ve","ye","we","Ae","userAgentData","brands","brand","Ee","Te","visualViewport","Ce","Oe","isSameNode","xe","ke","Le","Se","De","$e","willChange","Ie","Ne","Pe","je","Me","modifiersData","popperOffsets","placement","centerOffset","requiresIfExists","Fe","He","We","popperRect","variation","gpuAcceleration","adaptive","roundOffsets","isFixed","Be","ze","Re","scrollParents","qe","Ve","Ke","Qe","Xe","Ye","Ue","Ge","Je","Ze","ti","ei","rootBoundary","elementContext","altBoundary","contextElement","ni","flipVariations","allowedAutoPlacements","si","_skip","mainAxis","altAxis","fallbackPlacements","oi","ri","ai","preventOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","li","tether","tetherOffset","di","ui","fi","modifiers","pi","mi","defaultModifiers","orderedModifiers","forceUpdate","onFirstUpdate","gi","bi","vi","afterMain","afterRead","afterWrite","basePlacements","beforeMain","beforeRead","beforeWrite","clippingParents","computeStyles","createPopper","createPopperBase","createPopperLite","detectOverflow","eventListeners","modifierPhases","placements","popperGenerator","variationPlacements","viewport","yi","wi","Ai","Ei","Ti","Ci","Oi","xi","ki","Li","Si","Di","$i","Ii","Ni","Pi","ji","Mi","Fi","Hi","Wi","Bi","zi","autoClose","popperConfig","Ri","qi","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","_completeHide","_getPopperConfig","_getPlacement","_getOffset","_selectMenuItem","clickEvent","dataApiKeydownHandler","clearMenus","Vi","Ki","Qi","Xi","clickCallback","isAnimated","isVisible","rootElement","Yi","Ui","_isAppended","_append","_getElement","_emulateAnimation","Gi","Ji","Zi","tn","en","trapElement","nn","sn","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","rn","an","ln","cn","_disableOverFlow","_setElementAttributes","_resetElementAttributes","isOverflowing","_saveInitialAttribute","_applyManipulationCallback","removeProperty","hn","dn","un","pn","mn","gn","bn","vn","yn","wn","An","En","Tn","backdrop","Cn","On","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","handleUpdate","_triggerBackdropTransition","_resetAdjustments","xn","kn","Ln","Sn","Dn","$n","In","Nn","Pn","jn","Mn","Fn","Hn","Wn","Bn","zn","Rn","qn","Vn","br","dl","em","h1","h2","h3","h4","h5","h6","ol","small","sup","strong","ul","Kn","Qn","Xn","Yn","allowList","extraClass","sanitize","sanitizeFn","template","Un","Gn","Jn","getContent","_resolvePossibleFunction","changeContent","_checkContent","toHtml","_maybeSanitize","_setContent","_putElementInTemplate","Zn","es","rs","AUTO","TOP","RIGHT","BOTTOM","LEFT","customClass","ls","cs","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","toggleEnabled","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","_setTimeout","_ref16","hs","us","_getContent","fs","ps","gs","bs","vs","ys","rootMargin","As","Es","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","_getNewObserver","IntersectionObserver","_observerCallback","_process","isIntersecting","_clearActiveClass","_activateParents","Ts","Cs","Os","xs","ks","Ls","Ss","Ds","$s","Is","Ns","Ps","js","Ms","Fs","Hs","Ws","Bs","zs","Rs","qs","Vs","Ks","_setInitialAttributes","_getChildren","_elemIsActive","_getActiveElem","_deactivate","_activate","_toggleDropDown","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","_getOuterElement","_setInitialAttributesOnTargetPanel","Qs","Xs","Ys","Us","Gs","Js","Zs","eo","io","no","so","oo","autohide","ro","ao","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","Alert","Button","Carousel","Collapse","Dropdown","Modal","Offcanvas","Popover","ScrollSpy","Tab","Toast","onlabel","onstyle","offlabel","offstyle","switch","switchBtn","bold","underline","strikethrough","subscript","superscript","sizeunit","resizeFull","resizeHalf","resizeQuarter","resizeNone","floatLeft","floatRight","floatNone","shapeRounded","shapeCircle","shapeThumbnail","shapeNone","dragImageHere","dropImage","selectFromFiles","maximumFileSize","maximumFileSizeError","video","videoLink","providers","unlink","edit","textToDisplay","openInNewWindow","useProtocol","addRowAbove","addRowBelow","addColLeft","addColRight","delRow","delCol","delTable","blockquote","lists","unordered","ordered","help","fullscreen","codeview","paragraph","outdent","indent","recent","more","foreground","transparent","setTransparent","resetToDefault","cpSelect","shortcut","shortcuts","textFormatting","paragraphFormatting","documentStyle","extraKeys","insertParagraph","undo","redo","tab","untab","removeFormat","justifyLeft","justifyCenter","justifyRight","justifyFull","insertUnorderedList","insertOrderedList","formatPara","formatH1","formatH2","formatH3","formatH4","formatH5","formatH6","insertHorizontalRule","specialChar","noSelection","MaxTouchPoints","isMac","appVersion","isMSIE","isEdge","isFF","isPhantom","isWebkit","browserVersion","isSupportTouch","isFontInstalled","isW3CRangeSupport","inputEventName","genericFontFamilies","validFontName","eq2","peq2","ok","and","resetUniqueId","uniqueId","rect2bnd","invertObject","namespaceToCamel","isValidUrl","tail","clusterBy","compact","isSkipPaddingBlankHTML","isNotSplitEdgePoint","isDiscardEmptySplits","removeNode","NBSP_CHAR","ZERO_WIDTH_NBSP_CHAR","blank","emptyPara","makePredByNodeName","isEditable","isControlSizing","isText","isVoid","isPara","isPurePara","isHeading","isInline","isBlock","isBodyInline","isBody","isParaInline","isPre","isList","isTable","isData","isCell","isBlockquote","isBodyContainer","isAnchor","isDiv","isLi","isBR","isSpan","isB","isU","isS","isI","isTextarea","deepestChildIsEmpty","isEmptyAnchor","isClosestSibling","withClosestSiblings","nodeLength","isLeftEdgePoint","isRightEdgePoint","isEdgePoint","isLeftEdgeOf","isRightEdgeOf","isLeftEdgePointOf","isRightEdgePointOf","prevPoint","nextPoint","nextPointWithEmptyNode","isSamePoint","isVisiblePoint","prevPointUntil","nextPointUntil","isCharPoint","isSpacePoint","walkPoint","ancestor","singleChildAncestor","listAncestor","lastAncestor","listNext","listPrev","listDescendant","commonAncestor","appendChildNodes","hasChildren","makeOffsetPath","fromOffsetPath","splitTree","splitPoint","rightNode","createText","removeWhile","posFromPlaceholder","isCustomStyleTag","$note","memos","layoutInfo","ui_template","createLayout","_initialize","removeLayout","editor","memo","initializeModule","removeModule","removeMemo","triggerEvent","codable","shouldInitialize","createInvokeHandler","createTextRange","moveToElementText","compareEndPoints","setEndPoint","cont","collapseToStart","moveStart","langInfo","icons","sc","ec","isOnEditable","makeIsOn","isOnList","isOnAnchor","isOnCell","isOnData","nativeRange","getEndPoint","isCollapsed","getStartPoint","includeAncestor","fullyContains","getPoints","wrapBodyInlineWithPara","createFromSelection","createFromBodyElement","createFromNode","endContainer","isTextNode","createFromNodeBefore","createFromNodeAfter","createFromBookmark","createFromParaBookmark","BACKSPACE","TAB","ESCAPE","DELETE","UP","DOWN","NUM0","NUM1","NUM2","NUM3","NUM4","NUM5","NUM6","NUM7","NUM8","SLASH","LEFTBRACKET","BACKSLASH","RIGHTBRACKET","HOME","END","PAGEUP","PAGEDOWN","isEdit","isMove","isNavigation","nameFromCode","stackOffset","$editable","bookmark","recordUndo","applySnapshot","makeSnapshot","historyLimit","jQueryCSS","expandClosestSibling","onlyPartialContains","fromNode","queryCommandState","queryCommandValue","ancestors","toggleList","findList","wrapList","appendToPrevious","releaseList","paraBookmark","findNextSiblings","blockquoteBreakingLevel","colPos","rowPos","baseRow","baseCell","isRowSpan","isColSpan","virtualTable","rowIndex","cellIndex","colSpan","rowSpan","Column","resultAction","SubtractSpanCount","Row","AddCell","RemoveCell","SumSpanCount","Ignore","getActionList","requestAction","Add","Delete","cells","recoverAttributes","specified","tableClassName","note","$editor","lastRange","typing","beforeCommand","execCommand","afterCommand","wrapCommand","fontStyling","fontSizeUnit","formatBlock","isLimited","getLastRange","setLastRange","insertText","pasteHTML","onApplyCustomStyle","onFormatBlock","stylePara","createLink","isNewWindow","checkProtocol","onCreateLink","defaultProtocol","styleNodes","createRangeFromList","foreColor","backColor","insertTable","createTable","removeMedia","restoreTarget","floatMe","hasKeyShortCut","handleKeyMap","preventDefaultEditableShortCuts","recordEveryKeystroke","spellCheck","disableGrammar","airMode","overrideContextMenu","keyMap","tabDisable","maxTextLength","commit","styleWithCSS","normalizeContent","tabSize","insertTab","maximumImageFileSize","FileReader","readAsDataURL","insertImage","insertImagesAsDataURL","addRow","addCol","deleteRow","deleteCol","deleteTable","pasteByEvent","$eventListener","documentEventHandlers","$dropzone","disableDragAndDrop","onDrop","attachDragAndDropEvent","onDragenter","onDragleave","$codable","CodeMirrorConstructor","CodeMirror","isActivated","getDoc","codeviewFilterRegex","codeviewIframeWhitelistSrc","codeviewIframeWhitelistSrcBase","fromTextArea","tern","TernServer","ternServer","updateArgHints","getValue","toTextArea","purify","$statusbar","statusbar","disableResizeEditor","minheight","$toolbar","$window","$scrollbar","scrollbarClassName","resizeTo","setsize","isFullscreen","$editingArea","editingArea","$handle","disableResizeImage","handleKeyup","handleKeydown","lastWordRange","showDomainOnlyForAutolink","linkTargetBlank","getWordRange","PERIOD","COMMA","SEMICOLON","previousKeydownCode","lastWord","inheritPlaceholder","$placeholder","invertedKeyMap","addToolbarButtons","addImagePopoverButtons","addLinkPopoverButtons","addTablePopoverButtons","fontInstalledMap","fontNamesIgnoreCheck","buttonGroup","colorButton","dropdownButtonContents","palette","colorsName","magic","styleTags","representShortcut","createInvokeHandlerAndUpdateState","eraser","addDefaultFonts","isFontDeservedToAdd","fontNames","dropdownCheck","checkClassName","menuCheck","fontSizes","fontSizeUnits","colorPalette","unorderedlist","orderedlist","alignLeft","alignCenter","alignRight","alignJustify","textHeight","lineHeights","insertTableMaxSize","mouseup","tableMoveHandler","picture","minus","arrowsAlt","question","rollback","trash","rowAbove","rowBelow","colBefore","colAfter","rowRemove","colRemove","updateBtnStates","toggleBtnActive","isFollowing","followScroll","toolbarContainer","changeContainer","followingToolbar","otherStaticBar","toggleBtn","dialogsInBody","disableLinkTarget","$dialog","dialog","fade","dialogsFade","hideDialog","onDialogShown","toggleLinkBtn","bindEnterKey","onDialogHidden","showDialog","showLinkDialog","$popover","popover","acceptImageFileTypes","showImageDialog","popatmouse","showVideoDialog","createShortcutList","showHelpDialog","hidable","onContextmenu","air","hintDirection","hints","matchingWord","hideArrow","$content","selectItem","nodeFromItem","hintSelect","moveUp","moveDown","searchKeyword","createItemTemplates","hintMode","getWordsRange","getWordsMatchRange","createGroup","dropzone","hintPopover","autoLink","autoSync","autoReplace","linkDialog","linkPopover","imageDialog","imagePopover","tablePopover","videoDialog","helpDialog","airPopover","toolbarPosition","codeviewKeepButton","tabDisabled","textareaAutoSync","onBeforeCommand","onBlur","onChangeCodeview","onEnter","onFocus","onImageUploadError","onInit","onKeyup","onMousedown","onMouseup","pc","ESC","mac","caret","pencil","$node","$tooltip","$button","setEvent","$backdrop","itemClick","mousemove","currentClick","imageLimitation","airEditor","airEditable","dropdownButton","dropdownCheckButton","paragraphDropdownButton","tableDropdownButton","colorDropdownButton","getPopoverContent","getDialogBody","interface","cocoon_element_counter","create_new_id","newcontent_braced","newcontent_underscord","cocoon","assoc","assocs","insertionMethod","insertionNode","insertionTraversal","regexp_braced","regexp_underscord","new_id","new_content","new_contents","insertionNodeElem","getInsertionNodeElem","contentNode","before_insert","wrapper_class","node_to_delete","trigger_node","before_remove","__assign","__spreadArrays","il","jl","HOOKS","_disable","_enable","allowInput","allowInvalidPreload","altFormat","altInput","altInputClass","ariaDateFormat","autoFillDefaultTime","clickOpens","conjunction","defaultHour","defaultMinute","defaultSeconds","disableMobile","enableSeconds","errorHandler","getWeek","givenDate","setHours","setDate","week1","hourIncrement","ignoredFocusElements","inline","monthSelectorType","nextArrow","noCalendar","onClose","onDayCreate","onDestroy","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition","positionElement","prevArrow","shorthandCurrentMonth","showMonths","time_24hr","weekNumbers","english","longhand","rangeSeparator","weekAbbreviation","scrollTitle","toggleTitle","amPM","yearAriaLabel","monthAriaLabel","hourAriaLabel","minuteAriaLabel","immediate","arrayify","clearNode","findParent","createNumberInput","inputClassName","numInput","arrowUp","arrowDown","getEventTarget","doNothing","monthToStr","monthNumber","revFormat","dateObj","shortMonth","setSeconds","unixSeconds","weekNum","weekNumber","ISODate","setMinutes","unixMillSeconds","tokenRegex","createDateFormatter","_b","_c","l10n","isMobile","frmt","overrideLocale","formatDate","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","datestr","parseDate","ops","matchIndex","regexStr","token_1","isBackSlash","escaped","compareDates","date1","date2","ts1","ts2","DAY","_loop_1","args_1","DEBOUNCED_CHANGE_MS","FlatpickrInstance","instanceConfig","setupHelperFunctions","yr","currentMonth","currentYear","isOpen","parseConfig","setupLocale","setupInputs","setupDates","setHoursFromDate","latestSelectedDateObj","updateValue","setCalendarWidth","positionCalendar","bindToInstance","calendarContainer","daysContainer","daysWidth","weekWrapper","updateTime","defaultDate","getDefaultHours","timeWrapper","prevValue","_input","setHoursFromInputs","_debouncedChange","ampm2military","military2ampm","hourElement","minuteElement","secondElement","limitMinHours","minDateHasTime","maxDateHasTime","minHr","minMinutes","maxHr","maxMinutes","onYearInput","eventTarget","changeYear","ev","_handlers","triggerChange","setupMobile","debouncedResize","documentClick","monthNav","onMonthNavClick","selectDate","timeContainer","selText","timeIncrement","jumpToDate","jumpDate","jumpTo","oldYear","oldMonth","buildMonthSwitch","incrementNumInput","inputElem","buildMonthNav","buildWeeks","rContainer","buildWeekdays","buildDays","buildTime","customAppend","createDay","dayNumber","dateIsEnabled","dayElement","todayDateElem","isDateSelected","selectedDateElem","isDateInRange","focusOnDayElem","getFirstAvailableDay","startMonth","endMonth","endIndex","getNextAvailableDay","givenMonth","loopDelta","numMonthDays","changeMonth","focusOnDay","dayFocused","isInView","startElem","buildMonthDays","firstOfMonth","prevMonthDays","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayIndex","dayNum","dayContainer","shouldBuildMonth","monthsDropdownContainer","buildMonth","monthElement","monthNavFragment","selectedMonth","yearInput","yearElement","buildMonths","prevMonthNav","yearElements","monthElements","nextMonthNav","__hidePrevMonthArrow","__hideNextMonthArrow","currentYearElement","updateNavigationCurrentMonth","hourInput","minuteInput","secondInput","weekdayContainer","updateWeekdays","isOffset","_hidePrevMonthArrow","_hideNextMonthArrow","toInitial","mobileInput","_initialDate","isCalendarElem","eventTarget_1","isCalendarElement","isInput","lostFocus","isIgnored","newYear","newYearNum","isNewYear","dateToCheck","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","delta_1","pluginElements","hoverDate","initialDate","rangeStartDate","rangeEndDate","containsDisabled","maxRange","dayElem","outOfRange","_positionElement","wasOpen","minMaxDateSetter","inverseDateObj","boolOpts","userConfig","parseDateRules","timeMode","defaultDateFormat","defaultAltFormat","_minDate","_maxDate","minMaxTimeSetter","_minTime","_maxTime","pluginConf","getInputElem","l10ns","customPositionElement","calendarHeight","acc","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","showOnTop","isCenter","isRight","rightMost","centerMost","getDocumentStyleSheet","bodyWidth","centerLeft","centerBefore","centerAfter","centerIndex","cssRules","centerStyle","insertRule","editableSheet","styleSheets","sheet","createStyleSheet","isSelectable","selectedDate","shouldChangeMonth","loadedPlugins","_bind","_setHoursFromDate","_positionCalendar","_createElement","CALLBACKS","setSelectedDate","inputDate","rule","preloadedDate","mobileFormatStr","getDateStr","dObj","isPrevMonth","isNextMonth","isKeyDown","isHourElem","isMinuteElem","_flatpickr","nodeList","HTMLCollection","NodeList","localize","setDefaults","fp_incr","S2","amd","requirejs","undef","makeMap","waiting","defining","aps","jsSuffixRegExp","hasProp","baseName","nameParts","nameSegment","mapValue","foundMap","foundI","foundStarMap","starI","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeNormalize","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","relResourceName","pr","uri","deps","cjsModule","usingExports","callbackType","_defined","Utils","getMethods","theClass","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","ctr","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","generateChars","chars","_convertData","originalKey","dataLevel","hasScroll","escapeMarkup","replaceMap","__cache","GetUniqueElementId","select2Id","StoreData","GetData","RemoveData","copyNonInternalCssClasses","destinationClasses","clazz","sourceClasses","Results","$element","dataAdapter","$results","displayMessage","$message","hideMessages","$options","$option","$dropdown","highlightFirstItem","ensureHighlightVisible","setClasses","selectedIds","loadingMore","$loading","_resultId","role","$children","$child","$childrenContainer","$highlighted","getHighlightedResults","$next","currentOffset","nextTop","nextOffset","nextBottom","mousewheel","isAtTop","isAtBottom","offsetDelta","SHIFT","CTRL","ALT","PAGE_UP","PAGE_DOWN","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","SingleSelection","$rendered","selectionContainer","formatted","MultipleSelection","$selections","selectionIdPrefix","selectionId","removeItem","$remove","Placeholder","decorated","normalizePlaceholder","createPlaceholder","placeholderTitle","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","prevented","removeAll","Search","searchLabel","$search","$searchContainer","_transferTabIndex","resizeSearch","_keyUpPrevented","$previousChoice","searchRemoveChoice","msie","disableInputEvents","handleSearch","searchHadFocus","SelectionCSS","selectionCssClass","EventRelay","relayEvents","preventableEvents","Translation","dict","_cache","loadPath","translations","BaseAdapter","generateResultId","SelectAdapter","selectedElement","currentData","unselect","addOptions","normalizedData","_normalizeItem","ArrayAdapter","_dataToConvert","convertToOptions","$existing","existingIds","onlyItem","$existingOption","existingData","newData","$newOption","AjaxAdapter","ajaxOptions","_applyDefaults","$request","_request","_queryTimeout","Tags","tags","createTag","insertTag","checkChildren","_removeOldTags","page","Tokenizer","tokenizer","createAndSelect","tokenData","separators","termChar","MinimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","isCurrentlyAbove","isCurrentlyBelow","enoughRoomAbove","enoughRoomBelow","$offsetParent","isConnected","countResults","MinimumResultsForSearch","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","DropdownCSS","dropdownCssClass","TagsSearchHighlight","$firstOption","firstElement","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","Defaults","tokenSeparators","resultsAdapter","selectOnClose","dropdownAdapter","SearchableDropdown","selectionAdapter","allowClear","_resolveLanguage","uniqueLanguages","_processTranslations","debug","stripDiacritics","amdLanguageBase","dropdownAutoWidth","scrollAfterSelect","templateResult","templateSelection","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","resolvedLanguages","baseLanguage","languageData","convertedData","Options","fromElement","excludedData","upperCaseLetter","dataName","dataValue","Select2","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","nonRelayEvents","toggleDropdown","_isChangeMutation","removedNodes","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","thisMethods","instanceOptions","CLASS_NAMES","MODAL","OVERLAY","SHOW_MODAL","MODAL_TITLE","MODAL_TEXT","ICON","ICON_CUSTOM","CONTENT","FOOTER","BUTTON_CONTAINER","BUTTON","CONFIRM_BUTTON","CANCEL_BUTTON","DANGER_BUTTON","BUTTON_LOADING","BUTTON_LOADER","getNode","stringToNode","throwErr","ordinalSuffixOf","overlayMarkup","iconMarkup","titleMarkup","textMarkup","footerMarkup","CONFIRM_KEY","CANCEL_KEY","defaultButtonList","getButtonListOpts","injectElIntoModal","initModalContent","initTitle","initText","dangerMode","modalMarkup","resetState","setActionValue","setActionOptionsFor","openModal","onAction","stopLoading","eval","sweetAlert","insertAt","locals","btoa","sourceRoot","refs","media","sourceMap","insertInto","singleton","styleSheet","convertToAbsoluteUrls","DEBUG","CharacterData","DocumentType","_state","_handled","_value","_deferreds","_immediateFn","_unhandledRejectionFn","race","_setImmediateFn","_setUnhandledRejectionFn","polyfill","getOpts","errorIconMarkup","warningIconMarkup","successIconMarkup","contentMarkup","buttonMarkup","warning","closeOnEsc","closeOnClickOutside","getContentOpts","DEPRECATED_OPTS","logDeprecation","onlyRename","subOption","imageUrl","showCancelButton","showConfirmButton","confirmButtonText","confirmButtonColor","cancelButtonText","closeOnConfirm","closeOnCancel","showLoaderOnConfirm","inputValue","inputPlaceholder","allowEscapeKey","allowClickOutside","registerImmediate","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","task","detectSwipe","isMoving","swipe","chainCallbacks","_callbackChain","$instance","allow","allowfullscreen","frameborder","longdesc","marginheight","marginwidth","mozallowfullscreen","referrerpolicy","sandbox","srcdoc","webkitallowfullscreen","keyup","opened","_globalHandlerInstalled","targetAttr","resetCss","openTrigger","closeTrigger","closeSpeed","closeOnClick","closeIcon","persist","otherClose","beforeOpen","beforeContent","beforeClose","afterOpen","afterContent","afterClose","onKeyUp","contentFilters","$currentTarget","autoBind","iframe","functionAttributes","readElementConfig","$source","_onReady","featherlight","_previouslyActive","_$previouslyTabbable","_$previouslyWithTabIndex","_previousWithTabIndices","swipeleft","Hammer","Manager","Swipe","_swiper","_swipeleft","_swiperight","navigateTo","currentNavigation","createNavigation","galleryFadeOut","BarRating","wrapElement","$elem","unwrapElement","findOption","findInitialOption","initialRating","saveDataOnElement","$opt","ratingValue","ratingText","originalRatingValue","originalRatingText","readOnly","ratingMade","removeDataOnElement","buildWidget","$w","$a","showValues","showSelectedRating","nextAllorPreviousAll","setSelectFieldValue","resetSelectField","defaultSelected","resetStyle","$widget","applyStyle","$all","$fractional","isDeselectable","attachClickHandler","$elements","onSelect","attachMouseEnterHandler","attachMouseLeaveHandler","fastClicks","disableClicks","attachHandlers","hoverState","detachHandlers","setupHandlers","onClear"],"mappings":"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,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,OAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,OAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU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","file":"js/application-09edd314386b920e21ac.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 269);\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nfunction classesToTokens(classes) {\n  if (classes === void 0) {\n    classes = '';\n  }\n  return classes.trim().split(' ').filter(c => !!c.trim());\n}\nfunction deleteProps(obj) {\n  const object = obj;\n  Object.keys(object).forEach(key => {\n    try {\n      object[key] = null;\n    } catch (e) {\n      // no getter for object\n    }\n    try {\n      delete object[key];\n    } catch (e) {\n      // something got wrong\n    }\n  });\n}\nfunction nextTick(callback, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  return setTimeout(callback, delay);\n}\nfunction now() {\n  return Date.now();\n}\nfunction getComputedStyle(el) {\n  const window = getWindow();\n  let style;\n  if (window.getComputedStyle) {\n    style = window.getComputedStyle(el, null);\n  }\n  if (!style && el.currentStyle) {\n    style = el.currentStyle;\n  }\n  if (!style) {\n    style = el.style;\n  }\n  return style;\n}\nfunction getTranslate(el, axis) {\n  if (axis === void 0) {\n    axis = 'x';\n  }\n  const window = getWindow();\n  let matrix;\n  let curTransform;\n  let transformMatrix;\n  const curStyle = getComputedStyle(el);\n  if (window.WebKitCSSMatrix) {\n    curTransform = curStyle.transform || curStyle.webkitTransform;\n    if (curTransform.split(',').length > 6) {\n      curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n    }\n    // Some old versions of Webkit choke when 'none' is passed; pass\n    // empty string instead in this case\n    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n  } else {\n    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n    matrix = transformMatrix.toString().split(',');\n  }\n  if (axis === 'x') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[4]);\n  }\n  if (axis === 'y') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[5]);\n  }\n  return curTransform || 0;\n}\nfunction isObject(o) {\n  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n  // eslint-disable-next-line\n  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n    return node instanceof HTMLElement;\n  }\n  return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n  const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n  const noExtend = ['__proto__', 'constructor', 'prototype'];\n  for (let i = 1; i < arguments.length; i += 1) {\n    const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n      const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n        const nextKey = keysArray[nextIndex];\n        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n        if (desc !== undefined && desc.enumerable) {\n          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            to[nextKey] = {};\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n    }\n  }\n  return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n  el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n  let swiper = _ref.swiper,\n    targetPosition = _ref.targetPosition,\n    side = _ref.side;\n  const window = getWindow();\n  const startPosition = -swiper.translate;\n  let startTime = null;\n  let time;\n  const duration = swiper.params.speed;\n  swiper.wrapperEl.style.scrollSnapType = 'none';\n  window.cancelAnimationFrame(swiper.cssModeFrameID);\n  const dir = targetPosition > startPosition ? 'next' : 'prev';\n  const isOutOfBound = (current, target) => {\n    return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n  };\n  const animate = () => {\n    time = new Date().getTime();\n    if (startTime === null) {\n      startTime = time;\n    }\n    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      currentPosition = targetPosition;\n    }\n    swiper.wrapperEl.scrollTo({\n      [side]: currentPosition\n    });\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      swiper.wrapperEl.style.overflow = 'hidden';\n      swiper.wrapperEl.style.scrollSnapType = '';\n      setTimeout(() => {\n        swiper.wrapperEl.style.overflow = '';\n        swiper.wrapperEl.scrollTo({\n          [side]: currentPosition\n        });\n      });\n      window.cancelAnimationFrame(swiper.cssModeFrameID);\n      return;\n    }\n    swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n  };\n  animate();\n}\nfunction getSlideTransformEl(slideEl) {\n  return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n  if (selector === void 0) {\n    selector = '';\n  }\n  return [...element.children].filter(el => el.matches(selector));\n}\nfunction showWarning(text) {\n  try {\n    console.warn(text);\n    return;\n  } catch (err) {\n    // err\n  }\n}\nfunction createElement(tag, classes) {\n  if (classes === void 0) {\n    classes = [];\n  }\n  const el = document.createElement(tag);\n  el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n  return el;\n}\nfunction elementOffset(el) {\n  const window = getWindow();\n  const document = getDocument();\n  const box = el.getBoundingClientRect();\n  const body = document.body;\n  const clientTop = el.clientTop || body.clientTop || 0;\n  const clientLeft = el.clientLeft || body.clientLeft || 0;\n  const scrollTop = el === window ? window.scrollY : el.scrollTop;\n  const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n  return {\n    top: box.top + scrollTop - clientTop,\n    left: box.left + scrollLeft - clientLeft\n  };\n}\nfunction elementPrevAll(el, selector) {\n  const prevEls = [];\n  while (el.previousElementSibling) {\n    const prev = el.previousElementSibling; // eslint-disable-line\n    if (selector) {\n      if (prev.matches(selector)) prevEls.push(prev);\n    } else prevEls.push(prev);\n    el = prev;\n  }\n  return prevEls;\n}\nfunction elementNextAll(el, selector) {\n  const nextEls = [];\n  while (el.nextElementSibling) {\n    const next = el.nextElementSibling; // eslint-disable-line\n    if (selector) {\n      if (next.matches(selector)) nextEls.push(next);\n    } else nextEls.push(next);\n    el = next;\n  }\n  return nextEls;\n}\nfunction elementStyle(el, prop) {\n  const window = getWindow();\n  return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n  let child = el;\n  let i;\n  if (child) {\n    i = 0;\n    // eslint-disable-next-line\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n    return i;\n  }\n  return undefined;\n}\nfunction elementParents(el, selector) {\n  const parents = []; // eslint-disable-line\n  let parent = el.parentElement; // eslint-disable-line\n  while (parent) {\n    if (selector) {\n      if (parent.matches(selector)) parents.push(parent);\n    } else {\n      parents.push(parent);\n    }\n    parent = parent.parentElement;\n  }\n  return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n  function fireCallBack(e) {\n    if (e.target !== el) return;\n    callback.call(el, e);\n    el.removeEventListener('transitionend', fireCallBack);\n  }\n  if (callback) {\n    el.addEventListener('transitionend', fireCallBack);\n  }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n  const window = getWindow();\n  if (includeMargins) {\n    return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n  }\n  return el.offsetWidth;\n}\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, elementIndex as g, classesToTokens as h, getTranslate as i, elementTransitionEnd as j, isObject as k, getSlideTransformEl as l, elementStyle as m, nextTick as n, elementNextAll as o, elementPrevAll as p, animateCSSModeScroll as q, showWarning as r, setCSSProperty as s, extend as t, deleteProps as u };","//! moment.js\n//! version : 2.29.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.moment = factory();\n})(this, function () {\n  'use strict';\n\n  var hookCallback;\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  function isArray(input) {\n    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n  }\n  function isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return input != null && Object.prototype.toString.call(input) === '[object Object]';\n  }\n  function hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\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  function isUndefined(input) {\n    return input === void 0;\n  }\n  function isNumber(input) {\n    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n  }\n  function isDate(input) {\n    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n  }\n  function map(arr, fn) {\n    var res = [],\n      i;\n    for (i = 0; i < arr.length; ++i) {\n      res.push(fn(arr[i], i));\n    }\n    return res;\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    if (hasOwnProp(b, 'toString')) {\n      a.toString = b.toString;\n    }\n    if (hasOwnProp(b, 'valueOf')) {\n      a.valueOf = b.valueOf;\n    }\n    return a;\n  }\n  function createUTC(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\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  function getParsingFlags(m) {\n    if (m._pf == null) {\n      m._pf = defaultParsingFlags();\n    }\n    return m._pf;\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      for (i = 0; i < len; i++) {\n        if (i in t && fun.call(this, t[i], i, t)) {\n          return true;\n        }\n      }\n      return false;\n    };\n  }\n  function isValid(m) {\n    if (m._isValid == null) {\n      var flags = getParsingFlags(m),\n        parsedParts = some.call(flags.parsedDateParts, function (i) {\n          return i != null;\n        }),\n        isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\n      if (m._strict) {\n        isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;\n      }\n      if (Object.isFrozen == null || !Object.isFrozen(m)) {\n        m._isValid = isNowValid;\n      } else {\n        return isNowValid;\n      }\n    }\n    return m._isValid;\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    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  function copyConfig(to, from) {\n    var i, prop, val;\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    if (momentProperties.length > 0) {\n      for (i = 0; i < momentProperties.length; i++) {\n        prop = momentProperties[i];\n        val = from[prop];\n        if (!isUndefined(val)) {\n          to[prop] = val;\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  function isMoment(obj) {\n    return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\n  }\n  function warn(msg) {\n    if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n      console.warn('Deprecation warning: ' + msg);\n    }\n  }\n  function deprecate(msg, fn) {\n    var firstTime = true;\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        for (i = 0; i < arguments.length; 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(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + new Error().stack);\n        firstTime = false;\n      }\n      return fn.apply(this, arguments);\n    }, fn);\n  }\n  var deprecations = {};\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  hooks.suppressDeprecationWarnings = false;\n  hooks.deprecationHandler = null;\n  function isFunction(input) {\n    return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\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((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\\d{1,2}/.source);\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 (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\n        // make sure changes to properties don't modify parent config\n        res[prop] = extend({}, res[prop]);\n      }\n    }\n    return res;\n  }\n  function Locale(config) {\n    if (config != null) {\n      this.set(config);\n    }\n  }\n  var keys;\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  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  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  function zeroFill(number, targetLength, forceSign) {\n    var absNumber = '' + Math.abs(number),\n      zerosToFill = targetLength - absNumber.length,\n      sign = number >= 0;\n    return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n  }\n  var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([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(func.apply(this, arguments), token);\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  function makeFormatFunction(format) {\n    var array = format.match(formattingTokens),\n      i,\n      length;\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    return function (mom) {\n      var output = '',\n        i;\n      for (i = 0; i < length; i++) {\n        output += isFunction(array[i]) ? array[i].call(mom, format) : 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    format = expandFormat(format, m.localeData());\n    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n    return formatFunctions[format](m);\n  }\n  function expandFormat(format, locale) {\n    var i = 5;\n    function replaceLongDateFormatTokens(input) {\n      return locale.longDateFormat(input) || input;\n    }\n    localFormattingTokens.lastIndex = 0;\n    while (i >= 0 && localFormattingTokens.test(format)) {\n      format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n      localFormattingTokens.lastIndex = 0;\n      i -= 1;\n    }\n    return format;\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  function longDateFormat(key) {\n    var format = this._longDateFormat[key],\n      formatUpper = this._longDateFormat[key.toUpperCase()];\n    if (format || !formatUpper) {\n      return format;\n    }\n    this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function (tok) {\n      if (tok === 'MMMM' || tok === 'MM' || tok === 'DD' || tok === 'dddd') {\n        return tok.slice(1);\n      }\n      return tok;\n    }).join('');\n    return this._longDateFormat[key];\n  }\n  var defaultInvalidDate = 'Invalid date';\n  function invalidDate() {\n    return this._invalidDate;\n  }\n  var defaultOrdinal = '%d',\n    defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n  function ordinal(number) {\n    return this._ordinal.replace('%d', number);\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  function relativeTime(number, withoutSuffix, string, isFuture) {\n    var output = this._relativeTime[string];\n    return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\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  var aliases = {};\n  function addUnitAlias(unit, shorthand) {\n    var lowerCase = unit.toLowerCase();\n    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n  }\n  function normalizeUnits(units) {\n    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n  }\n  function normalizeObjectUnits(inputObject) {\n    var normalizedInput = {},\n      normalizedProp,\n      prop;\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    return normalizedInput;\n  }\n  var priorities = {};\n  function addUnitPriority(unit, priority) {\n    priorities[unit] = priority;\n  }\n  function getPrioritizedUnits(unitsObj) {\n    var units = [],\n      u;\n    for (u in unitsObj) {\n      if (hasOwnProp(unitsObj, u)) {\n        units.push({\n          unit: u,\n          priority: priorities[u]\n        });\n      }\n    }\n    units.sort(function (a, b) {\n      return a.priority - b.priority;\n    });\n    return units;\n  }\n  function isLeapYear(year) {\n    return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\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  function toInt(argumentForCoercion) {\n    var coercedNumber = +argumentForCoercion,\n      value = 0;\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n      value = absFloor(coercedNumber);\n    }\n    return value;\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  function get(mom, unit) {\n    return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n  }\n  function set$1(mom, unit, value) {\n    if (mom.isValid() && !isNaN(value)) {\n      if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n        value = toInt(value);\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n      } else {\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n      }\n    }\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  function stringSet(units, value) {\n    if (typeof units === 'object') {\n      units = normalizeObjectUnits(units);\n      var prioritized = getPrioritizedUnits(units),\n        i;\n      for (i = 0; i < prioritized.length; 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  var match1 = /\\d/,\n    //       0 - 9\n    match2 = /\\d\\d/,\n    //      00 - 99\n    match3 = /\\d{3}/,\n    //     000 - 999\n    match4 = /\\d{4}/,\n    //    0000 - 9999\n    match6 = /[+-]?\\d{6}/,\n    // -999999 - 999999\n    match1to2 = /\\d\\d?/,\n    //       0 - 99\n    match3to4 = /\\d\\d\\d\\d?/,\n    //     999 - 9999\n    match5to6 = /\\d\\d\\d\\d\\d\\d?/,\n    //   99999 - 999999\n    match1to3 = /\\d{1,3}/,\n    //       0 - 999\n    match1to4 = /\\d{1,4}/,\n    //       0 - 9999\n    match1to6 = /[+-]?\\d{1,6}/,\n    // -999999 - 999999\n    matchUnsigned = /\\d+/,\n    //       0 - inf\n    matchSigned = /[+-]?\\d+/,\n    //    -inf - inf\n    matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi,\n    // +00:00 -00:00 +0000 -0000 or Z\n    matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi,\n    // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n    matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/,\n    // 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 = /[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    regexes;\n  regexes = {};\n  function addRegexToken(token, regex, strictRegex) {\n    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n      return isStrict && strictRegex ? strictRegex : regex;\n    };\n  }\n  function getParseRegexForToken(token, config) {\n    if (!hasOwnProp(regexes, token)) {\n      return new RegExp(unescapeFormat(token));\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(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n      return p1 || p2 || p3 || p4;\n    }));\n  }\n  function regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n  }\n  var tokens = {};\n  function addParseToken(token, callback) {\n    var i,\n      func = callback;\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    for (i = 0; i < token.length; i++) {\n      tokens[token[i]] = func;\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  function addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n      tokens[token](input, config._a, config, token);\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  function mod(n, x) {\n    return (n % x + x) % x;\n  }\n  var indexOf;\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  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 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\n  }\n\n  // FORMATTING\n\n  addFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n  });\n  addFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n  });\n  addFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n  });\n\n  // ALIASES\n\n  addUnitAlias('month', 'M');\n\n  // PRIORITY\n\n  addUnitPriority('month', 8);\n\n  // PARSING\n\n  addRegexToken('M', match1to2);\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  addParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\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 = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    defaultLocaleMonthsShort = '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  function localeMonths(m, format) {\n    if (!m) {\n      return isArray(this._months) ? this._months : this._months['standalone'];\n    }\n    return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n  }\n  function localeMonthsShort(m, format) {\n    if (!m) {\n      return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];\n    }\n    return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\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(mom, '').toLocaleLowerCase();\n        this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\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  function localeMonthsParse(monthName, format, strict) {\n    var i, mom, regex;\n    if (this._monthsParseExact) {\n      return handleStrictParse.call(this, monthName, format, strict);\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('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n        this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n      }\n      if (!strict && !this._monthsParse[i]) {\n        regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n        this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n      }\n      // test the regex\n      if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n        return i;\n      } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\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    var dayOfMonth;\n    if (!mom.isValid()) {\n      // No op\n      return mom;\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    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n    return mom;\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  function getDaysInMonth() {\n    return daysInMonth(this.year(), this.month());\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 ? this._monthsShortStrictRegex : this._monthsShortRegex;\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 ? this._monthsStrictRegex : this._monthsRegex;\n    }\n  }\n  function computeMonthsParse() {\n    function cmpLenRev(a, b) {\n      return b.length - a.length;\n    }\n    var shortPieces = [],\n      longPieces = [],\n      mixedPieces = [],\n      i,\n      mom;\n    for (i = 0; i < 12; i++) {\n      // make the regex if we don't have it already\n      mom = createUTC([2000, i]);\n      shortPieces.push(this.monthsShort(mom, ''));\n      longPieces.push(this.months(mom, ''));\n      mixedPieces.push(this.months(mom, ''));\n      mixedPieces.push(this.monthsShort(mom, ''));\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    for (i = 0; i < 12; i++) {\n      shortPieces[i] = regexEscape(shortPieces[i]);\n      longPieces[i] = regexEscape(longPieces[i]);\n    }\n    for (i = 0; i < 24; i++) {\n      mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._monthsShortRegex = this._monthsRegex;\n    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n  }\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  addFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\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  // ALIASES\n\n  addUnitAlias('year', 'y');\n\n  // PRIORITIES\n\n  addUnitPriority('year', 1);\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  addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n  addParseToken('YYYY', function (input, array) {\n    array[YEAR] = 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  function getIsLeapYear() {\n    return isLeapYear(this.year());\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    return date;\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    return date;\n  }\n\n  // start-of-first-week - start-of-year\n  function firstWeekOffset(year, dow, doy) {\n    var\n      // 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    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    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    return {\n      year: resYear,\n      dayOfYear: resDayOfYear\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    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    return {\n      week: resWeek,\n      year: resYear\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  // ALIASES\n\n  addUnitAlias('week', 'w');\n  addUnitAlias('isoWeek', 'W');\n\n  // PRIORITIES\n\n  addUnitPriority('week', 5);\n  addUnitPriority('isoWeek', 5);\n\n  // PARSING\n\n  addRegexToken('w', match1to2);\n  addRegexToken('ww', match1to2, match2);\n  addRegexToken('W', match1to2);\n  addRegexToken('WW', match1to2, match2);\n  addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n    week[token.substr(0, 1)] = toInt(input);\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  var defaultLocaleWeek = {\n    dow: 0,\n    // 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  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  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  addFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n  });\n  addFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n  });\n  addFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n  });\n  addFormatToken('e', 0, 0, 'weekday');\n  addFormatToken('E', 0, 0, 'isoWeekday');\n\n  // ALIASES\n\n  addUnitAlias('day', 'd');\n  addUnitAlias('weekday', 'e');\n  addUnitAlias('isoWeekday', 'E');\n\n  // PRIORITY\n  addUnitPriority('day', 11);\n  addUnitPriority('weekday', 11);\n  addUnitPriority('isoWeekday', 11);\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  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  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    if (!isNaN(input)) {\n      return parseInt(input, 10);\n    }\n    input = locale.weekdaysParse(input);\n    if (typeof input === 'number') {\n      return input;\n    }\n    return null;\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  var defaultLocaleWeekdays = '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  function localeWeekdays(m, format) {\n    var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];\n    return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\n  }\n  function localeWeekdaysShort(m) {\n    return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n  }\n  function localeWeekdaysMin(m) {\n    return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\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      for (i = 0; i < 7; ++i) {\n        mom = createUTC([2000, 1]).day(i);\n        this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n        this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n        this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\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  function localeWeekdaysParse(weekdayName, format, strict) {\n    var i, mom, regex;\n    if (this._weekdaysParseExact) {\n      return handleStrictParse$1.call(this, weekdayName, format, strict);\n    }\n    if (!this._weekdaysParse) {\n      this._weekdaysParse = [];\n      this._minWeekdaysParse = [];\n      this._shortWeekdaysParse = [];\n      this._fullWeekdaysParse = [];\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('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n        this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n        this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n      }\n      if (!this._weekdaysParse[i]) {\n        regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n        this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n      }\n      // test the regex\n      if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n        return i;\n      } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n        return i;\n      } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\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    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\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  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  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  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 ? this._weekdaysStrictRegex : this._weekdaysRegex;\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 ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\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 ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n    }\n  }\n  function computeWeekdaysParse() {\n    function cmpLenRev(a, b) {\n      return b.length - a.length;\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    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._weekdaysShortRegex = this._weekdaysRegex;\n    this._weekdaysMinRegex = this._weekdaysRegex;\n    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n  }\n\n  // FORMATTING\n\n  function hFormat() {\n    return this.hours() % 12 || 12;\n  }\n  function kFormat() {\n    return this.hours() || 24;\n  }\n  addFormatToken('H', ['HH', 2], 0, 'hour');\n  addFormatToken('h', ['hh', 2], 0, hFormat);\n  addFormatToken('k', ['kk', 2], 0, kFormat);\n  addFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n  });\n  addFormatToken('hmmss', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n  });\n  addFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n  });\n  addFormatToken('Hmmss', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n  });\n  function meridiem(token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n      return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n    });\n  }\n  meridiem('a', true);\n  meridiem('A', false);\n\n  // ALIASES\n\n  addUnitAlias('hour', 'h');\n\n  // PRIORITY\n  addUnitPriority('hour', 13);\n\n  // PARSING\n\n  function matchMeridiem(isStrict, locale) {\n    return locale._meridiemParse;\n  }\n  addRegexToken('a', matchMeridiem);\n  addRegexToken('A', matchMeridiem);\n  addRegexToken('H', match1to2);\n  addRegexToken('h', match1to2);\n  addRegexToken('k', match1to2);\n  addRegexToken('HH', match1to2, match2);\n  addRegexToken('hh', match1to2, match2);\n  addRegexToken('kk', match1to2, match2);\n  addRegexToken('hmm', match3to4);\n  addRegexToken('hmmss', match5to6);\n  addRegexToken('Hmm', match3to4);\n  addRegexToken('Hmmss', match5to6);\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  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  function localeMeridiem(hours, minutes, isLower) {\n    if (hours > 11) {\n      return isLower ? 'pm' : 'PM';\n    } else {\n      return isLower ? 'am' : 'AM';\n    }\n  }\n  var baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n    relativeTime: defaultRelativeTime,\n    months: defaultLocaleMonths,\n    monthsShort: defaultLocaleMonthsShort,\n    week: defaultLocaleWeek,\n    weekdays: defaultLocaleWeekdays,\n    weekdaysMin: defaultLocaleWeekdaysMin,\n    weekdaysShort: defaultLocaleWeekdaysShort,\n    meridiemParse: defaultLocaleMeridiemParse\n  };\n\n  // internal storage for locale config files\n  var locales = {},\n    localeFamilies = {},\n    globalLocale;\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  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    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 (next && next.length >= j && commonPrefix(split, next) >= j - 1) {\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  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 (locales[name] === undefined && typeof module !== 'undefined' && module && module.exports) {\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\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      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('Locale ' + key + ' not found. Did you forget to load it?');\n        }\n      }\n    }\n    return globalLocale._abbr;\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('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\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      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      return locales[name];\n    } else {\n      // useful for testing\n      delete locales[name];\n      return null;\n    }\n  }\n  function updateLocale(name, config) {\n    if (config != null) {\n      var locale,\n        tmpLocale,\n        parentConfig = baseConfig;\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    if (key && key._locale && key._locale._abbr) {\n      key = key._locale._abbr;\n    }\n    if (!key) {\n      return globalLocale;\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    return chooseLocale(key);\n  }\n  function listLocales() {\n    return keys(locales);\n  }\n  function checkOverflow(m) {\n    var overflow,\n      a = m._a;\n    if (a && getParsingFlags(m).overflow === -2) {\n      overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\n      if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\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      getParsingFlags(m).overflow = overflow;\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 = /^\\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 = /^\\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 = [['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/], ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/], ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/], ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false], ['YYYY-DDD', /\\d{4}-\\d{3}/], ['YYYY-MM', /\\d{4}-\\d\\d/, false], ['YYYYYYMMDD', /[+-]\\d{10}/], ['YYYYMMDD', /\\d{8}/], ['GGGG[W]WWE', /\\d{4}W\\d{3}/], ['GGGG[W]WW', /\\d{4}W\\d{2}/, false], ['YYYYDDD', /\\d{7}/], ['YYYYMM', /\\d{6}/, false], ['YYYY', /\\d{4}/, false]],\n    // iso time formats and regexes\n    isoTimes = [['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/], ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/], ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/], ['HH:mm', /\\d\\d:\\d\\d/], ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/], ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/], ['HHmmss', /\\d\\d\\d\\d\\d\\d/], ['HHmm', /\\d\\d\\d\\d/], ['HH', /\\d\\d/]],\n    aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    rfc2822 = /^(?:(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    if (match) {\n      getParsingFlags(config).iso = true;\n      for (i = 0, l = isoDates.length; 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 = isoTimes.length; 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  function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n    var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];\n    if (secondStr) {\n      result.push(parseInt(secondStr, 10));\n    }\n    return result;\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  function preprocessRFC2822(s) {\n    // Remove comments and folding whitespace and replace multiple-spaces with a single space\n    return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\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(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n      if (weekdayProvided !== weekdayActual) {\n        getParsingFlags(config).weekdayMismatch = true;\n        config._isValid = false;\n        return false;\n      }\n    }\n    return true;\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(match[4], match[3], match[2], match[5], match[6], match[7]);\n      if (!checkWeekday(match[1], parsedArray, config)) {\n        return;\n      }\n      config._a = parsedArray;\n      config._tzm = calculateOffset(match[8], match[9], match[10]);\n      config._d = createUTCDate.apply(null, config._a);\n      config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\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    configFromISO(config);\n    if (config._isValid === false) {\n      delete config._isValid;\n    } else {\n      return;\n    }\n    configFromRFC2822(config);\n    if (config._isValid === false) {\n      delete config._isValid;\n    } else {\n      return;\n    }\n    if (config._strict) {\n      config._isValid = false;\n    } else {\n      // Final attempt, use Input Fallback\n      hooks.createFromInputFallback(config);\n    }\n  }\n  hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {\n    config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\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  function currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(hooks.now());\n    if (config._useUTC) {\n      return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\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    if (config._d) {\n      return;\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      if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n        getParsingFlags(config)._overflowDayOfYear = true;\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] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\n    }\n\n    // Check for 24:00:00.000\n    if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\n      config._nextDay = true;\n      config._a[HOUR] = 0;\n    }\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n    expectedWeekday = config._useUTC ? config._d.getUTCDay() : 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    if (config._nextDay) {\n      config._a[HOUR] = 24;\n    }\n\n    // check for mismatching day of week\n    if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n      getParsingFlags(config).weekdayMismatch = true;\n    }\n  }\n  function dayOfYearFromWeekInfo(config) {\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\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(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\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      curWeek = weekOfYear(createLocal(), dow, doy);\n      weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n      // Default to current week.\n      week = defaults(w.w, curWeek.week);\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    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n    for (i = 0; i < tokens.length; i++) {\n      token = tokens[i];\n      parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[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(string.indexOf(parsedInput) + parsedInput.length);\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 = 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 (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\n      getParsingFlags(config).bigHour = undefined;\n    }\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n    getParsingFlags(config).meridiem = config._meridiem;\n    // handle meridiem\n    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\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    configFromArray(config);\n    checkOverflow(config);\n  }\n  function meridiemFixWrap(locale, hour, meridiem) {\n    var isPm;\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    if (config._f.length === 0) {\n      getParsingFlags(config).invalidFormat = true;\n      config._d = new Date(NaN);\n      return;\n    }\n    for (i = 0; i < config._f.length; 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      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      getParsingFlags(tempConfig).score = currentScore;\n      if (!bestFormatIsValid) {\n        if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {\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    extend(config, bestMoment || tempConfig);\n  }\n  function configFromObject(config) {\n    if (config._d) {\n      return;\n    }\n    var i = normalizeObjectUnits(config._i),\n      dayOrDate = i.day === undefined ? i.date : i.day;\n    config._a = map([i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n      return obj && parseInt(obj, 10);\n    });\n    configFromArray(config);\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    return res;\n  }\n  function prepareConfig(config) {\n    var input = config._i,\n      format = config._f;\n    config._locale = config._locale || getLocale(config._l);\n    if (input === null || format === undefined && input === '') {\n      return createInvalid({\n        nullInput: true\n      });\n    }\n    if (typeof input === 'string') {\n      config._i = input = config._locale.preparse(input);\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    if (!isValid(config)) {\n      config._d = null;\n    }\n    return config;\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  function createLocalOrUTC(input, format, locale, strict, isUTC) {\n    var c = {};\n    if (format === true || format === false) {\n      strict = format;\n      format = undefined;\n    }\n    if (locale === true || locale === false) {\n      strict = locale;\n      locale = undefined;\n    }\n    if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\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    return createFromConfig(c);\n  }\n  function createLocal(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n  }\n  var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', 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    prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', 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  // 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    return pickBy('isBefore', args);\n  }\n  function max() {\n    var args = [].slice.call(arguments, 0);\n    return pickBy('isAfter', args);\n  }\n  var now = function () {\n    return Date.now ? Date.now() : +new Date();\n  };\n  var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n  function isDurationValid(m) {\n    var key,\n      unitHasDecimal = false,\n      i;\n    for (key in m) {\n      if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n        return false;\n      }\n    }\n    for (i = 0; i < ordering.length; ++i) {\n      if (m[ordering[i]]) {\n        if (unitHasDecimal) {\n          return false; // only allow non-integers for smallest unit\n        }\n\n        if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n          unitHasDecimal = true;\n        }\n      }\n    }\n    return true;\n  }\n  function isValid$1() {\n    return this._isValid;\n  }\n  function createInvalid$1() {\n    return createDuration(NaN);\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    this._isValid = isDurationValid(normalizedInput);\n\n    // representation for dateAddRemove\n    this._milliseconds = +milliseconds + seconds * 1e3 +\n    // 1000\n    minutes * 6e4 +\n    // 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    this._data = {};\n    this._locale = getLocale();\n    this._bubble();\n  }\n  function isDuration(obj) {\n    return obj instanceof Duration;\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 (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\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 sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);\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  function offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher),\n      chunk,\n      parts,\n      minutes;\n    if (matches === null) {\n      return null;\n    }\n    chunk = matches[matches.length - 1] || [];\n    parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n    minutes = +(parts[1] * 60) + toInt(parts[2]);\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 = (isMoment(input) || isDate(input) ? input.valueOf() : 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  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(this, createDuration(input - offset, 'm'), 1, false);\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  function getSetZone(input, keepLocalTime) {\n    if (input != null) {\n      if (typeof input !== 'string') {\n        input = -input;\n      }\n      this.utcOffset(input, keepLocalTime);\n      return this;\n    } else {\n      return -this.utcOffset();\n    }\n  }\n  function setOffsetToUTC(keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n  }\n  function setOffsetToLocal(keepLocalTime) {\n    if (this._isUTC) {\n      this.utcOffset(0, keepLocalTime);\n      this._isUTC = false;\n      if (keepLocalTime) {\n        this.subtract(getDateOffset(this), 'm');\n      }\n    }\n    return this;\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  function hasAlignedHourOffset(input) {\n    if (!this.isValid()) {\n      return false;\n    }\n    input = input ? createLocal(input).utcOffset() : 0;\n    return (this.utcOffset() - input) % 60 === 0;\n  }\n  function isDaylightSavingTime() {\n    return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n  }\n  function isDaylightSavingTimeShifted() {\n    if (!isUndefined(this._isDSTShifted)) {\n      return this._isDSTShifted;\n    }\n    var c = {},\n      other;\n    copyConfig(c, this);\n    c = prepareConfig(c);\n    if (c._a) {\n      other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n      this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n    } else {\n      this._isDSTShifted = false;\n    }\n    return this._isDSTShifted;\n  }\n  function isLocal() {\n    return this.isValid() ? !this._isUTC : false;\n  }\n  function isUtcOffset() {\n    return this.isValid() ? this._isUTC : false;\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 = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\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    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 (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n      diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n      duration = {};\n      duration.ms = diffRes.milliseconds;\n      duration.M = diffRes.months;\n    }\n    ret = new Duration(duration);\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n      ret._locale = input._locale;\n    }\n    if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n      ret._isValid = input._isValid;\n    }\n    return ret;\n  }\n  createDuration.fn = Duration.prototype;\n  createDuration.invalid = createInvalid$1;\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  function positiveMomentsDifference(base, other) {\n    var res = {};\n    res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\n      --res.months;\n    }\n    res.milliseconds = +other - +base.clone().add(res.months, 'M');\n    return res;\n  }\n  function momentsDifference(base, other) {\n    var res;\n    if (!(base.isValid() && other.isValid())) {\n      return {\n        milliseconds: 0,\n        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    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(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n        tmp = val;\n        val = period;\n        period = tmp;\n      }\n      dur = createDuration(val, period);\n      addSubtract(this, dur, direction);\n      return this;\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    if (!mom.isValid()) {\n      // No op\n      return;\n    }\n    updateOffset = updateOffset == null ? true : updateOffset;\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  var add = createAdder(1, 'add'),\n    subtract = createAdder(-1, 'subtract');\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 isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined;\n  }\n  function isMomentInputObject(input) {\n    var objectTest = isObject(input) && !isObjectEmpty(input),\n      propertyTest = false,\n      properties = ['years', 'year', 'y', 'months', 'month', 'M', 'days', 'day', 'd', 'dates', 'date', 'D', 'hours', 'hour', 'h', 'minutes', 'minute', 'm', 'seconds', 'second', 's', 'milliseconds', 'millisecond', 'ms'],\n      i,\n      property;\n    for (i = 0; i < properties.length; i += 1) {\n      property = properties[i];\n      propertyTest = propertyTest || hasOwnProp(input, property);\n    }\n    return objectTest && propertyTest;\n  }\n  function isNumberOrStringArray(input) {\n    var arrayTest = isArray(input),\n      dataTypeTest = false;\n    if (arrayTest) {\n      dataTypeTest = input.filter(function (item) {\n        return !isNumber(item) && isString(input);\n      }).length === 0;\n    }\n    return arrayTest && dataTypeTest;\n  }\n  function isCalendarSpec(input) {\n    var objectTest = isObject(input) && !isObjectEmpty(input),\n      propertyTest = false,\n      properties = ['sameDay', 'nextDay', 'lastDay', 'nextWeek', 'lastWeek', 'sameElse'],\n      i,\n      property;\n    for (i = 0; i < properties.length; i += 1) {\n      property = properties[i];\n      propertyTest = propertyTest || hasOwnProp(input, property);\n    }\n    return objectTest && propertyTest;\n  }\n  function getCalendarFormat(myMoment, now) {\n    var diff = myMoment.diff(now, 'days', true);\n    return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';\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 = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n  }\n  function clone() {\n    return new Moment(this);\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  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  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 (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\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 this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n    }\n  }\n  function isSameOrAfter(input, units) {\n    return this.isSame(input, units) || this.isAfter(input, units);\n  }\n  function isSameOrBefore(input, units) {\n    return this.isSame(input, units) || this.isBefore(input, units);\n  }\n  function diff(input, units, asFloat) {\n    var that, zoneDelta, output;\n    if (!this.isValid()) {\n      return NaN;\n    }\n    that = cloneWithOffset(input, this);\n    if (!that.isValid()) {\n      return NaN;\n    }\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n    units = normalizeUnits(units);\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;\n      // 1000\n      case 'minute':\n        output = (this - that) / 6e4;\n        break;\n      // 1000 * 60\n      case 'hour':\n        output = (this - that) / 36e5;\n        break;\n      // 1000 * 60 * 60\n      case 'day':\n        output = (this - that - zoneDelta) / 864e5;\n        break;\n      // 1000 * 60 * 60 * 24, negate dst\n      case 'week':\n        output = (this - that - zoneDelta) / 6048e5;\n        break;\n      // 1000 * 60 * 60 * 24 * 7, negate dst\n      default:\n        output = this - that;\n    }\n    return asFloat ? output : absFloor(output);\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    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  hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n  hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n  function toString() {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\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(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\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).toISOString().replace('Z', formatMoment(m, 'Z'));\n      }\n    }\n    return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\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    return this.format(prefix + year + datetime + suffix);\n  }\n  function format(inputString) {\n    if (!inputString) {\n      inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n    }\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n  }\n  function from(time, withoutSuffix) {\n    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n      return createDuration({\n        to: this,\n        from: time\n      }).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n      return this.localeData().invalidDate();\n    }\n  }\n  function fromNow(withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n  }\n  function to(time, withoutSuffix) {\n    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n      return createDuration({\n        from: this,\n        to: time\n      }).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n      return this.localeData().invalidDate();\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    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  var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {\n    if (key === undefined) {\n      return this.localeData();\n    } else {\n      return this.locale(key);\n    }\n  });\n  function localeData() {\n    return this._locale;\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  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  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  function startOf(units) {\n    var time, startOfDate;\n    units = normalizeUnits(units);\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\n      return this;\n    }\n    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n    switch (units) {\n      case 'year':\n        time = startOfDate(this.year(), 0, 1);\n        break;\n      case 'quarter':\n        time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n        break;\n      case 'month':\n        time = startOfDate(this.year(), this.month(), 1);\n        break;\n      case 'week':\n        time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n        break;\n      case 'isoWeek':\n        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\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(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\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    this._d.setTime(time);\n    hooks.updateOffset(this, true);\n    return this;\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    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n    switch (units) {\n      case 'year':\n        time = startOfDate(this.year() + 1, 0, 1) - 1;\n        break;\n      case 'quarter':\n        time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n        break;\n      case 'month':\n        time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n        break;\n      case 'week':\n        time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n        break;\n      case 'isoWeek':\n        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 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 += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 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    this._d.setTime(time);\n    hooks.updateOffset(this, true);\n    return this;\n  }\n  function valueOf() {\n    return this._d.valueOf() - (this._offset || 0) * 60000;\n  }\n  function unix() {\n    return Math.floor(this.valueOf() / 1000);\n  }\n  function toDate() {\n    return new Date(this.valueOf());\n  }\n  function toArray() {\n    var m = this;\n    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\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  function toJSON() {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n  }\n  function isValid$2() {\n    return isValid(this);\n  }\n  function parsingFlags() {\n    return extend({}, getParsingFlags(this));\n  }\n  function invalidAt() {\n    return getParsingFlags(this).overflow;\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  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  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  addRegexToken('N', matchEraAbbr);\n  addRegexToken('NN', matchEraAbbr);\n  addRegexToken('NNN', matchEraAbbr);\n  addRegexToken('NNNN', matchEraName);\n  addRegexToken('NNNNN', matchEraNarrow);\n  addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], 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  addRegexToken('y', matchUnsigned);\n  addRegexToken('yy', matchUnsigned);\n  addRegexToken('yyy', matchUnsigned);\n  addRegexToken('yyyy', matchUnsigned);\n  addRegexToken('yo', matchEraYearOrdinal);\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    if (config._locale.eraYearOrdinalParse) {\n      array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n    } else {\n      array[YEAR] = parseInt(input, 10);\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      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  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    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      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          case 'NNNN':\n            if (name === eraName) {\n              return eras[i];\n            }\n            break;\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  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  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      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    return '';\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      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    return '';\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      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    return '';\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      if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {\n        return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;\n      }\n    }\n    return this.year();\n  }\n  function erasNameRegex(isStrict) {\n    if (!hasOwnProp(this, '_erasNameRegex')) {\n      computeErasParse.call(this);\n    }\n    return isStrict ? this._erasNameRegex : this._erasRegex;\n  }\n  function erasAbbrRegex(isStrict) {\n    if (!hasOwnProp(this, '_erasAbbrRegex')) {\n      computeErasParse.call(this);\n    }\n    return isStrict ? this._erasAbbrRegex : this._erasRegex;\n  }\n  function erasNarrowRegex(isStrict) {\n    if (!hasOwnProp(this, '_erasNarrowRegex')) {\n      computeErasParse.call(this);\n    }\n    return isStrict ? this._erasNarrowRegex : this._erasRegex;\n  }\n  function matchEraAbbr(isStrict, locale) {\n    return locale.erasAbbrRegex(isStrict);\n  }\n  function matchEraName(isStrict, locale) {\n    return locale.erasNameRegex(isStrict);\n  }\n  function matchEraNarrow(isStrict, locale) {\n    return locale.erasNarrowRegex(isStrict);\n  }\n  function matchEraYearOrdinal(isStrict, locale) {\n    return locale._eraYearOrdinalRegex || matchUnsigned;\n  }\n  function computeErasParse() {\n    var abbrPieces = [],\n      namePieces = [],\n      narrowPieces = [],\n      mixedPieces = [],\n      i,\n      l,\n      eras = this.eras();\n    for (i = 0, l = eras.length; i < l; ++i) {\n      namePieces.push(regexEscape(eras[i].name));\n      abbrPieces.push(regexEscape(eras[i].abbr));\n      narrowPieces.push(regexEscape(eras[i].narrow));\n      mixedPieces.push(regexEscape(eras[i].name));\n      mixedPieces.push(regexEscape(eras[i].abbr));\n      mixedPieces.push(regexEscape(eras[i].narrow));\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('^(' + narrowPieces.join('|') + ')', 'i');\n  }\n\n  // FORMATTING\n\n  addFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n  });\n  addFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n  });\n  function addWeekYearFormatToken(token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n  }\n  addWeekYearFormatToken('gggg', 'weekYear');\n  addWeekYearFormatToken('ggggg', 'weekYear');\n  addWeekYearFormatToken('GGGG', 'isoWeekYear');\n  addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n  // ALIASES\n\n  addUnitAlias('weekYear', 'gg');\n  addUnitAlias('isoWeekYear', 'GG');\n\n  // PRIORITY\n\n  addUnitPriority('weekYear', 1);\n  addUnitPriority('isoWeekYear', 1);\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  addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n    week[token.substr(0, 2)] = toInt(input);\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(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);\n  }\n  function getSetISOWeekYear(input) {\n    return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);\n  }\n  function getISOWeeksInYear() {\n    return weeksInYear(this.year(), 1, 4);\n  }\n  function getISOWeeksInISOWeekYear() {\n    return weeksInYear(this.isoWeekYear(), 1, 4);\n  }\n  function getWeeksInYear() {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n  }\n  function getWeeksInWeekYear() {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\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  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    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  // ALIASES\n\n  addUnitAlias('quarter', 'Q');\n\n  // PRIORITY\n\n  addUnitPriority('quarter', 7);\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 ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n  }\n\n  // FORMATTING\n\n  addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n  // ALIASES\n\n  addUnitAlias('date', 'D');\n\n  // PRIORITY\n  addUnitPriority('date', 9);\n\n  // PARSING\n\n  addRegexToken('D', match1to2);\n  addRegexToken('DD', match1to2, match2);\n  addRegexToken('Do', function (isStrict, locale) {\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;\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  // ALIASES\n\n  addUnitAlias('dayOfYear', 'DDD');\n\n  // PRIORITY\n  addUnitPriority('dayOfYear', 4);\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 = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 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  // ALIASES\n\n  addUnitAlias('minute', 'm');\n\n  // PRIORITY\n\n  addUnitPriority('minute', 14);\n\n  // PARSING\n\n  addRegexToken('m', match1to2);\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  // ALIASES\n\n  addUnitAlias('second', 's');\n\n  // PRIORITY\n\n  addUnitPriority('second', 15);\n\n  // PARSING\n\n  addRegexToken('s', match1to2);\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  addFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\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  // ALIASES\n\n  addUnitAlias('millisecond', 'ms');\n\n  // PRIORITY\n\n  addUnitPriority('millisecond', 16);\n\n  // PARSING\n\n  addRegexToken('S', match1to3, match1);\n  addRegexToken('SS', match1to3, match2);\n  addRegexToken('SSS', match1to3, match3);\n  var token, getSetMillisecond;\n  for (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n  }\n  function parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n  }\n  for (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\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  function getZoneName() {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n  }\n  var proto = Moment.prototype;\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('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n  proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n  proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n  proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n  proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n  function createUnix(input) {\n    return createLocal(input * 1000);\n  }\n  function createInZone() {\n    return createLocal.apply(null, arguments).parseZone();\n  }\n  function preParsePostFormat(string) {\n    return string;\n  }\n  var proto$1 = Locale.prototype;\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  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  proto$1.weekdays = localeWeekdays;\n  proto$1.weekdaysMin = localeWeekdaysMin;\n  proto$1.weekdaysShort = localeWeekdaysShort;\n  proto$1.weekdaysParse = localeWeekdaysParse;\n  proto$1.weekdaysRegex = weekdaysRegex;\n  proto$1.weekdaysShortRegex = weekdaysShortRegex;\n  proto$1.weekdaysMinRegex = weekdaysMinRegex;\n  proto$1.isPM = localeIsPM;\n  proto$1.meridiem = localeMeridiem;\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  function listMonthsImpl(format, index, field) {\n    if (isNumber(format)) {\n      index = format;\n      format = undefined;\n    }\n    format = format || '';\n    if (index != null) {\n      return get$1(format, index, field, 'month');\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      format = format || '';\n    } else {\n      format = localeSorted;\n      index = format;\n      localeSorted = false;\n      if (isNumber(format)) {\n        index = format;\n        format = undefined;\n      }\n      format = format || '';\n    }\n    var locale = getLocale(),\n      shift = localeSorted ? locale._week.dow : 0,\n      i,\n      out = [];\n    if (index != null) {\n      return get$1(format, (index + shift) % 7, field, 'day');\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  function listMonths(format, index) {\n    return listMonthsImpl(format, index, 'months');\n  }\n  function listMonthsShort(format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n  }\n  function listWeekdays(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n  }\n  function listWeekdaysShort(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n  }\n  function listWeekdaysMin(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n  }\n  getSetGlobalLocale('en', {\n    eras: [{\n      since: '0001-01-01',\n      until: +Infinity,\n      offset: 1,\n      name: 'Anno Domini',\n      narrow: 'AD',\n      abbr: 'AD'\n    }, {\n      since: '0000-12-31',\n      until: -Infinity,\n      offset: 1,\n      name: 'Before Christ',\n      narrow: 'BC',\n      abbr: 'BC'\n    }],\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    }\n  });\n\n  // Side effect imports\n\n  hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n  hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n  var mathAbs = Math.abs;\n  function abs() {\n    var data = this._data;\n    this._milliseconds = mathAbs(this._milliseconds);\n    this._days = mathAbs(this._days);\n    this._months = mathAbs(this._months);\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    return this;\n  }\n  function addSubtract$1(duration, input, value, direction) {\n    var other = createDuration(input, value);\n    duration._milliseconds += direction * other._milliseconds;\n    duration._days += direction * other._days;\n    duration._months += direction * other._months;\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  function absCeil(number) {\n    if (number < 0) {\n      return Math.floor(number);\n    } else {\n      return Math.ceil(number);\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 (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {\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    seconds = absFloor(milliseconds / 1000);\n    data.seconds = seconds % 60;\n    minutes = absFloor(seconds / 60);\n    data.minutes = minutes % 60;\n    hours = absFloor(minutes / 60);\n    data.hours = hours % 24;\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    data.days = days;\n    data.months = months;\n    data.years = years;\n    return this;\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  function monthsToDays(months) {\n    // the reverse of daysToMonths\n    return months * 146097 / 4800;\n  }\n  function as(units) {\n    if (!this.isValid()) {\n      return NaN;\n    }\n    var days,\n      months,\n      milliseconds = this._milliseconds;\n    units = normalizeUnits(units);\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  // TODO: Use this.as('ms')?\n  function valueOf$1() {\n    if (!this.isValid()) {\n      return NaN;\n    }\n    return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;\n  }\n  function makeAs(alias) {\n    return function () {\n      return this.as(alias);\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  function clone$1() {\n    return createDuration(this);\n  }\n  function get$2(units) {\n    units = normalizeUnits(units);\n    return this.isValid() ? this[units + 's']() : NaN;\n  }\n  function makeGetter(name) {\n    return function () {\n      return this.isValid() ? this._data[name] : NaN;\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  function weeks() {\n    return absFloor(this.days() / 7);\n  }\n  var round = Math.round,\n    thresholds = {\n      ss: 44,\n      // a few seconds to seconds\n      s: 45,\n      // seconds to minute\n      m: 45,\n      // minutes to hour\n      h: 22,\n      // hours to day\n      d: 26,\n      // days to month/week\n      w: null,\n      // 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  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 = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days];\n    if (thresholds.w != null) {\n      a = a || weeks <= 1 && ['w'] || weeks < thresholds.w && ['ww', weeks];\n    }\n    a = a || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];\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  function humanize(argWithSuffix, argThresholds) {\n    if (!this.isValid()) {\n      return this.localeData().invalidDate();\n    }\n    var withSuffix = false,\n      th = thresholds,\n      locale,\n      output;\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    locale = this.localeData();\n    output = relativeTime$1(this, !withSuffix, th, locale);\n    if (withSuffix) {\n      output = locale.pastFuture(+this, output);\n    }\n    return locale.postformat(output);\n  }\n  var abs$1 = Math.abs;\n  function sign(x) {\n    return (x > 0) - (x < 0) || +x;\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    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    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    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    return totalSign + 'P' + (years ? ymSign + years + 'Y' : '') + (months ? ymSign + months + 'M' : '') + (days ? daysSign + days + 'D' : '') + (hours || minutes || seconds ? 'T' : '') + (hours ? hmsSign + hours + 'H' : '') + (minutes ? hmsSign + minutes + 'M' : '') + (seconds ? hmsSign + s + 'S' : '');\n  }\n  var proto$2 = Duration.prototype;\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  proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\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.29.1';\n  setHookCallback(createLocal);\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',\n    // <input type=\"datetime-local\" />\n    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',\n    // <input type=\"datetime-local\" step=\"1\" />\n    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',\n    // <input type=\"datetime-local\" step=\"0.001\" />\n    DATE: 'YYYY-MM-DD',\n    // <input type=\"date\" />\n    TIME: 'HH:mm',\n    // <input type=\"time\" />\n    TIME_SECONDS: 'HH:mm:ss',\n    // <input type=\"time\" step=\"1\" />\n    TIME_MS: 'HH:mm:ss.SSS',\n    // <input type=\"time\" step=\"0.001\" />\n    WEEK: 'GGGG-[W]WW',\n    // <input type=\"week\" />\n    MONTH: 'YYYY-MM' // <input type=\"month\" />\n  };\n\n  return hooks;\n});","/*\n*\tReturns a list of params used for sorting/filtering\n*/\nexport function url_add_param(url, param, value){\n\n\tvar hash       = {};\n\tvar parser     = document.createElement('a');\n\n\tparser.href    = url;\n\n\tvar parameters = parser.search.split(/\\?|&/);\n\n\tfor(var i=0; i < parameters.length; i++) {\n\t\tif(!parameters[i])\n\t\t\tcontinue;\n\n\t\t\tvar ary      = parameters[i].split('=');\n\t\t\thash[ary[0]] = ary[1];\n\t}\n\n\thash[param] = value;\n\n\tvar list = [];\n\tObject.keys(hash).forEach(function (key) {\n\t\tlist.push(key + '=' + hash[key]);\n\t});\n\n\tparser.search = '?' + list.join('&');\n\treturn parser.href;\n}\n\n/*\n*\tRemove a specific param/value pair from a url\n*/\nexport function url_remove_param(url, parameter) {\n  //prefer to use l.search if you have a location/link object\n  var urlparts= url.split('?');\n  if (urlparts.length>=2) {\n\n      var prefix= encodeURIComponent(parameter)+'=';\n      var pars= urlparts[1].split(/[&;]/g);\n\n      //reverse iteration as may be destructive\n      for (var i= pars.length; i-- > 0;) {\n          //idiom for string.startsWith\n          if (pars[i].lastIndexOf(prefix, 0) !== -1) {\n              pars.splice(i, 1);\n          }\n      }\n\n      url= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : \"\");\n      return url;\n  } else {\n      return url;\n  }\n}\n\nexport function url_get_param(param) {\n  var sPageURL = decodeURIComponent(window.location.search.substring(1)),\n      sURLVariables = sPageURL.split('&'),\n      sParameterName,\n      i;\n\n  for (i = 0; i < sURLVariables.length; i++) {\n      sParameterName = sURLVariables[i].split('=');\n\n      if (sParameterName[0] === param) {\n          return sParameterName[1] === undefined ? true : sParameterName[1];\n      }\n  }\n};\n\nexport function get_base_url() {\n    var re = new RegExp(/^.*\\//);\n    return re.exec(window.location.href);\n}\n\n/*\n*\tConverts string of text into slug\n*/\nexport function text_to_slug(Text){\n\n    return Text\n        .toLowerCase()\n        .replace(/\\.[^/.]+$/, \"\")\n        .replace(/ /g,'-')\n        .replace(/[^\\w-]+/g,'')\n        ;\n}\n\n/*\n*\tTakes this_string into This String\n*/\nexport function humanize(Text) {\n  return Text\n      .replace(/^[\\s_]+|[\\s_]+$/g, '')\n      .replace(/[_\\s]+/g, ' ')\n      .replace(/^[a-z]/, function(m) { return m.toUpperCase(); });\n}\n\n/*\n*\tDollars to cents\n*/\nexport function dollars_to_cents(amount){\n\treturn amount * 100.00\n}\n\n/*\n*  Displays loading message on the page\n*/\nexport function showLoadingMessage(message) {\n  $('body').addClass('loading').prepend('<div class=\"loading-messages\">' + message + '...</div>');\n  return;\n}\n\n/*\n*  Removes loading message from the page\n*/\nexport function hideLoadingMessage() {\n  $('.loading-messages').remove();\n  $('body').removeClass('loading');\n  return;\n}\n\n/*\n*  Extracts on_sale and sale_campaign params from url\n*/\nexport function get_sale_campaign_params() {\n  return { 'on_sale': url_get_param('on_sale'), 'sale_campaign': url_get_param('sale_campaign') }\n}\n\n/*\n*  Displays flash notice similar to 'app/views/partials/notices'\n*/\nexport function displayFlashMessage(type, msg) {\n  // expects a type string argument that aligns with bootstrap bg colors\n  var $notice = $(\n    `<div class=\"fixed-bottom p-4\" style=\"z-index: 1999;\">\n      <div class=\"toast bg-${type} show\" role=\"alert\">\n        <div class=\"toast-body\">\n          ${msg}\n        </div>\n      </div>\n    </div>`\n  );\n\n  $('body').prepend($notice);\n\n  setTimeout(function(){\n    $notice.remove();\n  }, 8000);\n\n  return;\n}\n","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n(function (global, factory) {\n  \"use strict\";\n\n  if (typeof module === \"object\" && typeof module.exports === \"object\") {\n    // For CommonJS and CommonJS-like environments where a proper `window`\n    // is present, execute the factory and get jQuery.\n    // For environments that do not have a `window` with a `document`\n    // (such as Node.js), expose a factory as module.exports.\n    // This accentuates the need for the creation of a real `window`.\n    // e.g. var jQuery = require(\"jquery\")(window);\n    // See ticket trac-14549 for more info.\n    module.exports = global.document ? factory(global, true) : function (w) {\n      if (!w.document) {\n        throw new Error(\"jQuery requires a window with a document\");\n      }\n      return factory(w);\n    };\n  } else {\n    factory(global);\n  }\n\n  // Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n  // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n  // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n  // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n  // enough that all such attempts are guarded in a try block.\n  \"use strict\";\n\n  var arr = [];\n  var getProto = Object.getPrototypeOf;\n  var slice = arr.slice;\n  var flat = arr.flat ? function (array) {\n    return arr.flat.call(array);\n  } : function (array) {\n    return arr.concat.apply([], array);\n  };\n  var push = arr.push;\n  var indexOf = arr.indexOf;\n  var class2type = {};\n  var toString = class2type.toString;\n  var hasOwn = class2type.hasOwnProperty;\n  var fnToString = hasOwn.toString;\n  var ObjectFunctionString = fnToString.call(Object);\n  var support = {};\n  var isFunction = function isFunction(obj) {\n    // Support: Chrome <=57, Firefox <=52\n    // In some browsers, typeof returns \"function\" for HTML <object> elements\n    // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n    // We don't want to classify *any* DOM node as a function.\n    // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n    // Plus for old WebKit, typeof returns \"function\" for HTML collections\n    // (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n    return typeof obj === \"function\" && typeof obj.nodeType !== \"number\" && typeof obj.item !== \"function\";\n  };\n  var isWindow = function isWindow(obj) {\n    return obj != null && obj === obj.window;\n  };\n  var document = window.document;\n  var preservedScriptAttributes = {\n    type: true,\n    src: true,\n    nonce: true,\n    noModule: true\n  };\n  function DOMEval(code, node, doc) {\n    doc = doc || document;\n    var i,\n      val,\n      script = doc.createElement(\"script\");\n    script.text = code;\n    if (node) {\n      for (i in preservedScriptAttributes) {\n        // Support: Firefox 64+, Edge 18+\n        // Some browsers don't support the \"nonce\" property on scripts.\n        // On the other hand, just using `getAttribute` is not enough as\n        // the `nonce` attribute is reset to an empty string whenever it\n        // becomes browsing-context connected.\n        // See https://github.com/whatwg/html/issues/2369\n        // See https://html.spec.whatwg.org/#nonce-attributes\n        // The `node.getAttribute` check was added for the sake of\n        // `jQuery.globalEval` so that it can fake a nonce-containing node\n        // via an object.\n        val = node[i] || node.getAttribute && node.getAttribute(i);\n        if (val) {\n          script.setAttribute(i, val);\n        }\n      }\n    }\n    doc.head.appendChild(script).parentNode.removeChild(script);\n  }\n  function toType(obj) {\n    if (obj == null) {\n      return obj + \"\";\n    }\n\n    // Support: Android <=2.3 only (functionish RegExp)\n    return typeof obj === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : typeof obj;\n  }\n  /* global Symbol */\n  // Defining this global in .eslintrc.json would create a danger of using the global\n  // unguarded in another place, it seems safer to define global only for this module\n\n  var version = \"3.7.1\",\n    rhtmlSuffix = /HTML$/i,\n    // Define a local copy of jQuery\n    jQuery = function (selector, context) {\n      // The jQuery object is actually just the init constructor 'enhanced'\n      // Need init if jQuery is called (just allow error to be thrown if not included)\n      return new jQuery.fn.init(selector, context);\n    };\n  jQuery.fn = jQuery.prototype = {\n    // The current version of jQuery being used\n    jquery: version,\n    constructor: jQuery,\n    // The default length of a jQuery object is 0\n    length: 0,\n    toArray: function () {\n      return slice.call(this);\n    },\n    // Get the Nth element in the matched element set OR\n    // Get the whole matched element set as a clean array\n    get: function (num) {\n      // Return all the elements in a clean array\n      if (num == null) {\n        return slice.call(this);\n      }\n\n      // Return just the one element from the set\n      return num < 0 ? this[num + this.length] : this[num];\n    },\n    // Take an array of elements and push it onto the stack\n    // (returning the new matched element set)\n    pushStack: function (elems) {\n      // Build a new jQuery matched element set\n      var ret = jQuery.merge(this.constructor(), elems);\n\n      // Add the old object onto the stack (as a reference)\n      ret.prevObject = this;\n\n      // Return the newly-formed element set\n      return ret;\n    },\n    // Execute a callback for every element in the matched set.\n    each: function (callback) {\n      return jQuery.each(this, callback);\n    },\n    map: function (callback) {\n      return this.pushStack(jQuery.map(this, function (elem, i) {\n        return callback.call(elem, i, elem);\n      }));\n    },\n    slice: function () {\n      return this.pushStack(slice.apply(this, arguments));\n    },\n    first: function () {\n      return this.eq(0);\n    },\n    last: function () {\n      return this.eq(-1);\n    },\n    even: function () {\n      return this.pushStack(jQuery.grep(this, function (_elem, i) {\n        return (i + 1) % 2;\n      }));\n    },\n    odd: function () {\n      return this.pushStack(jQuery.grep(this, function (_elem, i) {\n        return i % 2;\n      }));\n    },\n    eq: function (i) {\n      var len = this.length,\n        j = +i + (i < 0 ? len : 0);\n      return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n    },\n    end: function () {\n      return this.prevObject || this.constructor();\n    },\n    // For internal use only.\n    // Behaves like an Array's method, not like a jQuery method.\n    push: push,\n    sort: arr.sort,\n    splice: arr.splice\n  };\n  jQuery.extend = jQuery.fn.extend = function () {\n    var options,\n      name,\n      src,\n      copy,\n      copyIsArray,\n      clone,\n      target = arguments[0] || {},\n      i = 1,\n      length = arguments.length,\n      deep = false;\n\n    // Handle a deep copy situation\n    if (typeof target === \"boolean\") {\n      deep = target;\n\n      // Skip the boolean and the target\n      target = arguments[i] || {};\n      i++;\n    }\n\n    // Handle case when target is a string or something (possible in deep copy)\n    if (typeof target !== \"object\" && !isFunction(target)) {\n      target = {};\n    }\n\n    // Extend jQuery itself if only one argument is passed\n    if (i === length) {\n      target = this;\n      i--;\n    }\n    for (; i < length; i++) {\n      // Only deal with non-null/undefined values\n      if ((options = arguments[i]) != null) {\n        // Extend the base object\n        for (name in options) {\n          copy = options[name];\n\n          // Prevent Object.prototype pollution\n          // Prevent never-ending loop\n          if (name === \"__proto__\" || target === copy) {\n            continue;\n          }\n\n          // Recurse if we're merging plain objects or arrays\n          if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n            src = target[name];\n\n            // Ensure proper type for the source value\n            if (copyIsArray && !Array.isArray(src)) {\n              clone = [];\n            } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n              clone = {};\n            } else {\n              clone = src;\n            }\n            copyIsArray = false;\n\n            // Never move original objects, clone them\n            target[name] = jQuery.extend(deep, clone, copy);\n\n            // Don't bring in undefined values\n          } else if (copy !== undefined) {\n            target[name] = copy;\n          }\n        }\n      }\n    }\n\n    // Return the modified object\n    return target;\n  };\n  jQuery.extend({\n    // Unique for each copy of jQuery on the page\n    expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n    // Assume jQuery is ready without the ready module\n    isReady: true,\n    error: function (msg) {\n      throw new Error(msg);\n    },\n    noop: function () {},\n    isPlainObject: function (obj) {\n      var proto, Ctor;\n\n      // Detect obvious negatives\n      // Use toString instead of jQuery.type to catch host objects\n      if (!obj || toString.call(obj) !== \"[object Object]\") {\n        return false;\n      }\n      proto = getProto(obj);\n\n      // Objects with no prototype (e.g., `Object.create( null )`) are plain\n      if (!proto) {\n        return true;\n      }\n\n      // Objects with prototype are plain iff they were constructed by a global Object function\n      Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n      return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n    },\n    isEmptyObject: function (obj) {\n      var name;\n      for (name in obj) {\n        return false;\n      }\n      return true;\n    },\n    // Evaluates a script in a provided context; falls back to the global one\n    // if not specified.\n    globalEval: function (code, options, doc) {\n      DOMEval(code, {\n        nonce: options && options.nonce\n      }, doc);\n    },\n    each: function (obj, callback) {\n      var length,\n        i = 0;\n      if (isArrayLike(obj)) {\n        length = obj.length;\n        for (; i < length; i++) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      } else {\n        for (i in obj) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      }\n      return obj;\n    },\n    // Retrieve the text value of an array of DOM nodes\n    text: function (elem) {\n      var node,\n        ret = \"\",\n        i = 0,\n        nodeType = elem.nodeType;\n      if (!nodeType) {\n        // If no nodeType, this is expected to be an array\n        while (node = elem[i++]) {\n          // Do not traverse comment nodes\n          ret += jQuery.text(node);\n        }\n      }\n      if (nodeType === 1 || nodeType === 11) {\n        return elem.textContent;\n      }\n      if (nodeType === 9) {\n        return elem.documentElement.textContent;\n      }\n      if (nodeType === 3 || nodeType === 4) {\n        return elem.nodeValue;\n      }\n\n      // Do not include comment or processing instruction nodes\n\n      return ret;\n    },\n    // results is for internal usage only\n    makeArray: function (arr, results) {\n      var ret = results || [];\n      if (arr != null) {\n        if (isArrayLike(Object(arr))) {\n          jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n        } else {\n          push.call(ret, arr);\n        }\n      }\n      return ret;\n    },\n    inArray: function (elem, arr, i) {\n      return arr == null ? -1 : indexOf.call(arr, elem, i);\n    },\n    isXMLDoc: function (elem) {\n      var namespace = elem && elem.namespaceURI,\n        docElem = elem && (elem.ownerDocument || elem).documentElement;\n\n      // Assume HTML when documentElement doesn't yet exist, such as inside\n      // document fragments.\n      return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n    },\n    // Support: Android <=4.0 only, PhantomJS 1 only\n    // push.apply(_, arraylike) throws on ancient WebKit\n    merge: function (first, second) {\n      var len = +second.length,\n        j = 0,\n        i = first.length;\n      for (; j < len; j++) {\n        first[i++] = second[j];\n      }\n      first.length = i;\n      return first;\n    },\n    grep: function (elems, callback, invert) {\n      var callbackInverse,\n        matches = [],\n        i = 0,\n        length = elems.length,\n        callbackExpect = !invert;\n\n      // Go through the array, only saving the items\n      // that pass the validator function\n      for (; i < length; i++) {\n        callbackInverse = !callback(elems[i], i);\n        if (callbackInverse !== callbackExpect) {\n          matches.push(elems[i]);\n        }\n      }\n      return matches;\n    },\n    // arg is for internal usage only\n    map: function (elems, callback, arg) {\n      var length,\n        value,\n        i = 0,\n        ret = [];\n\n      // Go through the array, translating each of the items to their new values\n      if (isArrayLike(elems)) {\n        length = elems.length;\n        for (; i < length; i++) {\n          value = callback(elems[i], i, arg);\n          if (value != null) {\n            ret.push(value);\n          }\n        }\n\n        // Go through every key on the object,\n      } else {\n        for (i in elems) {\n          value = callback(elems[i], i, arg);\n          if (value != null) {\n            ret.push(value);\n          }\n        }\n      }\n\n      // Flatten any nested arrays\n      return flat(ret);\n    },\n    // A global GUID counter for objects\n    guid: 1,\n    // jQuery.support is not used in Core but other projects attach their\n    // properties to it so it needs to exist.\n    support: support\n  });\n  if (typeof Symbol === \"function\") {\n    jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n  }\n\n  // Populate the class2type map\n  jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (_i, name) {\n    class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n  });\n  function isArrayLike(obj) {\n    // Support: real iOS 8.2 only (not reproducible in simulator)\n    // `in` check used to prevent JIT error (gh-2145)\n    // hasOwn isn't used here due to false negatives\n    // regarding Nodelist length in IE\n    var length = !!obj && \"length\" in obj && obj.length,\n      type = toType(obj);\n    if (isFunction(obj) || isWindow(obj)) {\n      return false;\n    }\n    return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n  }\n  function nodeName(elem, name) {\n    return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n  }\n  var pop = arr.pop;\n  var sort = arr.sort;\n  var splice = arr.splice;\n  var whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n  var rtrimCSS = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\");\n\n  // Note: an element does not contain itself\n  jQuery.contains = function (a, b) {\n    var bup = b && b.parentNode;\n    return a === bup || !!(bup && bup.nodeType === 1 && (\n    // Support: IE 9 - 11+\n    // IE doesn't have `contains` on SVG.\n    a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n  };\n\n  // CSS string/identifier serialization\n  // https://drafts.csswg.org/cssom/#common-serializing-idioms\n  var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n  function fcssescape(ch, asCodePoint) {\n    if (asCodePoint) {\n      // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n      if (ch === \"\\0\") {\n        return \"\\uFFFD\";\n      }\n\n      // Control characters and (dependent upon position) numbers get escaped as code points\n      return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n    }\n\n    // Other potentially-special ASCII characters get backslash-escaped\n    return \"\\\\\" + ch;\n  }\n  jQuery.escapeSelector = function (sel) {\n    return (sel + \"\").replace(rcssescape, fcssescape);\n  };\n  var preferredDoc = document,\n    pushNative = push;\n  (function () {\n    var i,\n      Expr,\n      outermostContext,\n      sortInput,\n      hasDuplicate,\n      push = pushNative,\n      // Local document vars\n      document,\n      documentElement,\n      documentIsHTML,\n      rbuggyQSA,\n      matches,\n      // Instance-specific data\n      expando = jQuery.expando,\n      dirruns = 0,\n      done = 0,\n      classCache = createCache(),\n      tokenCache = createCache(),\n      compilerCache = createCache(),\n      nonnativeSelectorCache = createCache(),\n      sortOrder = function (a, b) {\n        if (a === b) {\n          hasDuplicate = true;\n        }\n        return 0;\n      },\n      booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" + \"loop|multiple|open|readonly|required|scoped\",\n      // Regular expressions\n\n      // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n      identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n      // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n      attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n      // Operator (capture 2)\n      \"*([*^$|!~]?=)\" + whitespace +\n      // \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n      \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n      pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n      // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n      // 1. quoted (capture 3; capture 4 or capture 5)\n      \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n      // 2. simple (capture 6)\n      \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n      // 3. anything else (capture 2)\n      \".*\" + \")\\\\)|)\",\n      // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n      rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n      rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n      rleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n      rdescend = new RegExp(whitespace + \"|>\"),\n      rpseudo = new RegExp(pseudos),\n      ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n      matchExpr = {\n        ID: new RegExp(\"^#(\" + identifier + \")\"),\n        CLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n        TAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n        ATTR: new RegExp(\"^\" + attributes),\n        PSEUDO: new RegExp(\"^\" + pseudos),\n        CHILD: new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n        bool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n        // For use in libraries implementing .is()\n        // We use this for POS matching in `select`\n        needsContext: new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n      },\n      rinputs = /^(?:input|select|textarea|button)$/i,\n      rheader = /^h\\d$/i,\n      // Easily-parseable/retrievable ID or TAG or CLASS selectors\n      rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n      rsibling = /[+~]/,\n      // CSS escapes\n      // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n      runescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n      funescape = function (escape, nonHex) {\n        var high = \"0x\" + escape.slice(1) - 0x10000;\n        if (nonHex) {\n          // Strip the backslash prefix from a non-hex escape sequence\n          return nonHex;\n        }\n\n        // Replace a hexadecimal escape sequence with the encoded Unicode code point\n        // Support: IE <=11+\n        // For values outside the Basic Multilingual Plane (BMP), manually construct a\n        // surrogate pair\n        return high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n      },\n      // Used for iframes; see `setDocument`.\n      // Support: IE 9 - 11+, Edge 12 - 18+\n      // Removing the function wrapper causes a \"Permission Denied\"\n      // error in IE/Edge.\n      unloadHandler = function () {\n        setDocument();\n      },\n      inDisabledFieldset = addCombinator(function (elem) {\n        return elem.disabled === true && nodeName(elem, \"fieldset\");\n      }, {\n        dir: \"parentNode\",\n        next: \"legend\"\n      });\n\n    // Support: IE <=9 only\n    // Accessing document.activeElement can throw unexpectedly\n    // https://bugs.jquery.com/ticket/13393\n    function safeActiveElement() {\n      try {\n        return document.activeElement;\n      } catch (err) {}\n    }\n\n    // Optimize for push.apply( _, NodeList )\n    try {\n      push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\n\n      // Support: Android <=4.0\n      // Detect silently failing push.apply\n      // eslint-disable-next-line no-unused-expressions\n      arr[preferredDoc.childNodes.length].nodeType;\n    } catch (e) {\n      push = {\n        apply: function (target, els) {\n          pushNative.apply(target, slice.call(els));\n        },\n        call: function (target) {\n          pushNative.apply(target, slice.call(arguments, 1));\n        }\n      };\n    }\n    function find(selector, context, results, seed) {\n      var m,\n        i,\n        elem,\n        nid,\n        match,\n        groups,\n        newSelector,\n        newContext = context && context.ownerDocument,\n        // nodeType defaults to 9, since context defaults to document\n        nodeType = context ? context.nodeType : 9;\n      results = results || [];\n\n      // Return early from calls with invalid selector or context\n      if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n        return results;\n      }\n\n      // Try to shortcut find operations (as opposed to filters) in HTML documents\n      if (!seed) {\n        setDocument(context);\n        context = context || document;\n        if (documentIsHTML) {\n          // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n          // (excepting DocumentFragment context, where the methods don't exist)\n          if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n            // ID selector\n            if (m = match[1]) {\n              // Document context\n              if (nodeType === 9) {\n                if (elem = context.getElementById(m)) {\n                  // Support: IE 9 only\n                  // getElementById can match elements by name instead of ID\n                  if (elem.id === m) {\n                    push.call(results, elem);\n                    return results;\n                  }\n                } else {\n                  return results;\n                }\n\n                // Element context\n              } else {\n                // Support: IE 9 only\n                // getElementById can match elements by name instead of ID\n                if (newContext && (elem = newContext.getElementById(m)) && find.contains(context, elem) && elem.id === m) {\n                  push.call(results, elem);\n                  return results;\n                }\n              }\n\n              // Type selector\n            } else if (match[2]) {\n              push.apply(results, context.getElementsByTagName(selector));\n              return results;\n\n              // Class selector\n            } else if ((m = match[3]) && context.getElementsByClassName) {\n              push.apply(results, context.getElementsByClassName(m));\n              return results;\n            }\n          }\n\n          // Take advantage of querySelectorAll\n          if (!nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n            newSelector = selector;\n            newContext = context;\n\n            // qSA considers elements outside a scoping root when evaluating child or\n            // descendant combinators, which is not what we want.\n            // In such cases, we work around the behavior by prefixing every selector in the\n            // list with an ID selector referencing the scope context.\n            // The technique has to be used as well when a leading combinator is used\n            // as such selectors are not recognized by querySelectorAll.\n            // Thanks to Andrew Dupont for this technique.\n            if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) {\n              // Expand context for sibling selectors\n              newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n\n              // We can use :scope instead of the ID hack if the browser\n              // supports it & if we're not changing the context.\n              // Support: IE 11+, Edge 17 - 18+\n              // IE/Edge sometimes throw a \"Permission denied\" error when\n              // strict-comparing two documents; shallow comparisons work.\n              // eslint-disable-next-line eqeqeq\n              if (newContext != context || !support.scope) {\n                // Capture the context ID, setting it first if necessary\n                if (nid = context.getAttribute(\"id\")) {\n                  nid = jQuery.escapeSelector(nid);\n                } else {\n                  context.setAttribute(\"id\", nid = expando);\n                }\n              }\n\n              // Prefix every selector in the list\n              groups = tokenize(selector);\n              i = groups.length;\n              while (i--) {\n                groups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" + toSelector(groups[i]);\n              }\n              newSelector = groups.join(\",\");\n            }\n            try {\n              push.apply(results, newContext.querySelectorAll(newSelector));\n              return results;\n            } catch (qsaError) {\n              nonnativeSelectorCache(selector, true);\n            } finally {\n              if (nid === expando) {\n                context.removeAttribute(\"id\");\n              }\n            }\n          }\n        }\n      }\n\n      // All others\n      return select(selector.replace(rtrimCSS, \"$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     */\n    function createCache() {\n      var keys = [];\n      function cache(key, value) {\n        // Use (key + \" \") to avoid collision with native prototype properties\n        // (see https://github.com/jquery/sizzle/issues/157)\n        if (keys.push(key + \" \") > Expr.cacheLength) {\n          // Only keep the most recent entries\n          delete cache[keys.shift()];\n        }\n        return cache[key + \" \"] = value;\n      }\n      return cache;\n    }\n\n    /**\n     * Mark a function for special use by jQuery selector module\n     * @param {Function} fn The function to mark\n     */\n    function markFunction(fn) {\n      fn[expando] = true;\n      return fn;\n    }\n\n    /**\n     * Support testing using an element\n     * @param {Function} fn Passed the created element and returns a boolean result\n     */\n    function assert(fn) {\n      var el = document.createElement(\"fieldset\");\n      try {\n        return !!fn(el);\n      } catch (e) {\n        return false;\n      } finally {\n        // Remove from its parent by default\n        if (el.parentNode) {\n          el.parentNode.removeChild(el);\n        }\n\n        // release memory in IE\n        el = null;\n      }\n    }\n\n    /**\n     * Returns a function to use in pseudos for input types\n     * @param {String} type\n     */\n    function createInputPseudo(type) {\n      return function (elem) {\n        return nodeName(elem, \"input\") && elem.type === type;\n      };\n    }\n\n    /**\n     * Returns a function to use in pseudos for buttons\n     * @param {String} type\n     */\n    function createButtonPseudo(type) {\n      return function (elem) {\n        return (nodeName(elem, \"input\") || nodeName(elem, \"button\")) && elem.type === type;\n      };\n    }\n\n    /**\n     * Returns a function to use in pseudos for :enabled/:disabled\n     * @param {Boolean} disabled true for :disabled; false for :enabled\n     */\n    function createDisabledPseudo(disabled) {\n      // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n      return function (elem) {\n        // Only certain elements can match :enabled or :disabled\n        // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n        // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n        if (\"form\" in elem) {\n          // Check for inherited disabledness on relevant non-disabled elements:\n          // * listed form-associated elements in a disabled fieldset\n          //   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n          //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n          // * option elements in a disabled optgroup\n          //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n          // All such elements have a \"form\" property.\n          if (elem.parentNode && elem.disabled === false) {\n            // Option elements defer to a parent optgroup if present\n            if (\"label\" in elem) {\n              if (\"label\" in elem.parentNode) {\n                return elem.parentNode.disabled === disabled;\n              } else {\n                return elem.disabled === disabled;\n              }\n            }\n\n            // Support: IE 6 - 11+\n            // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n            return elem.isDisabled === disabled ||\n            // Where there is no isDisabled, check manually\n            elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n          }\n          return elem.disabled === disabled;\n\n          // Try to winnow out elements that can't be disabled before trusting the disabled property.\n          // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n          // even exist on them, let alone have a boolean value.\n        } else if (\"label\" in elem) {\n          return elem.disabled === disabled;\n        }\n\n        // Remaining elements are neither :enabled nor :disabled\n        return false;\n      };\n    }\n\n    /**\n     * Returns a function to use in pseudos for positionals\n     * @param {Function} fn\n     */\n    function createPositionalPseudo(fn) {\n      return markFunction(function (argument) {\n        argument = +argument;\n        return markFunction(function (seed, matches) {\n          var j,\n            matchIndexes = fn([], seed.length, argument),\n            i = matchIndexes.length;\n\n          // Match elements found at the specified indexes\n          while (i--) {\n            if (seed[j = matchIndexes[i]]) {\n              seed[j] = !(matches[j] = seed[j]);\n            }\n          }\n        });\n      });\n    }\n\n    /**\n     * Checks a node for validity as a jQuery selector context\n     * @param {Element|Object=} context\n     * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n     */\n    function testContext(context) {\n      return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n    }\n\n    /**\n     * Sets document-related variables once based on the current document\n     * @param {Element|Object} [node] An element or document object to use to set the document\n     * @returns {Object} Returns the current document\n     */\n    function setDocument(node) {\n      var subWindow,\n        doc = node ? node.ownerDocument || node : preferredDoc;\n\n      // Return early if doc is invalid or already selected\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n      if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n        return document;\n      }\n\n      // Update global variables\n      document = doc;\n      documentElement = document.documentElement;\n      documentIsHTML = !jQuery.isXMLDoc(document);\n\n      // Support: iOS 7 only, IE 9 - 11+\n      // Older browsers didn't support unprefixed `matches`.\n      matches = documentElement.matches || documentElement.webkitMatchesSelector || documentElement.msMatchesSelector;\n\n      // Support: IE 9 - 11+, Edge 12 - 18+\n      // Accessing iframe documents after unload throws \"permission denied\" errors\n      // (see trac-13936).\n      // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n      // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n      if (documentElement.msMatchesSelector &&\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n      preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n        // Support: IE 9 - 11+, Edge 12 - 18+\n        subWindow.addEventListener(\"unload\", unloadHandler);\n      }\n\n      // Support: IE <10\n      // Check if getElementById returns elements by name\n      // The broken getElementById methods don't pick up programmatically-set names,\n      // so use a roundabout getElementsByName test\n      support.getById = assert(function (el) {\n        documentElement.appendChild(el).id = jQuery.expando;\n        return !document.getElementsByName || !document.getElementsByName(jQuery.expando).length;\n      });\n\n      // Support: IE 9 only\n      // Check to see if it's possible to do matchesSelector\n      // on a disconnected node.\n      support.disconnectedMatch = assert(function (el) {\n        return matches.call(el, \"*\");\n      });\n\n      // Support: IE 9 - 11+, Edge 12 - 18+\n      // IE/Edge don't support the :scope pseudo-class.\n      support.scope = assert(function () {\n        return document.querySelectorAll(\":scope\");\n      });\n\n      // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n      // Make sure the `:has()` argument is parsed unforgivingly.\n      // We include `*` in the test to detect buggy implementations that are\n      // _selectively_ forgiving (specifically when the list includes at least\n      // one valid selector).\n      // Note that we treat complete lack of support for `:has()` as if it were\n      // spec-compliant support, which is fine because use of `:has()` in such\n      // environments will fail in the qSA path and fall back to jQuery traversal\n      // anyway.\n      support.cssHas = assert(function () {\n        try {\n          document.querySelector(\":has(*,:jqfake)\");\n          return false;\n        } catch (e) {\n          return true;\n        }\n      });\n\n      // ID filter and find\n      if (support.getById) {\n        Expr.filter.ID = function (id) {\n          var attrId = id.replace(runescape, funescape);\n          return function (elem) {\n            return elem.getAttribute(\"id\") === attrId;\n          };\n        };\n        Expr.find.ID = function (id, context) {\n          if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n            var elem = context.getElementById(id);\n            return elem ? [elem] : [];\n          }\n        };\n      } else {\n        Expr.filter.ID = function (id) {\n          var attrId = id.replace(runescape, funescape);\n          return function (elem) {\n            var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n            return node && node.value === attrId;\n          };\n        };\n\n        // Support: IE 6 - 7 only\n        // getElementById is not reliable as a find shortcut\n        Expr.find.ID = function (id, context) {\n          if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n            var node,\n              i,\n              elems,\n              elem = context.getElementById(id);\n            if (elem) {\n              // Verify the id attribute\n              node = elem.getAttributeNode(\"id\");\n              if (node && node.value === id) {\n                return [elem];\n              }\n\n              // Fall back on getElementsByName\n              elems = context.getElementsByName(id);\n              i = 0;\n              while (elem = elems[i++]) {\n                node = elem.getAttributeNode(\"id\");\n                if (node && node.value === id) {\n                  return [elem];\n                }\n              }\n            }\n            return [];\n          }\n        };\n      }\n\n      // Tag\n      Expr.find.TAG = function (tag, context) {\n        if (typeof context.getElementsByTagName !== \"undefined\") {\n          return context.getElementsByTagName(tag);\n\n          // DocumentFragment nodes don't have gEBTN\n        } else {\n          return context.querySelectorAll(tag);\n        }\n      };\n\n      // Class\n      Expr.find.CLASS = function (className, context) {\n        if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n          return context.getElementsByClassName(className);\n        }\n      };\n\n      /* QSA/matchesSelector\n      ---------------------------------------------------------------------- */\n\n      // QSA and matchesSelector support\n\n      rbuggyQSA = [];\n\n      // Build QSA regex\n      // Regex strategy adopted from Diego Perini\n      assert(function (el) {\n        var input;\n        documentElement.appendChild(el).innerHTML = \"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" + \"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" + \"<option selected=''></option></select>\";\n\n        // Support: iOS <=7 - 8 only\n        // Boolean attributes and \"value\" are not treated correctly in some XML documents\n        if (!el.querySelectorAll(\"[selected]\").length) {\n          rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n        }\n\n        // Support: iOS <=7 - 8 only\n        if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n          rbuggyQSA.push(\"~=\");\n        }\n\n        // Support: iOS 8 only\n        // https://bugs.webkit.org/show_bug.cgi?id=136851\n        // In-page `selector#id sibling-combinator selector` fails\n        if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n          rbuggyQSA.push(\".#.+[+~]\");\n        }\n\n        // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n        // In some of the document kinds, these selectors wouldn't work natively.\n        // This is probably OK but for backwards compatibility we want to maintain\n        // handling them through jQuery traversal in jQuery 3.x.\n        if (!el.querySelectorAll(\":checked\").length) {\n          rbuggyQSA.push(\":checked\");\n        }\n\n        // Support: Windows 8 Native Apps\n        // The type and name attributes are restricted during .innerHTML assignment\n        input = document.createElement(\"input\");\n        input.setAttribute(\"type\", \"hidden\");\n        el.appendChild(input).setAttribute(\"name\", \"D\");\n\n        // Support: IE 9 - 11+\n        // IE's :disabled selector does not pick up the children of disabled fieldsets\n        // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n        // In some of the document kinds, these selectors wouldn't work natively.\n        // This is probably OK but for backwards compatibility we want to maintain\n        // handling them through jQuery traversal in jQuery 3.x.\n        documentElement.appendChild(el).disabled = true;\n        if (el.querySelectorAll(\":disabled\").length !== 2) {\n          rbuggyQSA.push(\":enabled\", \":disabled\");\n        }\n\n        // Support: IE 11+, Edge 15 - 18+\n        // IE 11/Edge don't find elements on a `[name='']` query in some cases.\n        // Adding a temporary attribute to the document before the selection works\n        // around the issue.\n        // Interestingly, IE 10 & older don't seem to have the issue.\n        input = document.createElement(\"input\");\n        input.setAttribute(\"name\", \"\");\n        el.appendChild(input);\n        if (!el.querySelectorAll(\"[name='']\").length) {\n          rbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" + whitespace + \"*(?:''|\\\"\\\")\");\n        }\n      });\n      if (!support.cssHas) {\n        // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n        // Our regular `try-catch` mechanism fails to detect natively-unsupported\n        // pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n        // in browsers that parse the `:has()` argument as a forgiving selector list.\n        // https://drafts.csswg.org/selectors/#relational now requires the argument\n        // to be parsed unforgivingly, but browsers have not yet fully adjusted.\n        rbuggyQSA.push(\":has\");\n      }\n      rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n      /* Sorting\n      ---------------------------------------------------------------------- */\n\n      // Document order sorting\n      sortOrder = function (a, b) {\n        // Flag for duplicate removal\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        }\n\n        // Sort on method existence if only one input has compareDocumentPosition\n        var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n        if (compare) {\n          return compare;\n        }\n\n        // Calculate position if both inputs belong to the same document\n        // Support: IE 11+, Edge 17 - 18+\n        // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n        // two documents; shallow comparisons work.\n        // eslint-disable-next-line eqeqeq\n        compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) :\n        // Otherwise we know they are disconnected\n        1;\n\n        // Disconnected nodes\n        if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n          // Choose the first element that is related to our preferred document\n          // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n          // eslint-disable-next-line eqeqeq\n          if (a === document || a.ownerDocument == preferredDoc && find.contains(preferredDoc, a)) {\n            return -1;\n          }\n\n          // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n          // eslint-disable-next-line eqeqeq\n          if (b === document || b.ownerDocument == preferredDoc && find.contains(preferredDoc, b)) {\n            return 1;\n          }\n\n          // Maintain original order\n          return sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0;\n        }\n        return compare & 4 ? -1 : 1;\n      };\n      return document;\n    }\n    find.matches = function (expr, elements) {\n      return find(expr, null, null, elements);\n    };\n    find.matchesSelector = function (elem, expr) {\n      setDocument(elem);\n      if (documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n        try {\n          var ret = matches.call(elem, expr);\n\n          // IE 9's matchesSelector returns false on disconnected nodes\n          if (ret || support.disconnectedMatch ||\n          // As well, disconnected nodes are said to be in a document\n          // fragment in IE 9\n          elem.document && elem.document.nodeType !== 11) {\n            return ret;\n          }\n        } catch (e) {\n          nonnativeSelectorCache(expr, true);\n        }\n      }\n      return find(expr, document, null, [elem]).length > 0;\n    };\n    find.contains = function (context, elem) {\n      // Set document vars if needed\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n      if ((context.ownerDocument || context) != document) {\n        setDocument(context);\n      }\n      return jQuery.contains(context, elem);\n    };\n    find.attr = function (elem, name) {\n      // Set document vars if needed\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n      if ((elem.ownerDocument || elem) != document) {\n        setDocument(elem);\n      }\n      var fn = Expr.attrHandle[name.toLowerCase()],\n        // Don't get fooled by Object.prototype properties (see trac-13807)\n        val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n      if (val !== undefined) {\n        return val;\n      }\n      return elem.getAttribute(name);\n    };\n    find.error = function (msg) {\n      throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n    };\n\n    /**\n     * Document sorting and removing duplicates\n     * @param {ArrayLike} results\n     */\n    jQuery.uniqueSort = function (results) {\n      var elem,\n        duplicates = [],\n        j = 0,\n        i = 0;\n\n      // Unless we *know* we can detect duplicates, assume their presence\n      //\n      // Support: Android <=4.0+\n      // Testing for detecting duplicates is unpredictable so instead assume we can't\n      // depend on duplicate detection in all browsers without a stable sort.\n      hasDuplicate = !support.sortStable;\n      sortInput = !support.sortStable && slice.call(results, 0);\n      sort.call(results, sortOrder);\n      if (hasDuplicate) {\n        while (elem = results[i++]) {\n          if (elem === results[i]) {\n            j = duplicates.push(i);\n          }\n        }\n        while (j--) {\n          splice.call(results, duplicates[j], 1);\n        }\n      }\n\n      // Clear input after sorting to release objects\n      // See https://github.com/jquery/sizzle/pull/225\n      sortInput = null;\n      return results;\n    };\n    jQuery.fn.uniqueSort = function () {\n      return this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n    };\n    Expr = jQuery.expr = {\n      // Can be adjusted by the user\n      cacheLength: 50,\n      createPseudo: markFunction,\n      match: matchExpr,\n      attrHandle: {},\n      find: {},\n      relative: {\n        \">\": {\n          dir: \"parentNode\",\n          first: true\n        },\n        \" \": {\n          dir: \"parentNode\"\n        },\n        \"+\": {\n          dir: \"previousSibling\",\n          first: true\n        },\n        \"~\": {\n          dir: \"previousSibling\"\n        }\n      },\n      preFilter: {\n        ATTR: function (match) {\n          match[1] = match[1].replace(runescape, funescape);\n\n          // Move the given value to match[3] whether quoted or unquoted\n          match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n          if (match[2] === \"~=\") {\n            match[3] = \" \" + match[3] + \" \";\n          }\n          return match.slice(0, 4);\n        },\n        CHILD: function (match) {\n          /* matches from matchExpr[\"CHILD\"]\n          \t1 type (only|nth|...)\n          \t2 what (child|of-type)\n          \t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n          \t4 xn-component of xn+y argument ([+-]?\\d*n|)\n          \t5 sign of xn-component\n          \t6 x of xn-component\n          \t7 sign of y-component\n          \t8 y of y-component\n          */\n          match[1] = match[1].toLowerCase();\n          if (match[1].slice(0, 3) === \"nth\") {\n            // nth-* requires argument\n            if (!match[3]) {\n              find.error(match[0]);\n            }\n\n            // numeric x and y parameters for Expr.filter.CHILD\n            // remember that false/true cast respectively to 0/1\n            match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n            match[5] = +(match[7] + match[8] || match[3] === \"odd\");\n\n            // other types prohibit arguments\n          } else if (match[3]) {\n            find.error(match[0]);\n          }\n          return match;\n        },\n        PSEUDO: function (match) {\n          var excess,\n            unquoted = !match[6] && match[2];\n          if (matchExpr.CHILD.test(match[0])) {\n            return null;\n          }\n\n          // Accept quoted arguments as-is\n          if (match[3]) {\n            match[2] = match[4] || match[5] || \"\";\n\n            // Strip excess characters from unquoted arguments\n          } else if (unquoted && rpseudo.test(unquoted) && (\n          // Get excess from tokenize (recursively)\n          excess = tokenize(unquoted, true)) && (\n          // advance to the next closing parenthesis\n          excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n            // excess is a negative index\n            match[0] = match[0].slice(0, excess);\n            match[2] = unquoted.slice(0, excess);\n          }\n\n          // Return only captures needed by the pseudo filter method (type and argument)\n          return match.slice(0, 3);\n        }\n      },\n      filter: {\n        TAG: function (nodeNameSelector) {\n          var expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n          return nodeNameSelector === \"*\" ? function () {\n            return true;\n          } : function (elem) {\n            return nodeName(elem, expectedNodeName);\n          };\n        },\n        CLASS: function (className) {\n          var pattern = classCache[className + \" \"];\n          return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className, function (elem) {\n            return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n          });\n        },\n        ATTR: function (name, operator, check) {\n          return function (elem) {\n            var result = find.attr(elem, name);\n            if (result == null) {\n              return operator === \"!=\";\n            }\n            if (!operator) {\n              return true;\n            }\n            result += \"\";\n            if (operator === \"=\") {\n              return result === check;\n            }\n            if (operator === \"!=\") {\n              return result !== check;\n            }\n            if (operator === \"^=\") {\n              return check && result.indexOf(check) === 0;\n            }\n            if (operator === \"*=\") {\n              return check && result.indexOf(check) > -1;\n            }\n            if (operator === \"$=\") {\n              return check && result.slice(-check.length) === check;\n            }\n            if (operator === \"~=\") {\n              return (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1;\n            }\n            if (operator === \"|=\") {\n              return result === check || result.slice(0, check.length + 1) === check + \"-\";\n            }\n            return false;\n          };\n        },\n        CHILD: function (type, what, _argument, first, last) {\n          var simple = type.slice(0, 3) !== \"nth\",\n            forward = type.slice(-4) !== \"last\",\n            ofType = what === \"of-type\";\n          return first === 1 && last === 0 ?\n          // Shortcut for :nth-*(n)\n          function (elem) {\n            return !!elem.parentNode;\n          } : function (elem, _context, xml) {\n            var cache,\n              outerCache,\n              node,\n              nodeIndex,\n              start,\n              dir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n              parent = elem.parentNode,\n              name = ofType && elem.nodeName.toLowerCase(),\n              useCache = !xml && !ofType,\n              diff = false;\n            if (parent) {\n              // :(first|last|only)-(child|of-type)\n              if (simple) {\n                while (dir) {\n                  node = elem;\n                  while (node = node[dir]) {\n                    if (ofType ? nodeName(node, name) : node.nodeType === 1) {\n                      return false;\n                    }\n                  }\n\n                  // Reverse direction for :only-* (if we haven't yet done so)\n                  start = dir = type === \"only\" && !start && \"nextSibling\";\n                }\n                return true;\n              }\n              start = [forward ? parent.firstChild : parent.lastChild];\n\n              // non-xml :nth-child(...) stores cache data on `parent`\n              if (forward && useCache) {\n                // Seek `elem` from a previously-cached index\n                outerCache = parent[expando] || (parent[expando] = {});\n                cache = outerCache[type] || [];\n                nodeIndex = cache[0] === dirruns && cache[1];\n                diff = nodeIndex && cache[2];\n                node = nodeIndex && parent.childNodes[nodeIndex];\n                while (node = ++nodeIndex && node && node[dir] || (\n                // Fallback to seeking `elem` from the start\n                diff = nodeIndex = 0) || start.pop()) {\n                  // When found, cache indexes on `parent` and break\n                  if (node.nodeType === 1 && ++diff && node === elem) {\n                    outerCache[type] = [dirruns, nodeIndex, diff];\n                    break;\n                  }\n                }\n              } else {\n                // Use previously-cached element index if available\n                if (useCache) {\n                  outerCache = elem[expando] || (elem[expando] = {});\n                  cache = outerCache[type] || [];\n                  nodeIndex = cache[0] === dirruns && cache[1];\n                  diff = nodeIndex;\n                }\n\n                // xml :nth-child(...)\n                // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n                if (diff === false) {\n                  // Use the same loop as above to seek `elem` from the start\n                  while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                    if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) {\n                      // Cache the index of each encountered element\n                      if (useCache) {\n                        outerCache = node[expando] || (node[expando] = {});\n                        outerCache[type] = [dirruns, diff];\n                      }\n                      if (node === elem) {\n                        break;\n                      }\n                    }\n                  }\n                }\n              }\n\n              // Incorporate the offset, then check against cycle size\n              diff -= last;\n              return diff === first || diff % first === 0 && diff / first >= 0;\n            }\n          };\n        },\n        PSEUDO: function (pseudo, argument) {\n          // pseudo-class names are case-insensitive\n          // https://www.w3.org/TR/selectors/#pseudo-classes\n          // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n          // Remember that setFilters inherits from pseudos\n          var args,\n            fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || find.error(\"unsupported pseudo: \" + pseudo);\n\n          // The user may use createPseudo to indicate that\n          // arguments are needed to create the filter function\n          // just as jQuery does\n          if (fn[expando]) {\n            return fn(argument);\n          }\n\n          // But maintain support for old signatures\n          if (fn.length > 1) {\n            args = [pseudo, pseudo, \"\", argument];\n            return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n              var idx,\n                matched = fn(seed, argument),\n                i = matched.length;\n              while (i--) {\n                idx = indexOf.call(seed, matched[i]);\n                seed[idx] = !(matches[idx] = matched[i]);\n              }\n            }) : function (elem) {\n              return fn(elem, 0, args);\n            };\n          }\n          return fn;\n        }\n      },\n      pseudos: {\n        // Potentially complex pseudos\n        not: markFunction(function (selector) {\n          // Trim the selector passed to compile\n          // to avoid treating leading and trailing\n          // spaces as combinators\n          var input = [],\n            results = [],\n            matcher = compile(selector.replace(rtrimCSS, \"$1\"));\n          return matcher[expando] ? markFunction(function (seed, matches, _context, xml) {\n            var elem,\n              unmatched = matcher(seed, null, xml, []),\n              i = seed.length;\n\n            // Match elements unmatched by `matcher`\n            while (i--) {\n              if (elem = unmatched[i]) {\n                seed[i] = !(matches[i] = elem);\n              }\n            }\n          }) : function (elem, _context, xml) {\n            input[0] = elem;\n            matcher(input, null, xml, results);\n\n            // Don't keep the element\n            // (see https://github.com/jquery/sizzle/issues/299)\n            input[0] = null;\n            return !results.pop();\n          };\n        }),\n        has: markFunction(function (selector) {\n          return function (elem) {\n            return find(selector, elem).length > 0;\n          };\n        }),\n        contains: markFunction(function (text) {\n          text = text.replace(runescape, funescape);\n          return function (elem) {\n            return (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n          };\n        }),\n        // \"Whether an element is represented by a :lang() selector\n        // is based solely on the element's language value\n        // being equal to the identifier C,\n        // or beginning with the identifier C immediately followed by \"-\".\n        // The matching of C against the element's language value is performed case-insensitively.\n        // The identifier C does not have to be a valid language name.\"\n        // https://www.w3.org/TR/selectors/#lang-pseudo\n        lang: markFunction(function (lang) {\n          // lang value must be a valid identifier\n          if (!ridentifier.test(lang || \"\")) {\n            find.error(\"unsupported lang: \" + lang);\n          }\n          lang = lang.replace(runescape, funescape).toLowerCase();\n          return function (elem) {\n            var elemLang;\n            do {\n              if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n                elemLang = elemLang.toLowerCase();\n                return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n              }\n            } while ((elem = elem.parentNode) && elem.nodeType === 1);\n            return false;\n          };\n        }),\n        // Miscellaneous\n        target: function (elem) {\n          var hash = window.location && window.location.hash;\n          return hash && hash.slice(1) === elem.id;\n        },\n        root: function (elem) {\n          return elem === documentElement;\n        },\n        focus: function (elem) {\n          return elem === safeActiveElement() && document.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex);\n        },\n        // Boolean properties\n        enabled: createDisabledPseudo(false),\n        disabled: createDisabledPseudo(true),\n        checked: function (elem) {\n          // In CSS3, :checked should return both checked and selected elements\n          // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n          return nodeName(elem, \"input\") && !!elem.checked || nodeName(elem, \"option\") && !!elem.selected;\n        },\n        selected: function (elem) {\n          // Support: IE <=11+\n          // Accessing the selectedIndex property\n          // forces the browser to treat the default option as\n          // selected when in an optgroup.\n          if (elem.parentNode) {\n            // eslint-disable-next-line no-unused-expressions\n            elem.parentNode.selectedIndex;\n          }\n          return elem.selected === true;\n        },\n        // Contents\n        empty: function (elem) {\n          // https://www.w3.org/TR/selectors/#empty-pseudo\n          // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n          //   but not by others (comment: 8; processing instruction: 7; etc.)\n          // nodeType < 6 works because attributes (2) do not appear as children\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            if (elem.nodeType < 6) {\n              return false;\n            }\n          }\n          return true;\n        },\n        parent: function (elem) {\n          return !Expr.pseudos.empty(elem);\n        },\n        // Element/input types\n        header: function (elem) {\n          return rheader.test(elem.nodeName);\n        },\n        input: function (elem) {\n          return rinputs.test(elem.nodeName);\n        },\n        button: function (elem) {\n          return nodeName(elem, \"input\") && elem.type === \"button\" || nodeName(elem, \"button\");\n        },\n        text: function (elem) {\n          var attr;\n          return nodeName(elem, \"input\") && elem.type === \"text\" && (\n          // Support: IE <10 only\n          // New HTML5 attribute values (e.g., \"search\") appear\n          // with elem.type === \"text\"\n          (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n        },\n        // Position-in-collection\n        first: createPositionalPseudo(function () {\n          return [0];\n        }),\n        last: createPositionalPseudo(function (_matchIndexes, length) {\n          return [length - 1];\n        }),\n        eq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n          return [argument < 0 ? argument + length : argument];\n        }),\n        even: createPositionalPseudo(function (matchIndexes, length) {\n          var i = 0;\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        }),\n        odd: createPositionalPseudo(function (matchIndexes, length) {\n          var i = 1;\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        }),\n        lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i;\n          if (argument < 0) {\n            i = argument + length;\n          } else if (argument > length) {\n            i = length;\n          } else {\n            i = argument;\n          }\n          for (; --i >= 0;) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        }),\n        gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument;\n          for (; ++i < length;) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        })\n      }\n    };\n    Expr.pseudos.nth = Expr.pseudos.eq;\n\n    // Add button/input type pseudos\n    for (i in {\n      radio: true,\n      checkbox: true,\n      file: true,\n      password: true,\n      image: true\n    }) {\n      Expr.pseudos[i] = createInputPseudo(i);\n    }\n    for (i in {\n      submit: true,\n      reset: true\n    }) {\n      Expr.pseudos[i] = createButtonPseudo(i);\n    }\n\n    // Easy API for creating new setFilters\n    function setFilters() {}\n    setFilters.prototype = Expr.filters = Expr.pseudos;\n    Expr.setFilters = new setFilters();\n    function tokenize(selector, parseOnly) {\n      var matched,\n        match,\n        tokens,\n        type,\n        soFar,\n        groups,\n        preFilters,\n        cached = tokenCache[selector + \" \"];\n      if (cached) {\n        return parseOnly ? 0 : cached.slice(0);\n      }\n      soFar = selector;\n      groups = [];\n      preFilters = Expr.preFilter;\n      while (soFar) {\n        // Comma and first run\n        if (!matched || (match = rcomma.exec(soFar))) {\n          if (match) {\n            // Don't consume trailing commas as valid\n            soFar = soFar.slice(match[0].length) || soFar;\n          }\n          groups.push(tokens = []);\n        }\n        matched = false;\n\n        // Combinators\n        if (match = rleadingCombinator.exec(soFar)) {\n          matched = match.shift();\n          tokens.push({\n            value: matched,\n            // Cast descendant combinators to space\n            type: match[0].replace(rtrimCSS, \" \")\n          });\n          soFar = soFar.slice(matched.length);\n        }\n\n        // Filters\n        for (type in Expr.filter) {\n          if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n            matched = match.shift();\n            tokens.push({\n              value: matched,\n              type: type,\n              matches: match\n            });\n            soFar = soFar.slice(matched.length);\n          }\n        }\n        if (!matched) {\n          break;\n        }\n      }\n\n      // Return the length of the invalid excess\n      // if we're just parsing\n      // Otherwise, throw an error or return tokens\n      if (parseOnly) {\n        return soFar.length;\n      }\n      return soFar ? find.error(selector) :\n      // Cache the tokens\n      tokenCache(selector, groups).slice(0);\n    }\n    function toSelector(tokens) {\n      var i = 0,\n        len = tokens.length,\n        selector = \"\";\n      for (; i < len; i++) {\n        selector += tokens[i].value;\n      }\n      return selector;\n    }\n    function addCombinator(matcher, combinator, base) {\n      var dir = combinator.dir,\n        skip = combinator.next,\n        key = skip || dir,\n        checkNonElements = base && key === \"parentNode\",\n        doneName = done++;\n      return combinator.first ?\n      // Check against closest ancestor/preceding element\n      function (elem, context, xml) {\n        while (elem = elem[dir]) {\n          if (elem.nodeType === 1 || checkNonElements) {\n            return matcher(elem, context, xml);\n          }\n        }\n        return false;\n      } :\n      // Check against all ancestor/preceding elements\n      function (elem, context, xml) {\n        var oldCache,\n          outerCache,\n          newCache = [dirruns, doneName];\n\n        // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n        if (xml) {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              if (matcher(elem, context, xml)) {\n                return true;\n              }\n            }\n          }\n        } else {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              outerCache = elem[expando] || (elem[expando] = {});\n              if (skip && nodeName(elem, skip)) {\n                elem = elem[dir] || elem;\n              } else if ((oldCache = outerCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n                // Assign to newCache so results back-propagate to previous elements\n                return newCache[2] = oldCache[2];\n              } else {\n                // Reuse newcache so results back-propagate to previous elements\n                outerCache[key] = newCache;\n\n                // A match means we're done; a fail means we have to keep checking\n                if (newCache[2] = matcher(elem, context, xml)) {\n                  return true;\n                }\n              }\n            }\n          }\n        }\n        return false;\n      };\n    }\n    function elementMatcher(matchers) {\n      return matchers.length > 1 ? function (elem, context, xml) {\n        var i = matchers.length;\n        while (i--) {\n          if (!matchers[i](elem, context, xml)) {\n            return false;\n          }\n        }\n        return true;\n      } : matchers[0];\n    }\n    function multipleContexts(selector, contexts, results) {\n      var i = 0,\n        len = contexts.length;\n      for (; i < len; i++) {\n        find(selector, contexts[i], results);\n      }\n      return results;\n    }\n    function condense(unmatched, map, filter, context, xml) {\n      var elem,\n        newUnmatched = [],\n        i = 0,\n        len = unmatched.length,\n        mapped = map != null;\n      for (; i < len; i++) {\n        if (elem = unmatched[i]) {\n          if (!filter || filter(elem, context, xml)) {\n            newUnmatched.push(elem);\n            if (mapped) {\n              map.push(i);\n            }\n          }\n        }\n      }\n      return newUnmatched;\n    }\n    function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n      if (postFilter && !postFilter[expando]) {\n        postFilter = setMatcher(postFilter);\n      }\n      if (postFinder && !postFinder[expando]) {\n        postFinder = setMatcher(postFinder, postSelector);\n      }\n      return markFunction(function (seed, results, context, xml) {\n        var temp,\n          i,\n          elem,\n          matcherOut,\n          preMap = [],\n          postMap = [],\n          preexisting = results.length,\n          // Get initial elements from seed or context\n          elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [context] : context, []),\n          // Prefilter to get matcher input, preserving a map for seed-results synchronization\n          matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems;\n        if (matcher) {\n          // If we have a postFinder, or filtered seed, or non-seed postFilter\n          // or preexisting results,\n          matcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n          // ...intermediate processing is necessary\n          [] :\n          // ...otherwise use results directly\n          results;\n\n          // Find primary matches\n          matcher(matcherIn, matcherOut, context, xml);\n        } else {\n          matcherOut = matcherIn;\n        }\n\n        // Apply postFilter\n        if (postFilter) {\n          temp = condense(matcherOut, postMap);\n          postFilter(temp, [], context, xml);\n\n          // Un-match failing elements by moving them back to matcherIn\n          i = temp.length;\n          while (i--) {\n            if (elem = temp[i]) {\n              matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n            }\n          }\n        }\n        if (seed) {\n          if (postFinder || preFilter) {\n            if (postFinder) {\n              // Get the final matcherOut by condensing this intermediate into postFinder contexts\n              temp = [];\n              i = matcherOut.length;\n              while (i--) {\n                if (elem = matcherOut[i]) {\n                  // Restore matcherIn since elem is not yet a final match\n                  temp.push(matcherIn[i] = elem);\n                }\n              }\n              postFinder(null, matcherOut = [], temp, xml);\n            }\n\n            // Move matched elements from seed to results to keep them synchronized\n            i = matcherOut.length;\n            while (i--) {\n              if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n                seed[temp] = !(results[temp] = elem);\n              }\n            }\n          }\n\n          // Add elements to results, through postFinder if defined\n        } else {\n          matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n          if (postFinder) {\n            postFinder(null, results, matcherOut, xml);\n          } else {\n            push.apply(results, matcherOut);\n          }\n        }\n      });\n    }\n    function matcherFromTokens(tokens) {\n      var checkContext,\n        matcher,\n        j,\n        len = tokens.length,\n        leadingRelative = Expr.relative[tokens[0].type],\n        implicitRelative = leadingRelative || Expr.relative[\" \"],\n        i = leadingRelative ? 1 : 0,\n        // The foundational matcher ensures that elements are reachable from top-level context(s)\n        matchContext = addCombinator(function (elem) {\n          return elem === checkContext;\n        }, implicitRelative, true),\n        matchAnyContext = addCombinator(function (elem) {\n          return indexOf.call(checkContext, elem) > -1;\n        }, implicitRelative, true),\n        matchers = [function (elem, context, xml) {\n          // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n          // eslint-disable-next-line eqeqeq\n          var ret = !leadingRelative && (xml || context != outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n\n          // Avoid hanging onto element\n          // (see https://github.com/jquery/sizzle/issues/299)\n          checkContext = null;\n          return ret;\n        }];\n      for (; i < len; i++) {\n        if (matcher = Expr.relative[tokens[i].type]) {\n          matchers = [addCombinator(elementMatcher(matchers), matcher)];\n        } else {\n          matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n          // Return special upon seeing a positional matcher\n          if (matcher[expando]) {\n            // Find the next relative operator (if any) for proper handling\n            j = ++i;\n            for (; j < len; j++) {\n              if (Expr.relative[tokens[j].type]) {\n                break;\n              }\n            }\n            return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(\n            // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n            tokens.slice(0, i - 1).concat({\n              value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n            })).replace(rtrimCSS, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n          }\n          matchers.push(matcher);\n        }\n      }\n      return elementMatcher(matchers);\n    }\n    function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n      var bySet = setMatchers.length > 0,\n        byElement = elementMatchers.length > 0,\n        superMatcher = function (seed, context, xml, results, outermost) {\n          var elem,\n            j,\n            matcher,\n            matchedCount = 0,\n            i = \"0\",\n            unmatched = seed && [],\n            setMatched = [],\n            contextBackup = outermostContext,\n            // We must always have either seed elements or outermost context\n            elems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n            // Use integer dirruns iff this is the outermost matcher\n            dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,\n            len = elems.length;\n          if (outermost) {\n            // Support: IE 11+, Edge 17 - 18+\n            // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n            // two documents; shallow comparisons work.\n            // eslint-disable-next-line eqeqeq\n            outermostContext = context == document || context || outermost;\n          }\n\n          // Add elements passing elementMatchers directly to results\n          // Support: iOS <=7 - 9 only\n          // Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n          // elements by id. (see trac-14142)\n          for (; i !== len && (elem = elems[i]) != null; i++) {\n            if (byElement && elem) {\n              j = 0;\n\n              // Support: IE 11+, Edge 17 - 18+\n              // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n              // two documents; shallow comparisons work.\n              // eslint-disable-next-line eqeqeq\n              if (!context && elem.ownerDocument != document) {\n                setDocument(elem);\n                xml = !documentIsHTML;\n              }\n              while (matcher = elementMatchers[j++]) {\n                if (matcher(elem, context || document, xml)) {\n                  push.call(results, elem);\n                  break;\n                }\n              }\n              if (outermost) {\n                dirruns = dirrunsUnique;\n              }\n            }\n\n            // Track unmatched elements for set filters\n            if (bySet) {\n              // They will have gone through all possible matchers\n              if (elem = !matcher && elem) {\n                matchedCount--;\n              }\n\n              // Lengthen the array for every element, matched or not\n              if (seed) {\n                unmatched.push(elem);\n              }\n            }\n          }\n\n          // `i` is now the count of elements visited above, and adding it to `matchedCount`\n          // makes the latter nonnegative.\n          matchedCount += i;\n\n          // Apply set filters to unmatched elements\n          // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n          // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n          // no element matchers and no seed.\n          // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n          // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n          // numerically zero.\n          if (bySet && i !== matchedCount) {\n            j = 0;\n            while (matcher = setMatchers[j++]) {\n              matcher(unmatched, setMatched, context, xml);\n            }\n            if (seed) {\n              // Reintegrate element matches to eliminate the need for sorting\n              if (matchedCount > 0) {\n                while (i--) {\n                  if (!(unmatched[i] || setMatched[i])) {\n                    setMatched[i] = pop.call(results);\n                  }\n                }\n              }\n\n              // Discard index placeholder values to get only actual matches\n              setMatched = condense(setMatched);\n            }\n\n            // Add matches to results\n            push.apply(results, setMatched);\n\n            // Seedless set matches succeeding multiple successful matchers stipulate sorting\n            if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n              jQuery.uniqueSort(results);\n            }\n          }\n\n          // Override manipulation of globals by nested matchers\n          if (outermost) {\n            dirruns = dirrunsUnique;\n            outermostContext = contextBackup;\n          }\n          return unmatched;\n        };\n      return bySet ? markFunction(superMatcher) : superMatcher;\n    }\n    function compile(selector, match /* Internal Use Only */) {\n      var i,\n        setMatchers = [],\n        elementMatchers = [],\n        cached = compilerCache[selector + \" \"];\n      if (!cached) {\n        // Generate a function of recursive functions that can be used to check each element\n        if (!match) {\n          match = tokenize(selector);\n        }\n        i = match.length;\n        while (i--) {\n          cached = matcherFromTokens(match[i]);\n          if (cached[expando]) {\n            setMatchers.push(cached);\n          } else {\n            elementMatchers.push(cached);\n          }\n        }\n\n        // Cache the compiled function\n        cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n\n        // Save selector and tokenization\n        cached.selector = selector;\n      }\n      return cached;\n    }\n\n    /**\n     * A low-level selection function that works with jQuery's compiled\n     *  selector functions\n     * @param {String|Function} selector A selector or a pre-compiled\n     *  selector function built with jQuery selector compile\n     * @param {Element} context\n     * @param {Array} [results]\n     * @param {Array} [seed] A set of elements to match against\n     */\n    function select(selector, context, results, seed) {\n      var i,\n        tokens,\n        token,\n        type,\n        find,\n        compiled = typeof selector === \"function\" && selector,\n        match = !seed && tokenize(selector = compiled.selector || selector);\n      results = results || [];\n\n      // Try to minimize operations if there is only one selector in the list and no seed\n      // (the latter of which guarantees us context)\n      if (match.length === 1) {\n        // Reduce context if the leading compound selector is an ID\n        tokens = match[0] = match[0].slice(0);\n        if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n          context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\n          if (!context) {\n            return results;\n\n            // Precompiled matchers will still verify ancestry, so step up a level\n          } else if (compiled) {\n            context = context.parentNode;\n          }\n          selector = selector.slice(tokens.shift().value.length);\n        }\n\n        // Fetch a seed set for right-to-left matching\n        i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n        while (i--) {\n          token = tokens[i];\n\n          // Abort if we hit a combinator\n          if (Expr.relative[type = token.type]) {\n            break;\n          }\n          if (find = Expr.find[type]) {\n            // Search, expanding context for leading sibling combinators\n            if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n              // If seed is empty or no tokens remain, we can return early\n              tokens.splice(i, 1);\n              selector = seed.length && toSelector(tokens);\n              if (!selector) {\n                push.apply(results, seed);\n                return results;\n              }\n              break;\n            }\n          }\n        }\n      }\n\n      // Compile and execute a filtering function if one is not provided\n      // Provide `match` to avoid retokenization if we modified the selector above\n      (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n      return results;\n    }\n\n    // One-time assignments\n\n    // Support: Android <=4.0 - 4.1+\n    // Sort stability\n    support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n    // Initialize against the default document\n    setDocument();\n\n    // Support: Android <=4.0 - 4.1+\n    // Detached nodes confoundingly follow *each other*\n    support.sortDetached = assert(function (el) {\n      // Should return 1, but returns 4 (following)\n      return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n    });\n    jQuery.find = find;\n\n    // Deprecated\n    jQuery.expr[\":\"] = jQuery.expr.pseudos;\n    jQuery.unique = jQuery.uniqueSort;\n\n    // These have always been private, but they used to be documented as part of\n    // Sizzle so let's maintain them for now for backwards compatibility purposes.\n    find.compile = compile;\n    find.select = select;\n    find.setDocument = setDocument;\n    find.tokenize = tokenize;\n    find.escape = jQuery.escapeSelector;\n    find.getText = jQuery.text;\n    find.isXML = jQuery.isXMLDoc;\n    find.selectors = jQuery.expr;\n    find.support = jQuery.support;\n    find.uniqueSort = jQuery.uniqueSort;\n\n    /* eslint-enable */\n  })();\n\n  var dir = function (elem, dir, until) {\n    var matched = [],\n      truncate = until !== undefined;\n    while ((elem = elem[dir]) && elem.nodeType !== 9) {\n      if (elem.nodeType === 1) {\n        if (truncate && jQuery(elem).is(until)) {\n          break;\n        }\n        matched.push(elem);\n      }\n    }\n    return matched;\n  };\n  var siblings = function (n, elem) {\n    var matched = [];\n    for (; n; n = n.nextSibling) {\n      if (n.nodeType === 1 && n !== elem) {\n        matched.push(n);\n      }\n    }\n    return matched;\n  };\n  var rneedsContext = jQuery.expr.match.needsContext;\n  var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\n  // Implement the identical functionality for filter and not\n  function winnow(elements, qualifier, not) {\n    if (isFunction(qualifier)) {\n      return jQuery.grep(elements, function (elem, i) {\n        return !!qualifier.call(elem, i, elem) !== not;\n      });\n    }\n\n    // Single element\n    if (qualifier.nodeType) {\n      return jQuery.grep(elements, function (elem) {\n        return elem === qualifier !== not;\n      });\n    }\n\n    // Arraylike of elements (jQuery, arguments, Array)\n    if (typeof qualifier !== \"string\") {\n      return jQuery.grep(elements, function (elem) {\n        return indexOf.call(qualifier, elem) > -1 !== not;\n      });\n    }\n\n    // Filtered directly for both simple and complex selectors\n    return jQuery.filter(qualifier, elements, not);\n  }\n  jQuery.filter = function (expr, elems, not) {\n    var elem = elems[0];\n    if (not) {\n      expr = \":not(\" + expr + \")\";\n    }\n    if (elems.length === 1 && elem.nodeType === 1) {\n      return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n    }\n    return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n      return elem.nodeType === 1;\n    }));\n  };\n  jQuery.fn.extend({\n    find: function (selector) {\n      var i,\n        ret,\n        len = this.length,\n        self = this;\n      if (typeof selector !== \"string\") {\n        return this.pushStack(jQuery(selector).filter(function () {\n          for (i = 0; i < len; i++) {\n            if (jQuery.contains(self[i], this)) {\n              return true;\n            }\n          }\n        }));\n      }\n      ret = this.pushStack([]);\n      for (i = 0; i < len; i++) {\n        jQuery.find(selector, self[i], ret);\n      }\n      return len > 1 ? jQuery.uniqueSort(ret) : ret;\n    },\n    filter: function (selector) {\n      return this.pushStack(winnow(this, selector || [], false));\n    },\n    not: function (selector) {\n      return this.pushStack(winnow(this, selector || [], true));\n    },\n    is: function (selector) {\n      return !!winnow(this,\n      // If this is a positional/relative selector, check membership in the returned set\n      // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n      typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n    }\n  });\n\n  // Initialize a jQuery object\n\n  // A central reference to the root jQuery(document)\n  var rootjQuery,\n    // A simple way to check for HTML strings\n    // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n    // Strict HTML recognition (trac-11290: must start with <)\n    // Shortcut simple #id case for speed\n    rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n    init = jQuery.fn.init = function (selector, context, root) {\n      var match, elem;\n\n      // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n      if (!selector) {\n        return this;\n      }\n\n      // Method init() accepts an alternate rootjQuery\n      // so migrate can support jQuery.sub (gh-2101)\n      root = root || rootjQuery;\n\n      // Handle HTML strings\n      if (typeof selector === \"string\") {\n        if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n          // Assume that strings that start and end with <> are HTML and skip the regex check\n          match = [null, selector, null];\n        } else {\n          match = rquickExpr.exec(selector);\n        }\n\n        // Match html or make sure no context is specified for #id\n        if (match && (match[1] || !context)) {\n          // HANDLE: $(html) -> $(array)\n          if (match[1]) {\n            context = context instanceof jQuery ? context[0] : context;\n\n            // Option to run scripts is true for back-compat\n            // Intentionally let the error be thrown if parseHTML is not present\n            jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true));\n\n            // HANDLE: $(html, props)\n            if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n              for (match in context) {\n                // Properties of context are called as methods if possible\n                if (isFunction(this[match])) {\n                  this[match](context[match]);\n\n                  // ...and otherwise set as attributes\n                } else {\n                  this.attr(match, context[match]);\n                }\n              }\n            }\n            return this;\n\n            // HANDLE: $(#id)\n          } else {\n            elem = document.getElementById(match[2]);\n            if (elem) {\n              // Inject the element directly into the jQuery object\n              this[0] = elem;\n              this.length = 1;\n            }\n            return this;\n          }\n\n          // HANDLE: $(expr, $(...))\n        } else if (!context || context.jquery) {\n          return (context || root).find(selector);\n\n          // HANDLE: $(expr, context)\n          // (which is just equivalent to: $(context).find(expr)\n        } else {\n          return this.constructor(context).find(selector);\n        }\n\n        // HANDLE: $(DOMElement)\n      } else if (selector.nodeType) {\n        this[0] = selector;\n        this.length = 1;\n        return this;\n\n        // HANDLE: $(function)\n        // Shortcut for document ready\n      } else if (isFunction(selector)) {\n        return root.ready !== undefined ? root.ready(selector) :\n        // Execute immediately if ready is not present\n        selector(jQuery);\n      }\n      return jQuery.makeArray(selector, this);\n    };\n\n  // Give the init function the jQuery prototype for later instantiation\n  init.prototype = jQuery.fn;\n\n  // Initialize central reference\n  rootjQuery = jQuery(document);\n  var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n    // Methods guaranteed to produce a unique set when starting from a unique set\n    guaranteedUnique = {\n      children: true,\n      contents: true,\n      next: true,\n      prev: true\n    };\n  jQuery.fn.extend({\n    has: function (target) {\n      var targets = jQuery(target, this),\n        l = targets.length;\n      return this.filter(function () {\n        var i = 0;\n        for (; i < l; i++) {\n          if (jQuery.contains(this, targets[i])) {\n            return true;\n          }\n        }\n      });\n    },\n    closest: function (selectors, context) {\n      var cur,\n        i = 0,\n        l = this.length,\n        matched = [],\n        targets = typeof selectors !== \"string\" && jQuery(selectors);\n\n      // Positional selectors never match, since there's no _selection_ context\n      if (!rneedsContext.test(selectors)) {\n        for (; i < l; i++) {\n          for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n            // Always skip document fragments\n            if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 :\n            // Don't pass non-elements to jQuery#find\n            cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n              matched.push(cur);\n              break;\n            }\n          }\n        }\n      }\n      return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n    },\n    // Determine the position of an element within the set\n    index: function (elem) {\n      // No argument, return index in parent\n      if (!elem) {\n        return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n      }\n\n      // Index in selector\n      if (typeof elem === \"string\") {\n        return indexOf.call(jQuery(elem), this[0]);\n      }\n\n      // Locate the position of the desired element\n      return indexOf.call(this,\n      // If it receives a jQuery object, the first element is used\n      elem.jquery ? elem[0] : elem);\n    },\n    add: function (selector, context) {\n      return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n    },\n    addBack: function (selector) {\n      return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n    }\n  });\n  function sibling(cur, dir) {\n    while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n    return cur;\n  }\n  jQuery.each({\n    parent: function (elem) {\n      var parent = elem.parentNode;\n      return parent && parent.nodeType !== 11 ? parent : null;\n    },\n    parents: function (elem) {\n      return dir(elem, \"parentNode\");\n    },\n    parentsUntil: function (elem, _i, until) {\n      return dir(elem, \"parentNode\", until);\n    },\n    next: function (elem) {\n      return sibling(elem, \"nextSibling\");\n    },\n    prev: function (elem) {\n      return sibling(elem, \"previousSibling\");\n    },\n    nextAll: function (elem) {\n      return dir(elem, \"nextSibling\");\n    },\n    prevAll: function (elem) {\n      return dir(elem, \"previousSibling\");\n    },\n    nextUntil: function (elem, _i, until) {\n      return dir(elem, \"nextSibling\", until);\n    },\n    prevUntil: function (elem, _i, until) {\n      return dir(elem, \"previousSibling\", until);\n    },\n    siblings: function (elem) {\n      return siblings((elem.parentNode || {}).firstChild, elem);\n    },\n    children: function (elem) {\n      return siblings(elem.firstChild);\n    },\n    contents: function (elem) {\n      if (elem.contentDocument != null &&\n      // Support: IE 11+\n      // <object> elements with no `data` attribute has an object\n      // `contentDocument` with a `null` prototype.\n      getProto(elem.contentDocument)) {\n        return elem.contentDocument;\n      }\n\n      // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n      // Treat the template element as a regular one in browsers that\n      // don't support it.\n      if (nodeName(elem, \"template\")) {\n        elem = elem.content || elem;\n      }\n      return jQuery.merge([], elem.childNodes);\n    }\n  }, function (name, fn) {\n    jQuery.fn[name] = function (until, selector) {\n      var matched = jQuery.map(this, fn, until);\n      if (name.slice(-5) !== \"Until\") {\n        selector = until;\n      }\n      if (selector && typeof selector === \"string\") {\n        matched = jQuery.filter(selector, matched);\n      }\n      if (this.length > 1) {\n        // Remove duplicates\n        if (!guaranteedUnique[name]) {\n          jQuery.uniqueSort(matched);\n        }\n\n        // Reverse order for parents* and prev-derivatives\n        if (rparentsprev.test(name)) {\n          matched.reverse();\n        }\n      }\n      return this.pushStack(matched);\n    };\n  });\n  var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\n  // Convert String-formatted options into Object-formatted ones\n  function createOptions(options) {\n    var object = {};\n    jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n      object[flag] = true;\n    });\n    return 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   */\n  jQuery.Callbacks = function (options) {\n    // Convert options from String-formatted to Object-formatted if needed\n    // (we check in cache first)\n    options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n    var\n      // Flag to know if list is currently firing\n      firing,\n      // Last fire value for non-forgettable lists\n      memory,\n      // Flag to know if list was already fired\n      fired,\n      // Flag to prevent firing\n      locked,\n      // Actual callback list\n      list = [],\n      // Queue of execution data for repeatable lists\n      queue = [],\n      // Index of currently firing callback (modified by add/remove as needed)\n      firingIndex = -1,\n      // Fire callbacks\n      fire = function () {\n        // Enforce single-firing\n        locked = locked || options.once;\n\n        // Execute callbacks for all pending executions,\n        // respecting firingIndex overrides and runtime changes\n        fired = firing = true;\n        for (; queue.length; firingIndex = -1) {\n          memory = queue.shift();\n          while (++firingIndex < list.length) {\n            // Run callback and check for early termination\n            if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n              // Jump to end and forget the data so .add doesn't re-fire\n              firingIndex = list.length;\n              memory = false;\n            }\n          }\n        }\n\n        // Forget the data if we're done with it\n        if (!options.memory) {\n          memory = false;\n        }\n        firing = false;\n\n        // Clean up if we're done firing for good\n        if (locked) {\n          // Keep an empty list if we have data for future add calls\n          if (memory) {\n            list = [];\n\n            // Otherwise, this object is spent\n          } else {\n            list = \"\";\n          }\n        }\n      },\n      // Actual Callbacks object\n      self = {\n        // Add a callback or a collection of callbacks to the list\n        add: function () {\n          if (list) {\n            // If we have memory from a past run, we should fire after adding\n            if (memory && !firing) {\n              firingIndex = list.length - 1;\n              queue.push(memory);\n            }\n            (function add(args) {\n              jQuery.each(args, function (_, arg) {\n                if (isFunction(arg)) {\n                  if (!options.unique || !self.has(arg)) {\n                    list.push(arg);\n                  }\n                } else if (arg && arg.length && toType(arg) !== \"string\") {\n                  // Inspect recursively\n                  add(arg);\n                }\n              });\n            })(arguments);\n            if (memory && !firing) {\n              fire();\n            }\n          }\n          return this;\n        },\n        // Remove a callback from the list\n        remove: function () {\n          jQuery.each(arguments, function (_, arg) {\n            var index;\n            while ((index = jQuery.inArray(arg, list, index)) > -1) {\n              list.splice(index, 1);\n\n              // Handle firing indexes\n              if (index <= firingIndex) {\n                firingIndex--;\n              }\n            }\n          });\n          return this;\n        },\n        // Check if a given callback is in the list.\n        // If no argument is given, return whether or not list has callbacks attached.\n        has: function (fn) {\n          return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n        },\n        // Remove all callbacks from the list\n        empty: function () {\n          if (list) {\n            list = [];\n          }\n          return this;\n        },\n        // Disable .fire and .add\n        // Abort any current/pending executions\n        // Clear all callbacks and values\n        disable: function () {\n          locked = queue = [];\n          list = memory = \"\";\n          return this;\n        },\n        disabled: function () {\n          return !list;\n        },\n        // Disable .fire\n        // Also disable .add unless we have memory (since it would have no effect)\n        // Abort any pending executions\n        lock: function () {\n          locked = queue = [];\n          if (!memory && !firing) {\n            list = memory = \"\";\n          }\n          return this;\n        },\n        locked: function () {\n          return !!locked;\n        },\n        // Call all callbacks with the given context and arguments\n        fireWith: function (context, args) {\n          if (!locked) {\n            args = args || [];\n            args = [context, args.slice ? args.slice() : args];\n            queue.push(args);\n            if (!firing) {\n              fire();\n            }\n          }\n          return this;\n        },\n        // Call all the callbacks with the given arguments\n        fire: function () {\n          self.fireWith(this, arguments);\n          return this;\n        },\n        // To know if the callbacks have already been called at least once\n        fired: function () {\n          return !!fired;\n        }\n      };\n    return self;\n  };\n  function Identity(v) {\n    return v;\n  }\n  function Thrower(ex) {\n    throw ex;\n  }\n  function adoptValue(value, resolve, reject, noValue) {\n    var method;\n    try {\n      // Check for promise aspect first to privilege synchronous behavior\n      if (value && isFunction(method = value.promise)) {\n        method.call(value).done(resolve).fail(reject);\n\n        // Other thenables\n      } else if (value && isFunction(method = value.then)) {\n        method.call(value, resolve, reject);\n\n        // Other non-thenables\n      } else {\n        // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n        // * false: [ value ].slice( 0 ) => resolve( value )\n        // * true: [ value ].slice( 1 ) => resolve()\n        resolve.apply(undefined, [value].slice(noValue));\n      }\n\n      // For Promises/A+, convert exceptions into rejections\n      // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n      // Deferred#then to conditionally suppress rejection.\n    } catch (value) {\n      // Support: Android 4.0 only\n      // Strict mode functions invoked without .call/.apply get global-object context\n      reject.apply(undefined, [value]);\n    }\n  }\n  jQuery.extend({\n    Deferred: function (func) {\n      var tuples = [\n        // action, add listener, callbacks,\n        // ... .then handlers, argument index, [final state]\n        [\"notify\", \"progress\", jQuery.Callbacks(\"memory\"), jQuery.Callbacks(\"memory\"), 2], [\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 0, \"resolved\"], [\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 1, \"rejected\"]],\n        state = \"pending\",\n        promise = {\n          state: function () {\n            return state;\n          },\n          always: function () {\n            deferred.done(arguments).fail(arguments);\n            return this;\n          },\n          \"catch\": function (fn) {\n            return promise.then(null, fn);\n          },\n          // Keep pipe for back-compat\n          pipe: function /* fnDone, fnFail, fnProgress */\n          () {\n            var fns = arguments;\n            return jQuery.Deferred(function (newDefer) {\n              jQuery.each(tuples, function (_i, tuple) {\n                // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n                var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n                // deferred.progress(function() { bind to newDefer or newDefer.notify })\n                // deferred.done(function() { bind to newDefer or newDefer.resolve })\n                // deferred.fail(function() { bind to newDefer or newDefer.reject })\n                deferred[tuple[1]](function () {\n                  var returned = fn && fn.apply(this, arguments);\n                  if (returned && isFunction(returned.promise)) {\n                    returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n                  } else {\n                    newDefer[tuple[0] + \"With\"](this, fn ? [returned] : arguments);\n                  }\n                });\n              });\n              fns = null;\n            }).promise();\n          },\n          then: function (onFulfilled, onRejected, onProgress) {\n            var maxDepth = 0;\n            function resolve(depth, deferred, handler, special) {\n              return function () {\n                var that = this,\n                  args = arguments,\n                  mightThrow = function () {\n                    var returned, then;\n\n                    // Support: Promises/A+ section 2.3.3.3.3\n                    // https://promisesaplus.com/#point-59\n                    // Ignore double-resolution attempts\n                    if (depth < maxDepth) {\n                      return;\n                    }\n                    returned = handler.apply(that, args);\n\n                    // Support: Promises/A+ section 2.3.1\n                    // https://promisesaplus.com/#point-48\n                    if (returned === deferred.promise()) {\n                      throw new TypeError(\"Thenable self-resolution\");\n                    }\n\n                    // Support: Promises/A+ sections 2.3.3.1, 3.5\n                    // https://promisesaplus.com/#point-54\n                    // https://promisesaplus.com/#point-75\n                    // Retrieve `then` only once\n                    then = returned && (\n                    // Support: Promises/A+ section 2.3.4\n                    // https://promisesaplus.com/#point-64\n                    // Only check objects and functions for thenability\n                    typeof returned === \"object\" || typeof returned === \"function\") && returned.then;\n\n                    // Handle a returned thenable\n                    if (isFunction(then)) {\n                      // Special processors (notify) just wait for resolution\n                      if (special) {\n                        then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special));\n\n                        // Normal processors (resolve) also hook into progress\n                      } else {\n                        // ...and disregard older resolution values\n                        maxDepth++;\n                        then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n                      }\n\n                      // Handle all other returned values\n                    } else {\n                      // Only substitute handlers pass on context\n                      // and multiple values (non-spec behavior)\n                      if (handler !== Identity) {\n                        that = undefined;\n                        args = [returned];\n                      }\n\n                      // Process the value(s)\n                      // Default process is resolve\n                      (special || deferred.resolveWith)(that, args);\n                    }\n                  },\n                  // Only normal processors (resolve) catch and reject exceptions\n                  process = special ? mightThrow : function () {\n                    try {\n                      mightThrow();\n                    } catch (e) {\n                      if (jQuery.Deferred.exceptionHook) {\n                        jQuery.Deferred.exceptionHook(e, process.error);\n                      }\n\n                      // Support: Promises/A+ section 2.3.3.3.4.1\n                      // https://promisesaplus.com/#point-61\n                      // Ignore post-resolution exceptions\n                      if (depth + 1 >= maxDepth) {\n                        // Only substitute handlers pass on context\n                        // and multiple values (non-spec behavior)\n                        if (handler !== Thrower) {\n                          that = undefined;\n                          args = [e];\n                        }\n                        deferred.rejectWith(that, args);\n                      }\n                    }\n                  };\n\n                // Support: Promises/A+ section 2.3.3.3.1\n                // https://promisesaplus.com/#point-57\n                // Re-resolve promises immediately to dodge false rejection from\n                // subsequent errors\n                if (depth) {\n                  process();\n                } else {\n                  // Call an optional hook to record the error, in case of exception\n                  // since it's otherwise lost when execution goes async\n                  if (jQuery.Deferred.getErrorHook) {\n                    process.error = jQuery.Deferred.getErrorHook();\n\n                    // The deprecated alias of the above. While the name suggests\n                    // returning the stack, not an error instance, jQuery just passes\n                    // it directly to `console.warn` so both will work; an instance\n                    // just better cooperates with source maps.\n                  } else if (jQuery.Deferred.getStackHook) {\n                    process.error = jQuery.Deferred.getStackHook();\n                  }\n                  window.setTimeout(process);\n                }\n              };\n            }\n            return jQuery.Deferred(function (newDefer) {\n              // progress_handlers.add( ... )\n              tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith));\n\n              // fulfilled_handlers.add( ... )\n              tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity));\n\n              // rejected_handlers.add( ... )\n              tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n            }).promise();\n          },\n          // Get a promise for this deferred\n          // If obj is provided, the promise aspect is added to the object\n          promise: function (obj) {\n            return obj != null ? jQuery.extend(obj, promise) : promise;\n          }\n        },\n        deferred = {};\n\n      // Add list-specific methods\n      jQuery.each(tuples, function (i, tuple) {\n        var list = tuple[2],\n          stateString = tuple[5];\n\n        // promise.progress = list.add\n        // promise.done = list.add\n        // promise.fail = list.add\n        promise[tuple[1]] = list.add;\n\n        // Handle state\n        if (stateString) {\n          list.add(function () {\n            // state = \"resolved\" (i.e., fulfilled)\n            // state = \"rejected\"\n            state = stateString;\n          },\n          // rejected_callbacks.disable\n          // fulfilled_callbacks.disable\n          tuples[3 - i][2].disable,\n          // rejected_handlers.disable\n          // fulfilled_handlers.disable\n          tuples[3 - i][3].disable,\n          // progress_callbacks.lock\n          tuples[0][2].lock,\n          // progress_handlers.lock\n          tuples[0][3].lock);\n        }\n\n        // progress_handlers.fire\n        // fulfilled_handlers.fire\n        // rejected_handlers.fire\n        list.add(tuple[3].fire);\n\n        // deferred.notify = function() { deferred.notifyWith(...) }\n        // deferred.resolve = function() { deferred.resolveWith(...) }\n        // deferred.reject = function() { deferred.rejectWith(...) }\n        deferred[tuple[0]] = function () {\n          deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n          return this;\n        };\n\n        // deferred.notifyWith = list.fireWith\n        // deferred.resolveWith = list.fireWith\n        // deferred.rejectWith = list.fireWith\n        deferred[tuple[0] + \"With\"] = list.fireWith;\n      });\n\n      // Make the deferred a promise\n      promise.promise(deferred);\n\n      // Call given func if any\n      if (func) {\n        func.call(deferred, deferred);\n      }\n\n      // All done!\n      return deferred;\n    },\n    // Deferred helper\n    when: function (singleValue) {\n      var\n        // count of uncompleted subordinates\n        remaining = arguments.length,\n        // count of unprocessed arguments\n        i = remaining,\n        // subordinate fulfillment data\n        resolveContexts = Array(i),\n        resolveValues = slice.call(arguments),\n        // the primary Deferred\n        primary = jQuery.Deferred(),\n        // subordinate callback factory\n        updateFunc = function (i) {\n          return function (value) {\n            resolveContexts[i] = this;\n            resolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n            if (! --remaining) {\n              primary.resolveWith(resolveContexts, resolveValues);\n            }\n          };\n        };\n\n      // Single- and empty arguments are adopted like Promise.resolve\n      if (remaining <= 1) {\n        adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining);\n\n        // Use .then() to unwrap secondary thenables (cf. gh-3000)\n        if (primary.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n          return primary.then();\n        }\n      }\n\n      // Multiple arguments are aggregated like Promise.all array elements\n      while (i--) {\n        adoptValue(resolveValues[i], updateFunc(i), primary.reject);\n      }\n      return primary.promise();\n    }\n  });\n\n  // These usually indicate a programmer mistake during development,\n  // warn about them ASAP rather than swallowing them by default.\n  var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n  // If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n  // captured before the async barrier to get the original error cause\n  // which may otherwise be hidden.\n  jQuery.Deferred.exceptionHook = function (error, asyncError) {\n    // Support: IE 8 - 9 only\n    // Console exists when dev tools are open, which can happen at any time\n    if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n      window.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, asyncError);\n    }\n  };\n  jQuery.readyException = function (error) {\n    window.setTimeout(function () {\n      throw error;\n    });\n  };\n\n  // The deferred used on DOM ready\n  var readyList = jQuery.Deferred();\n  jQuery.fn.ready = function (fn) {\n    readyList.then(fn)\n\n    // Wrap jQuery.readyException in a function so that the lookup\n    // happens at the time of error handling instead of callback\n    // registration.\n    .catch(function (error) {\n      jQuery.readyException(error);\n    });\n    return this;\n  };\n  jQuery.extend({\n    // Is the DOM ready to be used? Set to true once it occurs.\n    isReady: false,\n    // A counter to track how many items to wait for before\n    // the ready event fires. See trac-6781\n    readyWait: 1,\n    // Handle when the DOM is ready\n    ready: function (wait) {\n      // Abort if there are pending holds or we're already ready\n      if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n        return;\n      }\n\n      // Remember that the DOM is ready\n      jQuery.isReady = true;\n\n      // If a normal DOM Ready event fired, decrement, and wait if need be\n      if (wait !== true && --jQuery.readyWait > 0) {\n        return;\n      }\n\n      // If there are functions bound, to execute\n      readyList.resolveWith(document, [jQuery]);\n    }\n  });\n  jQuery.ready.then = readyList.then;\n\n  // The ready event handler and self cleanup method\n  function completed() {\n    document.removeEventListener(\"DOMContentLoaded\", completed);\n    window.removeEventListener(\"load\", completed);\n    jQuery.ready();\n  }\n\n  // Catch cases where $(document).ready() is called\n  // after the browser event has already occurred.\n  // Support: IE <=9 - 10 only\n  // Older IE sometimes signals \"interactive\" too soon\n  if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n    // Handle it asynchronously to allow scripts the opportunity to delay ready\n    window.setTimeout(jQuery.ready);\n  } else {\n    // Use the handy event callback\n    document.addEventListener(\"DOMContentLoaded\", completed);\n\n    // A fallback to window.onload, that will always work\n    window.addEventListener(\"load\", completed);\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\n  var access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n    var i = 0,\n      len = elems.length,\n      bulk = key == null;\n\n    // Sets many values\n    if (toType(key) === \"object\") {\n      chainable = true;\n      for (i in key) {\n        access(elems, fn, i, key[i], true, emptyGet, raw);\n      }\n\n      // Sets one value\n    } else if (value !== undefined) {\n      chainable = true;\n      if (!isFunction(value)) {\n        raw = true;\n      }\n      if (bulk) {\n        // Bulk operations run against the entire set\n        if (raw) {\n          fn.call(elems, value);\n          fn = null;\n\n          // ...except when executing function values\n        } else {\n          bulk = fn;\n          fn = function (elem, _key, value) {\n            return bulk.call(jQuery(elem), value);\n          };\n        }\n      }\n      if (fn) {\n        for (; i < len; i++) {\n          fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n        }\n      }\n    }\n    if (chainable) {\n      return elems;\n    }\n\n    // Gets\n    if (bulk) {\n      return fn.call(elems);\n    }\n    return len ? fn(elems[0], key) : emptyGet;\n  };\n\n  // Matches dashed string for camelizing\n  var rmsPrefix = /^-ms-/,\n    rdashAlpha = /-([a-z])/g;\n\n  // Used by camelCase as callback to replace()\n  function fcamelCase(_all, letter) {\n    return letter.toUpperCase();\n  }\n\n  // Convert dashed to camelCase; used by the css and data modules\n  // Support: IE <=9 - 11, Edge 12 - 15\n  // Microsoft forgot to hump their vendor prefix (trac-9572)\n  function camelCase(string) {\n    return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n  }\n  var acceptData = function (owner) {\n    // Accepts only:\n    //  - Node\n    //    - Node.ELEMENT_NODE\n    //    - Node.DOCUMENT_NODE\n    //  - Object\n    //    - Any\n    return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n  };\n  function Data() {\n    this.expando = jQuery.expando + Data.uid++;\n  }\n  Data.uid = 1;\n  Data.prototype = {\n    cache: function (owner) {\n      // Check if the owner object already has a cache\n      var value = owner[this.expando];\n\n      // If not, create one\n      if (!value) {\n        value = {};\n\n        // We can accept data for non-element nodes in modern browsers,\n        // but we should not, see trac-8335.\n        // Always return an empty object.\n        if (acceptData(owner)) {\n          // If it is a node unlikely to be stringify-ed or looped over\n          // use plain assignment\n          if (owner.nodeType) {\n            owner[this.expando] = value;\n\n            // Otherwise secure it in a non-enumerable property\n            // configurable must be true to allow the property to be\n            // deleted when data is removed\n          } else {\n            Object.defineProperty(owner, this.expando, {\n              value: value,\n              configurable: true\n            });\n          }\n        }\n      }\n      return value;\n    },\n    set: function (owner, data, value) {\n      var prop,\n        cache = this.cache(owner);\n\n      // Handle: [ owner, key, value ] args\n      // Always use camelCase key (gh-2257)\n      if (typeof data === \"string\") {\n        cache[camelCase(data)] = value;\n\n        // Handle: [ owner, { properties } ] args\n      } else {\n        // Copy the properties one-by-one to the cache object\n        for (prop in data) {\n          cache[camelCase(prop)] = data[prop];\n        }\n      }\n      return cache;\n    },\n    get: function (owner, key) {\n      return key === undefined ? this.cache(owner) :\n      // Always use camelCase key (gh-2257)\n      owner[this.expando] && owner[this.expando][camelCase(key)];\n    },\n    access: function (owner, key, value) {\n      // In cases where either:\n      //\n      //   1. No key was specified\n      //   2. A string key was specified, but no value provided\n      //\n      // Take the \"read\" path and allow the get method to determine\n      // which value to return, respectively either:\n      //\n      //   1. The entire cache object\n      //   2. The data stored at the key\n      //\n      if (key === undefined || key && typeof key === \"string\" && value === undefined) {\n        return this.get(owner, key);\n      }\n\n      // When the key is not a string, or both a key and value\n      // are specified, set or extend (existing objects) with either:\n      //\n      //   1. An object of properties\n      //   2. A key and value\n      //\n      this.set(owner, key, value);\n\n      // Since the \"set\" path can have two possible entry points\n      // return the expected data based on which path was taken[*]\n      return value !== undefined ? value : key;\n    },\n    remove: function (owner, key) {\n      var i,\n        cache = owner[this.expando];\n      if (cache === undefined) {\n        return;\n      }\n      if (key !== undefined) {\n        // Support array or space separated string of keys\n        if (Array.isArray(key)) {\n          // If key is an array of keys...\n          // We always set camelCase keys, so remove that.\n          key = key.map(camelCase);\n        } else {\n          key = camelCase(key);\n\n          // If a key with the spaces exists, use it.\n          // Otherwise, create an array by matching non-whitespace\n          key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n        }\n        i = key.length;\n        while (i--) {\n          delete cache[key[i]];\n        }\n      }\n\n      // Remove the expando if there's no more data\n      if (key === undefined || jQuery.isEmptyObject(cache)) {\n        // Support: Chrome <=35 - 45\n        // Webkit & Blink performance suffers when deleting properties\n        // from DOM nodes, so set to undefined instead\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n        if (owner.nodeType) {\n          owner[this.expando] = undefined;\n        } else {\n          delete owner[this.expando];\n        }\n      }\n    },\n    hasData: function (owner) {\n      var cache = owner[this.expando];\n      return cache !== undefined && !jQuery.isEmptyObject(cache);\n    }\n  };\n  var dataPriv = new Data();\n  var dataUser = new Data();\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\n  var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n    rmultiDash = /[A-Z]/g;\n  function getData(data) {\n    if (data === \"true\") {\n      return true;\n    }\n    if (data === \"false\") {\n      return false;\n    }\n    if (data === \"null\") {\n      return null;\n    }\n\n    // Only convert to a number if it doesn't change the string\n    if (data === +data + \"\") {\n      return +data;\n    }\n    if (rbrace.test(data)) {\n      return JSON.parse(data);\n    }\n    return data;\n  }\n  function dataAttr(elem, key, data) {\n    var name;\n\n    // If nothing was found internally, try to fetch any\n    // data from the HTML5 data-* attribute\n    if (data === undefined && elem.nodeType === 1) {\n      name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n      data = elem.getAttribute(name);\n      if (typeof data === \"string\") {\n        try {\n          data = getData(data);\n        } catch (e) {}\n\n        // Make sure we set the data so it isn't changed later\n        dataUser.set(elem, key, data);\n      } else {\n        data = undefined;\n      }\n    }\n    return data;\n  }\n  jQuery.extend({\n    hasData: function (elem) {\n      return dataUser.hasData(elem) || dataPriv.hasData(elem);\n    },\n    data: function (elem, name, data) {\n      return dataUser.access(elem, name, data);\n    },\n    removeData: function (elem, name) {\n      dataUser.remove(elem, name);\n    },\n    // TODO: Now that all calls to _data and _removeData have been replaced\n    // with direct calls to dataPriv methods, these can be deprecated.\n    _data: function (elem, name, data) {\n      return dataPriv.access(elem, name, data);\n    },\n    _removeData: function (elem, name) {\n      dataPriv.remove(elem, name);\n    }\n  });\n  jQuery.fn.extend({\n    data: function (key, value) {\n      var i,\n        name,\n        data,\n        elem = this[0],\n        attrs = elem && elem.attributes;\n\n      // Gets all values\n      if (key === undefined) {\n        if (this.length) {\n          data = dataUser.get(elem);\n          if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n            i = attrs.length;\n            while (i--) {\n              // Support: IE 11 only\n              // The attrs elements can be null (trac-14894)\n              if (attrs[i]) {\n                name = attrs[i].name;\n                if (name.indexOf(\"data-\") === 0) {\n                  name = camelCase(name.slice(5));\n                  dataAttr(elem, name, data[name]);\n                }\n              }\n            }\n            dataPriv.set(elem, \"hasDataAttrs\", true);\n          }\n        }\n        return data;\n      }\n\n      // Sets multiple values\n      if (typeof key === \"object\") {\n        return this.each(function () {\n          dataUser.set(this, key);\n        });\n      }\n      return access(this, function (value) {\n        var data;\n\n        // The calling jQuery object (element matches) is not empty\n        // (and therefore has an element appears at this[ 0 ]) and the\n        // `value` parameter was not undefined. An empty jQuery object\n        // will result in `undefined` for elem = this[ 0 ] which will\n        // throw an exception if an attempt to read a data cache is made.\n        if (elem && value === undefined) {\n          // Attempt to get data from the cache\n          // The key will always be camelCased in Data\n          data = dataUser.get(elem, key);\n          if (data !== undefined) {\n            return data;\n          }\n\n          // Attempt to \"discover\" the data in\n          // HTML5 custom data-* attrs\n          data = dataAttr(elem, key);\n          if (data !== undefined) {\n            return data;\n          }\n\n          // We tried really hard, but the data doesn't exist.\n          return;\n        }\n\n        // Set the data...\n        this.each(function () {\n          // We always store the camelCased key\n          dataUser.set(this, key, value);\n        });\n      }, null, value, arguments.length > 1, null, true);\n    },\n    removeData: function (key) {\n      return this.each(function () {\n        dataUser.remove(this, key);\n      });\n    }\n  });\n  jQuery.extend({\n    queue: function (elem, type, data) {\n      var queue;\n      if (elem) {\n        type = (type || \"fx\") + \"queue\";\n        queue = dataPriv.get(elem, type);\n\n        // Speed up dequeue by getting out quickly if this is just a lookup\n        if (data) {\n          if (!queue || Array.isArray(data)) {\n            queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n          } else {\n            queue.push(data);\n          }\n        }\n        return queue || [];\n      }\n    },\n    dequeue: function (elem, type) {\n      type = type || \"fx\";\n      var queue = jQuery.queue(elem, type),\n        startLength = queue.length,\n        fn = queue.shift(),\n        hooks = jQuery._queueHooks(elem, type),\n        next = function () {\n          jQuery.dequeue(elem, type);\n        };\n\n      // If the fx queue is dequeued, always remove the progress sentinel\n      if (fn === \"inprogress\") {\n        fn = queue.shift();\n        startLength--;\n      }\n      if (fn) {\n        // Add a progress sentinel to prevent the fx queue from being\n        // automatically dequeued\n        if (type === \"fx\") {\n          queue.unshift(\"inprogress\");\n        }\n\n        // Clear up the last queue stop function\n        delete hooks.stop;\n        fn.call(elem, next, hooks);\n      }\n      if (!startLength && hooks) {\n        hooks.empty.fire();\n      }\n    },\n    // Not public - generate a queueHooks object, or return the current one\n    _queueHooks: function (elem, type) {\n      var key = type + \"queueHooks\";\n      return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n        empty: jQuery.Callbacks(\"once memory\").add(function () {\n          dataPriv.remove(elem, [type + \"queue\", key]);\n        })\n      });\n    }\n  });\n  jQuery.fn.extend({\n    queue: function (type, data) {\n      var setter = 2;\n      if (typeof type !== \"string\") {\n        data = type;\n        type = \"fx\";\n        setter--;\n      }\n      if (arguments.length < setter) {\n        return jQuery.queue(this[0], type);\n      }\n      return data === undefined ? this : this.each(function () {\n        var queue = jQuery.queue(this, type, data);\n\n        // Ensure a hooks for this queue\n        jQuery._queueHooks(this, type);\n        if (type === \"fx\" && queue[0] !== \"inprogress\") {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    dequeue: function (type) {\n      return this.each(function () {\n        jQuery.dequeue(this, type);\n      });\n    },\n    clearQueue: function (type) {\n      return this.queue(type || \"fx\", []);\n    },\n    // Get a promise resolved when queues of a certain type\n    // are emptied (fx is the type by default)\n    promise: function (type, obj) {\n      var tmp,\n        count = 1,\n        defer = jQuery.Deferred(),\n        elements = this,\n        i = this.length,\n        resolve = function () {\n          if (! --count) {\n            defer.resolveWith(elements, [elements]);\n          }\n        };\n      if (typeof type !== \"string\") {\n        obj = type;\n        type = undefined;\n      }\n      type = type || \"fx\";\n      while (i--) {\n        tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n        if (tmp && tmp.empty) {\n          count++;\n          tmp.empty.add(resolve);\n        }\n      }\n      resolve();\n      return defer.promise(obj);\n    }\n  });\n  var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n  var rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n  var cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n  var documentElement = document.documentElement;\n  var isAttached = function (elem) {\n      return jQuery.contains(elem.ownerDocument, elem);\n    },\n    composed = {\n      composed: true\n    };\n\n  // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n  // Check attachment across shadow DOM boundaries when possible (gh-3504)\n  // Support: iOS 10.0-10.2 only\n  // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n  // leading to errors. We need to check for `getRootNode`.\n  if (documentElement.getRootNode) {\n    isAttached = function (elem) {\n      return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n    };\n  }\n  var isHiddenWithinTree = function (elem, el) {\n    // isHiddenWithinTree might be called from jQuery#filter function;\n    // in that case, element will be second argument\n    elem = el || elem;\n\n    // Inline style trumps all\n    return elem.style.display === \"none\" || elem.style.display === \"\" &&\n    // Otherwise, check computed style\n    // Support: Firefox <=43 - 45\n    // Disconnected elements can have computed display: none, so first confirm that elem is\n    // in the document.\n    isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n  };\n  function adjustCSS(elem, prop, valueParts, tween) {\n    var adjusted,\n      scale,\n      maxIterations = 20,\n      currentValue = tween ? function () {\n        return tween.cur();\n      } : function () {\n        return jQuery.css(elem, prop, \"\");\n      },\n      initial = currentValue(),\n      unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n      // Starting value computation is required for potential unit mismatches\n      initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n    if (initialInUnit && initialInUnit[3] !== unit) {\n      // Support: Firefox <=54\n      // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n      initial = initial / 2;\n\n      // Trust units reported by jQuery.css\n      unit = unit || initialInUnit[3];\n\n      // Iteratively approximate from a nonzero starting point\n      initialInUnit = +initial || 1;\n      while (maxIterations--) {\n        // Evaluate and update our best guess (doubling guesses that zero out).\n        // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n        jQuery.style(elem, prop, initialInUnit + unit);\n        if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n          maxIterations = 0;\n        }\n        initialInUnit = initialInUnit / scale;\n      }\n      initialInUnit = initialInUnit * 2;\n      jQuery.style(elem, prop, initialInUnit + unit);\n\n      // Make sure we update the tween properties later on\n      valueParts = valueParts || [];\n    }\n    if (valueParts) {\n      initialInUnit = +initialInUnit || +initial || 0;\n\n      // Apply relative offset (+=/-=) if specified\n      adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n      if (tween) {\n        tween.unit = unit;\n        tween.start = initialInUnit;\n        tween.end = adjusted;\n      }\n    }\n    return adjusted;\n  }\n  var defaultDisplayMap = {};\n  function getDefaultDisplay(elem) {\n    var temp,\n      doc = elem.ownerDocument,\n      nodeName = elem.nodeName,\n      display = defaultDisplayMap[nodeName];\n    if (display) {\n      return display;\n    }\n    temp = doc.body.appendChild(doc.createElement(nodeName));\n    display = jQuery.css(temp, \"display\");\n    temp.parentNode.removeChild(temp);\n    if (display === \"none\") {\n      display = \"block\";\n    }\n    defaultDisplayMap[nodeName] = display;\n    return display;\n  }\n  function showHide(elements, show) {\n    var display,\n      elem,\n      values = [],\n      index = 0,\n      length = elements.length;\n\n    // Determine new display value for elements that need to change\n    for (; index < length; index++) {\n      elem = elements[index];\n      if (!elem.style) {\n        continue;\n      }\n      display = elem.style.display;\n      if (show) {\n        // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n        // check is required in this first loop unless we have a nonempty display value (either\n        // inline or about-to-be-restored)\n        if (display === \"none\") {\n          values[index] = dataPriv.get(elem, \"display\") || null;\n          if (!values[index]) {\n            elem.style.display = \"\";\n          }\n        }\n        if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n          values[index] = getDefaultDisplay(elem);\n        }\n      } else {\n        if (display !== \"none\") {\n          values[index] = \"none\";\n\n          // Remember what we're overwriting\n          dataPriv.set(elem, \"display\", display);\n        }\n      }\n    }\n\n    // Set the display of the elements in a second loop to avoid constant reflow\n    for (index = 0; index < length; index++) {\n      if (values[index] != null) {\n        elements[index].style.display = values[index];\n      }\n    }\n    return elements;\n  }\n  jQuery.fn.extend({\n    show: function () {\n      return showHide(this, true);\n    },\n    hide: function () {\n      return showHide(this);\n    },\n    toggle: function (state) {\n      if (typeof state === \"boolean\") {\n        return state ? this.show() : this.hide();\n      }\n      return this.each(function () {\n        if (isHiddenWithinTree(this)) {\n          jQuery(this).show();\n        } else {\n          jQuery(this).hide();\n        }\n      });\n    }\n  });\n  var rcheckableType = /^(?:checkbox|radio)$/i;\n  var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n  var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n  (function () {\n    var fragment = document.createDocumentFragment(),\n      div = fragment.appendChild(document.createElement(\"div\")),\n      input = document.createElement(\"input\");\n\n    // Support: Android 4.0 - 4.3 only\n    // Check state lost if the name is set (trac-11217)\n    // Support: Windows Web Apps (WWA)\n    // `name` and `type` must use .setAttribute for WWA (trac-14901)\n    input.setAttribute(\"type\", \"radio\");\n    input.setAttribute(\"checked\", \"checked\");\n    input.setAttribute(\"name\", \"t\");\n    div.appendChild(input);\n\n    // Support: Android <=4.1 only\n    // Older WebKit doesn't clone checked state correctly in fragments\n    support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n    // Support: IE <=11 only\n    // Make sure textarea (and checkbox) defaultValue is properly cloned\n    div.innerHTML = \"<textarea>x</textarea>\";\n    support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n    // Support: IE <=9 only\n    // IE <=9 replaces <option> tags with their contents when inserted outside of\n    // the select element.\n    div.innerHTML = \"<option></option>\";\n    support.option = !!div.lastChild;\n  })();\n\n  // We have to close these tags to support XHTML (trac-13200)\n  var wrapMap = {\n    // XHTML parsers do not magically insert elements in the\n    // same way that tag soup parsers do. So we cannot shorten\n    // this by omitting <tbody> or other required elements.\n    thead: [1, \"<table>\", \"</table>\"],\n    col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n    tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n    td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n    _default: [0, \"\", \"\"]\n  };\n  wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n  wrapMap.th = wrapMap.td;\n\n  // Support: IE <=9 only\n  if (!support.option) {\n    wrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n  }\n  function getAll(context, tag) {\n    // Support: IE <=9 - 11 only\n    // Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n    var ret;\n    if (typeof context.getElementsByTagName !== \"undefined\") {\n      ret = context.getElementsByTagName(tag || \"*\");\n    } else if (typeof context.querySelectorAll !== \"undefined\") {\n      ret = context.querySelectorAll(tag || \"*\");\n    } else {\n      ret = [];\n    }\n    if (tag === undefined || tag && nodeName(context, tag)) {\n      return jQuery.merge([context], ret);\n    }\n    return ret;\n  }\n\n  // Mark scripts as having already been evaluated\n  function setGlobalEval(elems, refElements) {\n    var i = 0,\n      l = elems.length;\n    for (; i < l; i++) {\n      dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n    }\n  }\n  var rhtml = /<|&#?\\w+;/;\n  function buildFragment(elems, context, scripts, selection, ignored) {\n    var elem,\n      tmp,\n      tag,\n      wrap,\n      attached,\n      j,\n      fragment = context.createDocumentFragment(),\n      nodes = [],\n      i = 0,\n      l = elems.length;\n    for (; i < l; i++) {\n      elem = elems[i];\n      if (elem || elem === 0) {\n        // Add nodes directly\n        if (toType(elem) === \"object\") {\n          // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n          jQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n          // Convert non-html into a text node\n        } else if (!rhtml.test(elem)) {\n          nodes.push(context.createTextNode(elem));\n\n          // Convert html into DOM nodes\n        } else {\n          tmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n          // Deserialize a standard representation\n          tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n          wrap = wrapMap[tag] || wrapMap._default;\n          tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n          // Descend through wrappers to the right content\n          j = wrap[0];\n          while (j--) {\n            tmp = tmp.lastChild;\n          }\n\n          // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n          jQuery.merge(nodes, tmp.childNodes);\n\n          // Remember the top-level container\n          tmp = fragment.firstChild;\n\n          // Ensure the created nodes are orphaned (trac-12392)\n          tmp.textContent = \"\";\n        }\n      }\n    }\n\n    // Remove wrapper from fragment\n    fragment.textContent = \"\";\n    i = 0;\n    while (elem = nodes[i++]) {\n      // Skip elements already in the context collection (trac-4087)\n      if (selection && jQuery.inArray(elem, selection) > -1) {\n        if (ignored) {\n          ignored.push(elem);\n        }\n        continue;\n      }\n      attached = isAttached(elem);\n\n      // Append to fragment\n      tmp = getAll(fragment.appendChild(elem), \"script\");\n\n      // Preserve script evaluation history\n      if (attached) {\n        setGlobalEval(tmp);\n      }\n\n      // Capture executables\n      if (scripts) {\n        j = 0;\n        while (elem = tmp[j++]) {\n          if (rscriptType.test(elem.type || \"\")) {\n            scripts.push(elem);\n          }\n        }\n      }\n    }\n    return fragment;\n  }\n  var rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n  function returnTrue() {\n    return true;\n  }\n  function returnFalse() {\n    return false;\n  }\n  function on(elem, types, selector, data, fn, one) {\n    var origFn, type;\n\n    // Types can be a map of types/handlers\n    if (typeof types === \"object\") {\n      // ( types-Object, selector, data )\n      if (typeof selector !== \"string\") {\n        // ( types-Object, data )\n        data = data || selector;\n        selector = undefined;\n      }\n      for (type in types) {\n        on(elem, type, selector, data, types[type], one);\n      }\n      return elem;\n    }\n    if (data == null && fn == null) {\n      // ( types, fn )\n      fn = selector;\n      data = selector = undefined;\n    } else if (fn == null) {\n      if (typeof selector === \"string\") {\n        // ( types, selector, fn )\n        fn = data;\n        data = undefined;\n      } else {\n        // ( types, data, fn )\n        fn = data;\n        data = selector;\n        selector = undefined;\n      }\n    }\n    if (fn === false) {\n      fn = returnFalse;\n    } else if (!fn) {\n      return elem;\n    }\n    if (one === 1) {\n      origFn = fn;\n      fn = function (event) {\n        // Can use an empty set, since event contains the info\n        jQuery().off(event);\n        return origFn.apply(this, arguments);\n      };\n\n      // Use same guid so caller can remove using origFn\n      fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n    }\n    return elem.each(function () {\n      jQuery.event.add(this, types, fn, data, selector);\n    });\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   */\n  jQuery.event = {\n    global: {},\n    add: function (elem, types, handler, data, selector) {\n      var handleObjIn,\n        eventHandle,\n        tmp,\n        events,\n        t,\n        handleObj,\n        special,\n        handlers,\n        type,\n        namespaces,\n        origType,\n        elemData = dataPriv.get(elem);\n\n      // Only attach events to objects that accept data\n      if (!acceptData(elem)) {\n        return;\n      }\n\n      // Caller can pass in an object of custom data in lieu of the handler\n      if (handler.handler) {\n        handleObjIn = handler;\n        handler = handleObjIn.handler;\n        selector = handleObjIn.selector;\n      }\n\n      // Ensure that invalid selectors throw exceptions at attach time\n      // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n      if (selector) {\n        jQuery.find.matchesSelector(documentElement, selector);\n      }\n\n      // Make sure that the handler has a unique ID, used to find/remove it later\n      if (!handler.guid) {\n        handler.guid = jQuery.guid++;\n      }\n\n      // Init the element's event structure and main handler, if this is the first\n      if (!(events = elemData.events)) {\n        events = elemData.events = Object.create(null);\n      }\n      if (!(eventHandle = elemData.handle)) {\n        eventHandle = elemData.handle = function (e) {\n          // Discard the second event of a jQuery.event.trigger() and\n          // when an event is called after a page has unloaded\n          return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n        };\n      }\n\n      // Handle multiple events separated by a space\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort();\n\n        // There *must* be a type, no attaching namespace-only handlers\n        if (!type) {\n          continue;\n        }\n\n        // If event changes its type, use the special event handlers for the changed type\n        special = jQuery.event.special[type] || {};\n\n        // If selector defined, determine special event api type, otherwise given type\n        type = (selector ? special.delegateType : special.bindType) || type;\n\n        // Update special based on newly reset type\n        special = jQuery.event.special[type] || {};\n\n        // handleObj is passed to all event handlers\n        handleObj = jQuery.extend({\n          type: type,\n          origType: origType,\n          data: data,\n          handler: handler,\n          guid: handler.guid,\n          selector: selector,\n          needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n          namespace: namespaces.join(\".\")\n        }, handleObjIn);\n\n        // Init the event handler queue if we're the first\n        if (!(handlers = events[type])) {\n          handlers = events[type] = [];\n          handlers.delegateCount = 0;\n\n          // Only use addEventListener if the special events handler returns false\n          if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n            if (elem.addEventListener) {\n              elem.addEventListener(type, eventHandle);\n            }\n          }\n        }\n        if (special.add) {\n          special.add.call(elem, handleObj);\n          if (!handleObj.handler.guid) {\n            handleObj.handler.guid = handler.guid;\n          }\n        }\n\n        // Add to the element's handler list, delegates in front\n        if (selector) {\n          handlers.splice(handlers.delegateCount++, 0, handleObj);\n        } else {\n          handlers.push(handleObj);\n        }\n\n        // Keep track of which events have ever been used, for event optimization\n        jQuery.event.global[type] = true;\n      }\n    },\n    // Detach an event or set of events from an element\n    remove: function (elem, types, handler, selector, mappedTypes) {\n      var j,\n        origCount,\n        tmp,\n        events,\n        t,\n        handleObj,\n        special,\n        handlers,\n        type,\n        namespaces,\n        origType,\n        elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n      if (!elemData || !(events = elemData.events)) {\n        return;\n      }\n\n      // Once for each type.namespace in types; type may be omitted\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort();\n\n        // Unbind all events (on this namespace, if provided) for the element\n        if (!type) {\n          for (type in events) {\n            jQuery.event.remove(elem, type + types[t], handler, selector, true);\n          }\n          continue;\n        }\n        special = jQuery.event.special[type] || {};\n        type = (selector ? special.delegateType : special.bindType) || type;\n        handlers = events[type] || [];\n        tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n        // Remove matching events\n        origCount = j = handlers.length;\n        while (j--) {\n          handleObj = handlers[j];\n          if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n            handlers.splice(j, 1);\n            if (handleObj.selector) {\n              handlers.delegateCount--;\n            }\n            if (special.remove) {\n              special.remove.call(elem, handleObj);\n            }\n          }\n        }\n\n        // Remove generic event handler if we removed something and no more handlers exist\n        // (avoids potential for endless recursion during removal of special event handlers)\n        if (origCount && !handlers.length) {\n          if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n            jQuery.removeEvent(elem, type, elemData.handle);\n          }\n          delete events[type];\n        }\n      }\n\n      // Remove data and the expando if it's no longer used\n      if (jQuery.isEmptyObject(events)) {\n        dataPriv.remove(elem, \"handle events\");\n      }\n    },\n    dispatch: function (nativeEvent) {\n      var i,\n        j,\n        ret,\n        matched,\n        handleObj,\n        handlerQueue,\n        args = new Array(arguments.length),\n        // Make a writable jQuery.Event from the native event object\n        event = jQuery.event.fix(nativeEvent),\n        handlers = (dataPriv.get(this, \"events\") || Object.create(null))[event.type] || [],\n        special = jQuery.event.special[event.type] || {};\n\n      // Use the fix-ed jQuery.Event rather than the (read-only) native event\n      args[0] = event;\n      for (i = 1; i < arguments.length; i++) {\n        args[i] = arguments[i];\n      }\n      event.delegateTarget = this;\n\n      // Call the preDispatch hook for the mapped type, and let it bail if desired\n      if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n        return;\n      }\n\n      // Determine handlers\n      handlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n      // Run delegates first; they may want to stop propagation beneath us\n      i = 0;\n      while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n        event.currentTarget = matched.elem;\n        j = 0;\n        while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n          // If the event is namespaced, then each handler is only invoked if it is\n          // specially universal or its namespaces are a superset of the event's.\n          if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n            event.handleObj = handleObj;\n            event.data = handleObj.data;\n            ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n            if (ret !== undefined) {\n              if ((event.result = ret) === false) {\n                event.preventDefault();\n                event.stopPropagation();\n              }\n            }\n          }\n        }\n      }\n\n      // Call the postDispatch hook for the mapped type\n      if (special.postDispatch) {\n        special.postDispatch.call(this, event);\n      }\n      return event.result;\n    },\n    handlers: function (event, handlers) {\n      var i,\n        handleObj,\n        sel,\n        matchedHandlers,\n        matchedSelectors,\n        handlerQueue = [],\n        delegateCount = handlers.delegateCount,\n        cur = event.target;\n\n      // Find delegate handlers\n      if (delegateCount &&\n      // Support: IE <=9\n      // Black-hole SVG <use> instance trees (trac-13180)\n      cur.nodeType &&\n      // Support: Firefox <=42\n      // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n      // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n      // Support: IE 11 only\n      // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n      !(event.type === \"click\" && event.button >= 1)) {\n        for (; cur !== this; cur = cur.parentNode || this) {\n          // Don't check non-elements (trac-13208)\n          // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n          if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n            matchedHandlers = [];\n            matchedSelectors = {};\n            for (i = 0; i < delegateCount; i++) {\n              handleObj = handlers[i];\n\n              // Don't conflict with Object.prototype properties (trac-13203)\n              sel = handleObj.selector + \" \";\n              if (matchedSelectors[sel] === undefined) {\n                matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n              }\n              if (matchedSelectors[sel]) {\n                matchedHandlers.push(handleObj);\n              }\n            }\n            if (matchedHandlers.length) {\n              handlerQueue.push({\n                elem: cur,\n                handlers: matchedHandlers\n              });\n            }\n          }\n        }\n      }\n\n      // Add the remaining (directly-bound) handlers\n      cur = this;\n      if (delegateCount < handlers.length) {\n        handlerQueue.push({\n          elem: cur,\n          handlers: handlers.slice(delegateCount)\n        });\n      }\n      return handlerQueue;\n    },\n    addProp: function (name, hook) {\n      Object.defineProperty(jQuery.Event.prototype, name, {\n        enumerable: true,\n        configurable: true,\n        get: isFunction(hook) ? function () {\n          if (this.originalEvent) {\n            return hook(this.originalEvent);\n          }\n        } : function () {\n          if (this.originalEvent) {\n            return this.originalEvent[name];\n          }\n        },\n        set: function (value) {\n          Object.defineProperty(this, name, {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: value\n          });\n        }\n      });\n    },\n    fix: function (originalEvent) {\n      return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n    },\n    special: {\n      load: {\n        // Prevent triggered image.load events from bubbling to window.load\n        noBubble: true\n      },\n      click: {\n        // Utilize native event to ensure correct state for checkable inputs\n        setup: function (data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data;\n\n          // Claim the first handler\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            // dataPriv.set( el, \"click\", ... )\n            leverageNative(el, \"click\", true);\n          }\n\n          // Return false to allow normal processing in the caller\n          return false;\n        },\n        trigger: function (data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data;\n\n          // Force setup before triggering a click\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            leverageNative(el, \"click\");\n          }\n\n          // Return non-false to allow normal event-path propagation\n          return true;\n        },\n        // For cross-browser consistency, suppress native .click() on links\n        // Also prevent it if we're currently inside a leveraged native-event stack\n        _default: function (event) {\n          var target = event.target;\n          return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n        }\n      },\n      beforeunload: {\n        postDispatch: function (event) {\n          // Support: Firefox 20+\n          // Firefox doesn't alert if the returnValue field is not set.\n          if (event.result !== undefined && event.originalEvent) {\n            event.originalEvent.returnValue = event.result;\n          }\n        }\n      }\n    }\n  };\n\n  // Ensure the presence of an event listener that handles manually-triggered\n  // synthetic events by interrupting progress until reinvoked in response to\n  // *native* events that it fires directly, ensuring that state changes have\n  // already occurred before other listeners are invoked.\n  function leverageNative(el, type, isSetup) {\n    // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n    if (!isSetup) {\n      if (dataPriv.get(el, type) === undefined) {\n        jQuery.event.add(el, type, returnTrue);\n      }\n      return;\n    }\n\n    // Register the controller as a special universal handler for all event namespaces\n    dataPriv.set(el, type, false);\n    jQuery.event.add(el, type, {\n      namespace: false,\n      handler: function (event) {\n        var result,\n          saved = dataPriv.get(this, type);\n        if (event.isTrigger & 1 && this[type]) {\n          // Interrupt processing of the outer synthetic .trigger()ed event\n          if (!saved) {\n            // Store arguments for use when handling the inner native event\n            // There will always be at least one argument (an event object), so this array\n            // will not be confused with a leftover capture object.\n            saved = slice.call(arguments);\n            dataPriv.set(this, type, saved);\n\n            // Trigger the native event and capture its result\n            this[type]();\n            result = dataPriv.get(this, type);\n            dataPriv.set(this, type, false);\n            if (saved !== result) {\n              // Cancel the outer synthetic event\n              event.stopImmediatePropagation();\n              event.preventDefault();\n              return result;\n            }\n\n            // If this is an inner synthetic event for an event with a bubbling surrogate\n            // (focus or blur), assume that the surrogate already propagated from triggering\n            // the native event and prevent that from happening again here.\n            // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n            // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n            // less bad than duplication.\n          } else if ((jQuery.event.special[type] || {}).delegateType) {\n            event.stopPropagation();\n          }\n\n          // If this is a native event triggered above, everything is now in order\n          // Fire an inner synthetic event with the original arguments\n        } else if (saved) {\n          // ...and capture the result\n          dataPriv.set(this, type, jQuery.event.trigger(saved[0], saved.slice(1), this));\n\n          // Abort handling of the native event by all jQuery handlers while allowing\n          // native handlers on the same element to run. On target, this is achieved\n          // by stopping immediate propagation just on the jQuery event. However,\n          // the native event is re-wrapped by a jQuery one on each level of the\n          // propagation so the only way to stop it for jQuery is to stop it for\n          // everyone via native `stopPropagation()`. This is not a problem for\n          // focus/blur which don't bubble, but it does also stop click on checkboxes\n          // and radios. We accept this limitation.\n          event.stopPropagation();\n          event.isImmediatePropagationStopped = returnTrue;\n        }\n      }\n    });\n  }\n  jQuery.removeEvent = function (elem, type, handle) {\n    // This \"if\" is needed for plain objects\n    if (elem.removeEventListener) {\n      elem.removeEventListener(type, handle);\n    }\n  };\n  jQuery.Event = function (src, props) {\n    // Allow instantiation without the 'new' keyword\n    if (!(this instanceof jQuery.Event)) {\n      return new jQuery.Event(src, props);\n    }\n\n    // Event object\n    if (src && src.type) {\n      this.originalEvent = src;\n      this.type = src.type;\n\n      // Events bubbling up the document may have been marked as prevented\n      // by a handler lower down the tree; reflect the correct value.\n      this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined &&\n      // Support: Android <=2.3 only\n      src.returnValue === false ? returnTrue : returnFalse;\n\n      // Create target properties\n      // Support: Safari <=6 - 7 only\n      // Target should not be a text node (trac-504, trac-13143)\n      this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n      this.currentTarget = src.currentTarget;\n      this.relatedTarget = src.relatedTarget;\n\n      // Event type\n    } else {\n      this.type = src;\n    }\n\n    // Put explicitly provided properties onto the event object\n    if (props) {\n      jQuery.extend(this, props);\n    }\n\n    // Create a timestamp if incoming event doesn't have one\n    this.timeStamp = src && src.timeStamp || Date.now();\n\n    // Mark it as fixed\n    this[jQuery.expando] = true;\n  };\n\n  // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n  // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n  jQuery.Event.prototype = {\n    constructor: jQuery.Event,\n    isDefaultPrevented: returnFalse,\n    isPropagationStopped: returnFalse,\n    isImmediatePropagationStopped: returnFalse,\n    isSimulated: false,\n    preventDefault: function () {\n      var e = this.originalEvent;\n      this.isDefaultPrevented = returnTrue;\n      if (e && !this.isSimulated) {\n        e.preventDefault();\n      }\n    },\n    stopPropagation: function () {\n      var e = this.originalEvent;\n      this.isPropagationStopped = returnTrue;\n      if (e && !this.isSimulated) {\n        e.stopPropagation();\n      }\n    },\n    stopImmediatePropagation: function () {\n      var e = this.originalEvent;\n      this.isImmediatePropagationStopped = returnTrue;\n      if (e && !this.isSimulated) {\n        e.stopImmediatePropagation();\n      }\n      this.stopPropagation();\n    }\n  };\n\n  // Includes all common event props including KeyEvent and MouseEvent specific props\n  jQuery.each({\n    altKey: true,\n    bubbles: true,\n    cancelable: true,\n    changedTouches: true,\n    ctrlKey: true,\n    detail: true,\n    eventPhase: true,\n    metaKey: true,\n    pageX: true,\n    pageY: true,\n    shiftKey: true,\n    view: true,\n    \"char\": true,\n    code: true,\n    charCode: true,\n    key: true,\n    keyCode: true,\n    button: true,\n    buttons: true,\n    clientX: true,\n    clientY: true,\n    offsetX: true,\n    offsetY: true,\n    pointerId: true,\n    pointerType: true,\n    screenX: true,\n    screenY: true,\n    targetTouches: true,\n    toElement: true,\n    touches: true,\n    which: true\n  }, jQuery.event.addProp);\n  jQuery.each({\n    focus: \"focusin\",\n    blur: \"focusout\"\n  }, function (type, delegateType) {\n    function focusMappedHandler(nativeEvent) {\n      if (document.documentMode) {\n        // Support: IE 11+\n        // Attach a single focusin/focusout handler on the document while someone wants\n        // focus/blur. This is because the former are synchronous in IE while the latter\n        // are async. In other browsers, all those handlers are invoked synchronously.\n\n        // `handle` from private data would already wrap the event, but we need\n        // to change the `type` here.\n        var handle = dataPriv.get(this, \"handle\"),\n          event = jQuery.event.fix(nativeEvent);\n        event.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n        event.isSimulated = true;\n\n        // First, handle focusin/focusout\n        handle(nativeEvent);\n\n        // ...then, handle focus/blur\n        //\n        // focus/blur don't bubble while focusin/focusout do; simulate the former by only\n        // invoking the handler at the lower level.\n        if (event.target === event.currentTarget) {\n          // The setup part calls `leverageNative`, which, in turn, calls\n          // `jQuery.event.add`, so event handle will already have been set\n          // by this point.\n          handle(event);\n        }\n      } else {\n        // For non-IE browsers, attach a single capturing handler on the document\n        // while someone wants focusin/focusout.\n        jQuery.event.simulate(delegateType, nativeEvent.target, jQuery.event.fix(nativeEvent));\n      }\n    }\n    jQuery.event.special[type] = {\n      // Utilize native event if possible so blur/focus sequence is correct\n      setup: function () {\n        var attaches;\n\n        // Claim the first handler\n        // dataPriv.set( this, \"focus\", ... )\n        // dataPriv.set( this, \"blur\", ... )\n        leverageNative(this, type, true);\n        if (document.documentMode) {\n          // Support: IE 9 - 11+\n          // We use the same native handler for focusin & focus (and focusout & blur)\n          // so we need to coordinate setup & teardown parts between those events.\n          // Use `delegateType` as the key as `type` is already used by `leverageNative`.\n          attaches = dataPriv.get(this, delegateType);\n          if (!attaches) {\n            this.addEventListener(delegateType, focusMappedHandler);\n          }\n          dataPriv.set(this, delegateType, (attaches || 0) + 1);\n        } else {\n          // Return false to allow normal processing in the caller\n          return false;\n        }\n      },\n      trigger: function () {\n        // Force setup before trigger\n        leverageNative(this, type);\n\n        // Return non-false to allow normal event-path propagation\n        return true;\n      },\n      teardown: function () {\n        var attaches;\n        if (document.documentMode) {\n          attaches = dataPriv.get(this, delegateType) - 1;\n          if (!attaches) {\n            this.removeEventListener(delegateType, focusMappedHandler);\n            dataPriv.remove(this, delegateType);\n          } else {\n            dataPriv.set(this, delegateType, attaches);\n          }\n        } else {\n          // Return false to indicate standard teardown should be applied\n          return false;\n        }\n      },\n      // Suppress native focus or blur if we're currently inside\n      // a leveraged native-event stack\n      _default: function (event) {\n        return dataPriv.get(event.target, type);\n      },\n      delegateType: delegateType\n    };\n\n    // Support: Firefox <=44\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 <=48 - 49, Safari <=9.0 - 9.1\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://bugs.chromium.org/p/chromium/issues/detail?id=449857\n    //\n    // Support: IE 9 - 11+\n    // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n    // attach a single handler for both events in IE.\n    jQuery.event.special[delegateType] = {\n      setup: function () {\n        // Handle: regular nodes (via `this.ownerDocument`), window\n        // (via `this.document`) & document (via `this`).\n        var doc = this.ownerDocument || this.document || this,\n          dataHolder = document.documentMode ? this : doc,\n          attaches = dataPriv.get(dataHolder, delegateType);\n\n        // Support: IE 9 - 11+\n        // We use the same native handler for focusin & focus (and focusout & blur)\n        // so we need to coordinate setup & teardown parts between those events.\n        // Use `delegateType` as the key as `type` is already used by `leverageNative`.\n        if (!attaches) {\n          if (document.documentMode) {\n            this.addEventListener(delegateType, focusMappedHandler);\n          } else {\n            doc.addEventListener(type, focusMappedHandler, true);\n          }\n        }\n        dataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n      },\n      teardown: function () {\n        var doc = this.ownerDocument || this.document || this,\n          dataHolder = document.documentMode ? this : doc,\n          attaches = dataPriv.get(dataHolder, delegateType) - 1;\n        if (!attaches) {\n          if (document.documentMode) {\n            this.removeEventListener(delegateType, focusMappedHandler);\n          } else {\n            doc.removeEventListener(type, focusMappedHandler, true);\n          }\n          dataPriv.remove(dataHolder, delegateType);\n        } else {\n          dataPriv.set(dataHolder, delegateType, attaches);\n        }\n      }\n    };\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://bugs.chromium.org/p/chromium/issues/detail?id=470258\n  // for the description of the bug (it existed in older Chrome versions as well).\n  jQuery.each({\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\",\n    pointerenter: \"pointerover\",\n    pointerleave: \"pointerout\"\n  }, function (orig, fix) {\n    jQuery.event.special[orig] = {\n      delegateType: fix,\n      bindType: fix,\n      handle: function (event) {\n        var ret,\n          target = this,\n          related = event.relatedTarget,\n          handleObj = event.handleObj;\n\n        // For mouseenter/leave call the handler if related is outside the target.\n        // NB: No relatedTarget if the mouse left/entered the browser window\n        if (!related || related !== target && !jQuery.contains(target, related)) {\n          event.type = handleObj.origType;\n          ret = handleObj.handler.apply(this, arguments);\n          event.type = fix;\n        }\n        return ret;\n      }\n    };\n  });\n  jQuery.fn.extend({\n    on: function (types, selector, data, fn) {\n      return on(this, types, selector, data, fn);\n    },\n    one: function (types, selector, data, fn) {\n      return on(this, types, selector, data, fn, 1);\n    },\n    off: function (types, selector, fn) {\n      var handleObj, type;\n      if (types && types.preventDefault && types.handleObj) {\n        // ( event )  dispatched jQuery.Event\n        handleObj = types.handleObj;\n        jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n        return this;\n      }\n      if (typeof types === \"object\") {\n        // ( types-object [, selector] )\n        for (type in types) {\n          this.off(type, selector, types[type]);\n        }\n        return this;\n      }\n      if (selector === false || typeof selector === \"function\") {\n        // ( types [, fn] )\n        fn = selector;\n        selector = undefined;\n      }\n      if (fn === false) {\n        fn = returnFalse;\n      }\n      return this.each(function () {\n        jQuery.event.remove(this, types, fn, selector);\n      });\n    }\n  });\n  var\n    // Support: IE <=10 - 11, Edge 12 - 13 only\n    // In IE/Edge using regex groups here causes severe slowdowns.\n    // See https://connect.microsoft.com/IE/feedback/details/1736512/\n    rnoInnerhtml = /<script|<style|<link/i,\n    // checked=\"checked\" or checked\n    rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n    rcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n  // Prefer a tbody over its parent table for containing new rows\n  function manipulationTarget(elem, content) {\n    if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n      return jQuery(elem).children(\"tbody\")[0] || elem;\n    }\n    return elem;\n  }\n\n  // Replace/restore the type attribute of script elements for safe DOM manipulation\n  function disableScript(elem) {\n    elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n    return elem;\n  }\n  function restoreScript(elem) {\n    if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n      elem.type = elem.type.slice(5);\n    } else {\n      elem.removeAttribute(\"type\");\n    }\n    return elem;\n  }\n  function cloneCopyEvent(src, dest) {\n    var i, l, type, pdataOld, udataOld, udataCur, events;\n    if (dest.nodeType !== 1) {\n      return;\n    }\n\n    // 1. Copy private data: events, handlers, etc.\n    if (dataPriv.hasData(src)) {\n      pdataOld = dataPriv.get(src);\n      events = pdataOld.events;\n      if (events) {\n        dataPriv.remove(dest, \"handle events\");\n        for (type in events) {\n          for (i = 0, l = events[type].length; i < l; i++) {\n            jQuery.event.add(dest, type, events[type][i]);\n          }\n        }\n      }\n    }\n\n    // 2. Copy user data\n    if (dataUser.hasData(src)) {\n      udataOld = dataUser.access(src);\n      udataCur = jQuery.extend({}, udataOld);\n      dataUser.set(dest, udataCur);\n    }\n  }\n\n  // Fix IE bugs, see support tests\n  function fixInput(src, dest) {\n    var nodeName = dest.nodeName.toLowerCase();\n\n    // Fails to persist the checked state of a cloned checkbox or radio button.\n    if (nodeName === \"input\" && rcheckableType.test(src.type)) {\n      dest.checked = src.checked;\n\n      // Fails to return the selected option to the default selected state when cloning options\n    } else if (nodeName === \"input\" || nodeName === \"textarea\") {\n      dest.defaultValue = src.defaultValue;\n    }\n  }\n  function domManip(collection, args, callback, ignored) {\n    // Flatten any nested arrays\n    args = flat(args);\n    var fragment,\n      first,\n      scripts,\n      hasScripts,\n      node,\n      doc,\n      i = 0,\n      l = collection.length,\n      iNoClone = l - 1,\n      value = args[0],\n      valueIsFunction = isFunction(value);\n\n    // We can't cloneNode fragments that contain checked, in WebKit\n    if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n      return collection.each(function (index) {\n        var self = collection.eq(index);\n        if (valueIsFunction) {\n          args[0] = value.call(this, index, self.html());\n        }\n        domManip(self, args, callback, ignored);\n      });\n    }\n    if (l) {\n      fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n      first = fragment.firstChild;\n      if (fragment.childNodes.length === 1) {\n        fragment = first;\n      }\n\n      // Require either new content or an interest in ignored elements to invoke the callback\n      if (first || ignored) {\n        scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n        hasScripts = scripts.length;\n\n        // Use the original fragment for the last item\n        // instead of the first because it can end up\n        // being emptied incorrectly in certain situations (trac-8070).\n        for (; i < l; i++) {\n          node = fragment;\n          if (i !== iNoClone) {\n            node = jQuery.clone(node, true, true);\n\n            // Keep references to cloned scripts for later restoration\n            if (hasScripts) {\n              // Support: Android <=4.0 only, PhantomJS 1 only\n              // push.apply(_, arraylike) throws on ancient WebKit\n              jQuery.merge(scripts, getAll(node, \"script\"));\n            }\n          }\n          callback.call(collection[i], node, i);\n        }\n        if (hasScripts) {\n          doc = scripts[scripts.length - 1].ownerDocument;\n\n          // Re-enable scripts\n          jQuery.map(scripts, restoreScript);\n\n          // Evaluate executable scripts on first document insertion\n          for (i = 0; i < hasScripts; i++) {\n            node = scripts[i];\n            if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n              if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n                // Optional AJAX dependency, but won't run scripts if not present\n                if (jQuery._evalUrl && !node.noModule) {\n                  jQuery._evalUrl(node.src, {\n                    nonce: node.nonce || node.getAttribute(\"nonce\")\n                  }, doc);\n                }\n              } else {\n                // Unwrap a CDATA section containing script contents. This shouldn't be\n                // needed as in XML documents they're already not visible when\n                // inspecting element contents and in HTML documents they have no\n                // meaning but we're preserving that logic for backwards compatibility.\n                // This will be removed completely in 4.0. See gh-4904.\n                DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n              }\n            }\n          }\n        }\n      }\n    }\n    return collection;\n  }\n  function remove(elem, selector, keepData) {\n    var node,\n      nodes = selector ? jQuery.filter(selector, elem) : elem,\n      i = 0;\n    for (; (node = nodes[i]) != null; i++) {\n      if (!keepData && node.nodeType === 1) {\n        jQuery.cleanData(getAll(node));\n      }\n      if (node.parentNode) {\n        if (keepData && isAttached(node)) {\n          setGlobalEval(getAll(node, \"script\"));\n        }\n        node.parentNode.removeChild(node);\n      }\n    }\n    return elem;\n  }\n  jQuery.extend({\n    htmlPrefilter: function (html) {\n      return html;\n    },\n    clone: function (elem, dataAndEvents, deepDataAndEvents) {\n      var i,\n        l,\n        srcElements,\n        destElements,\n        clone = elem.cloneNode(true),\n        inPage = isAttached(elem);\n\n      // Fix IE cloning issues\n      if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n        // We eschew jQuery#find here for performance reasons:\n        // https://jsperf.com/getall-vs-sizzle/2\n        destElements = getAll(clone);\n        srcElements = getAll(elem);\n        for (i = 0, l = srcElements.length; i < l; i++) {\n          fixInput(srcElements[i], destElements[i]);\n        }\n      }\n\n      // Copy the events from the original to the clone\n      if (dataAndEvents) {\n        if (deepDataAndEvents) {\n          srcElements = srcElements || getAll(elem);\n          destElements = destElements || getAll(clone);\n          for (i = 0, l = srcElements.length; i < l; i++) {\n            cloneCopyEvent(srcElements[i], destElements[i]);\n          }\n        } else {\n          cloneCopyEvent(elem, clone);\n        }\n      }\n\n      // Preserve script evaluation history\n      destElements = getAll(clone, \"script\");\n      if (destElements.length > 0) {\n        setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n      }\n\n      // Return the cloned set\n      return clone;\n    },\n    cleanData: function (elems) {\n      var data,\n        elem,\n        type,\n        special = jQuery.event.special,\n        i = 0;\n      for (; (elem = elems[i]) !== undefined; i++) {\n        if (acceptData(elem)) {\n          if (data = elem[dataPriv.expando]) {\n            if (data.events) {\n              for (type in data.events) {\n                if (special[type]) {\n                  jQuery.event.remove(elem, type);\n\n                  // This is a shortcut to avoid jQuery.event.remove's overhead\n                } else {\n                  jQuery.removeEvent(elem, type, data.handle);\n                }\n              }\n            }\n\n            // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n            elem[dataPriv.expando] = undefined;\n          }\n          if (elem[dataUser.expando]) {\n            // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n            elem[dataUser.expando] = undefined;\n          }\n        }\n      }\n    }\n  });\n  jQuery.fn.extend({\n    detach: function (selector) {\n      return remove(this, selector, true);\n    },\n    remove: function (selector) {\n      return remove(this, selector);\n    },\n    text: function (value) {\n      return access(this, function (value) {\n        return value === undefined ? jQuery.text(this) : this.empty().each(function () {\n          if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n            this.textContent = value;\n          }\n        });\n      }, null, value, arguments.length);\n    },\n    append: function () {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.appendChild(elem);\n        }\n      });\n    },\n    prepend: function () {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.insertBefore(elem, target.firstChild);\n        }\n      });\n    },\n    before: function () {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this);\n        }\n      });\n    },\n    after: function () {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this.nextSibling);\n        }\n      });\n    },\n    empty: function () {\n      var elem,\n        i = 0;\n      for (; (elem = this[i]) != null; i++) {\n        if (elem.nodeType === 1) {\n          // Prevent memory leaks\n          jQuery.cleanData(getAll(elem, false));\n\n          // Remove any remaining nodes\n          elem.textContent = \"\";\n        }\n      }\n      return this;\n    },\n    clone: function (dataAndEvents, deepDataAndEvents) {\n      dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n      deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n      return this.map(function () {\n        return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n      });\n    },\n    html: function (value) {\n      return access(this, function (value) {\n        var elem = this[0] || {},\n          i = 0,\n          l = this.length;\n        if (value === undefined && elem.nodeType === 1) {\n          return elem.innerHTML;\n        }\n\n        // See if we can take a shortcut and just use innerHTML\n        if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n          value = jQuery.htmlPrefilter(value);\n          try {\n            for (; i < l; i++) {\n              elem = this[i] || {};\n\n              // Remove element nodes and prevent memory leaks\n              if (elem.nodeType === 1) {\n                jQuery.cleanData(getAll(elem, false));\n                elem.innerHTML = value;\n              }\n            }\n            elem = 0;\n\n            // If using innerHTML throws an exception, use the fallback method\n          } catch (e) {}\n        }\n        if (elem) {\n          this.empty().append(value);\n        }\n      }, null, value, arguments.length);\n    },\n    replaceWith: function () {\n      var ignored = [];\n\n      // Make the changes, replacing each non-ignored context element with the new content\n      return domManip(this, arguments, function (elem) {\n        var parent = this.parentNode;\n        if (jQuery.inArray(this, ignored) < 0) {\n          jQuery.cleanData(getAll(this));\n          if (parent) {\n            parent.replaceChild(elem, this);\n          }\n        }\n\n        // Force callback invocation\n      }, ignored);\n    }\n  });\n  jQuery.each({\n    appendTo: \"append\",\n    prependTo: \"prepend\",\n    insertBefore: \"before\",\n    insertAfter: \"after\",\n    replaceAll: \"replaceWith\"\n  }, function (name, original) {\n    jQuery.fn[name] = function (selector) {\n      var elems,\n        ret = [],\n        insert = jQuery(selector),\n        last = insert.length - 1,\n        i = 0;\n      for (; i <= last; i++) {\n        elems = i === last ? this : this.clone(true);\n        jQuery(insert[i])[original](elems);\n\n        // Support: Android <=4.0 only, PhantomJS 1 only\n        // .get() because push.apply(_, arraylike) throws on ancient WebKit\n        push.apply(ret, elems.get());\n      }\n      return this.pushStack(ret);\n    };\n  });\n  var rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n  var rcustomProp = /^--/;\n  var getStyles = function (elem) {\n    // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n    // IE throws on elements created in popups\n    // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n    var view = elem.ownerDocument.defaultView;\n    if (!view || !view.opener) {\n      view = window;\n    }\n    return view.getComputedStyle(elem);\n  };\n  var swap = function (elem, options, callback) {\n    var ret,\n      name,\n      old = {};\n\n    // Remember the old values, and insert the new ones\n    for (name in options) {\n      old[name] = elem.style[name];\n      elem.style[name] = options[name];\n    }\n    ret = callback.call(elem);\n\n    // Revert the old values\n    for (name in options) {\n      elem.style[name] = old[name];\n    }\n    return ret;\n  };\n  var rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n  (function () {\n    // Executing both pixelPosition & boxSizingReliable tests require only one layout\n    // so they're executed at the same time to save the second computation.\n    function computeStyleTests() {\n      // This is a singleton, we need to execute it only once\n      if (!div) {\n        return;\n      }\n      container.style.cssText = \"position:absolute;left:-11111px;width:60px;\" + \"margin-top:1px;padding:0;border:0\";\n      div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" + \"margin:auto;border:1px;padding:1px;\" + \"width:60%;top:1%\";\n      documentElement.appendChild(container).appendChild(div);\n      var divStyle = window.getComputedStyle(div);\n      pixelPositionVal = divStyle.top !== \"1%\";\n\n      // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n      reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n      // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n      // Some styles come back with percentage values, even though they shouldn't\n      div.style.right = \"60%\";\n      pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n      // Support: IE 9 - 11 only\n      // Detect misreporting of content dimensions for box-sizing:border-box elements\n      boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n      // Support: IE 9 only\n      // Detect overflow:scroll screwiness (gh-3699)\n      // Support: Chrome <=64\n      // Don't get tricked when zoom affects offsetWidth (gh-4029)\n      div.style.position = \"absolute\";\n      scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n      documentElement.removeChild(container);\n\n      // Nullify the div so it wouldn't be stored in the memory and\n      // it will also be a sign that checks already performed\n      div = null;\n    }\n    function roundPixelMeasures(measure) {\n      return Math.round(parseFloat(measure));\n    }\n    var pixelPositionVal,\n      boxSizingReliableVal,\n      scrollboxSizeVal,\n      pixelBoxStylesVal,\n      reliableTrDimensionsVal,\n      reliableMarginLeftVal,\n      container = document.createElement(\"div\"),\n      div = document.createElement(\"div\");\n\n    // Finish early in limited (non-browser) environments\n    if (!div.style) {\n      return;\n    }\n\n    // Support: IE <=9 - 11 only\n    // Style of cloned element affects source element cloned (trac-8908)\n    div.style.backgroundClip = \"content-box\";\n    div.cloneNode(true).style.backgroundClip = \"\";\n    support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n    jQuery.extend(support, {\n      boxSizingReliable: function () {\n        computeStyleTests();\n        return boxSizingReliableVal;\n      },\n      pixelBoxStyles: function () {\n        computeStyleTests();\n        return pixelBoxStylesVal;\n      },\n      pixelPosition: function () {\n        computeStyleTests();\n        return pixelPositionVal;\n      },\n      reliableMarginLeft: function () {\n        computeStyleTests();\n        return reliableMarginLeftVal;\n      },\n      scrollboxSize: function () {\n        computeStyleTests();\n        return scrollboxSizeVal;\n      },\n      // Support: IE 9 - 11+, Edge 15 - 18+\n      // IE/Edge misreport `getComputedStyle` of table rows with width/height\n      // set in CSS while `offset*` properties report correct values.\n      // Behavior in IE 9 is more subtle than in newer versions & it passes\n      // some versions of this test; make sure not to make it pass there!\n      //\n      // Support: Firefox 70+\n      // Only Firefox includes border widths\n      // in computed dimensions. (gh-4529)\n      reliableTrDimensions: function () {\n        var table, tr, trChild, trStyle;\n        if (reliableTrDimensionsVal == null) {\n          table = document.createElement(\"table\");\n          tr = document.createElement(\"tr\");\n          trChild = document.createElement(\"div\");\n          table.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n          tr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n          // Support: Chrome 86+\n          // Height set through cssText does not get applied.\n          // Computed height then comes back as 0.\n          tr.style.height = \"1px\";\n          trChild.style.height = \"9px\";\n\n          // Support: Android 8 Chrome 86+\n          // In our bodyBackground.html iframe,\n          // display for all div elements is set to \"inline\",\n          // which causes a problem only in Android 8 Chrome 86.\n          // Ensuring the div is `display: block`\n          // gets around this issue.\n          trChild.style.display = \"block\";\n          documentElement.appendChild(table).appendChild(tr).appendChild(trChild);\n          trStyle = window.getComputedStyle(tr);\n          reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;\n          documentElement.removeChild(table);\n        }\n        return reliableTrDimensionsVal;\n      }\n    });\n  })();\n  function curCSS(elem, name, computed) {\n    var width,\n      minWidth,\n      maxWidth,\n      ret,\n      isCustomProp = rcustomProp.test(name),\n      // Support: Firefox 51+\n      // Retrieving style before computed somehow\n      // fixes an issue with getting wrong values\n      // on detached elements\n      style = elem.style;\n    computed = computed || getStyles(elem);\n\n    // getPropertyValue is needed for:\n    //   .css('filter') (IE 9 only, trac-12537)\n    //   .css('--customProperty) (gh-3144)\n    if (computed) {\n      // Support: IE <=9 - 11+\n      // IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n      // it's only available as `\"cssFloat\"`. We no longer modify properties\n      // sent to `.css()` apart from camelCasing, so we need to check both.\n      // Normally, this would create difference in behavior: if\n      // `getPropertyValue` returns an empty string, the value returned\n      // by `.css()` would be `undefined`. This is usually the case for\n      // disconnected elements. However, in IE even disconnected elements\n      // with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n      ret = computed.getPropertyValue(name) || computed[name];\n      if (isCustomProp && ret) {\n        // Support: Firefox 105+, Chrome <=105+\n        // Spec requires trimming whitespace for custom properties (gh-4926).\n        // Firefox only trims leading whitespace. Chrome just collapses\n        // both leading & trailing whitespace to a single space.\n        //\n        // Fall back to `undefined` if empty string returned.\n        // This collapses a missing definition with property defined\n        // and set to an empty string but there's no standard API\n        // allowing us to differentiate them without a performance penalty\n        // and returning `undefined` aligns with older jQuery.\n        //\n        // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n        // as whitespace while CSS does not, but this is not a problem\n        // because CSS preprocessing replaces them with U+000A LINE FEED\n        // (which *is* CSS whitespace)\n        // https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n        ret = ret.replace(rtrimCSS, \"$1\") || undefined;\n      }\n      if (ret === \"\" && !isAttached(elem)) {\n        ret = jQuery.style(elem, name);\n      }\n\n      // A tribute to the \"awesome hack by Dean Edwards\"\n      // Android Browser returns percentage for some values,\n      // but width seems to be reliably pixels.\n      // This is against the CSSOM draft spec:\n      // https://drafts.csswg.org/cssom/#resolved-values\n      if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n        // Remember the original values\n        width = style.width;\n        minWidth = style.minWidth;\n        maxWidth = style.maxWidth;\n\n        // Put in the new values to get a computed value out\n        style.minWidth = style.maxWidth = style.width = ret;\n        ret = computed.width;\n\n        // Revert the changed values\n        style.width = width;\n        style.minWidth = minWidth;\n        style.maxWidth = maxWidth;\n      }\n    }\n    return ret !== undefined ?\n    // Support: IE <=9 - 11 only\n    // IE returns zIndex value as an integer.\n    ret + \"\" : ret;\n  }\n  function addGetHookIf(conditionFn, hookFn) {\n    // Define the hook, we'll check on the first run if it's really needed.\n    return {\n      get: function () {\n        if (conditionFn()) {\n          // Hook not needed (or it's not possible to use it due\n          // to missing dependency), remove it.\n          delete this.get;\n          return;\n        }\n\n        // Hook needed; redefine it so that the support test is not executed again.\n        return (this.get = hookFn).apply(this, arguments);\n      }\n    };\n  }\n  var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n    emptyStyle = document.createElement(\"div\").style,\n    vendorProps = {};\n\n  // Return a vendor-prefixed property or undefined\n  function vendorPropName(name) {\n    // Check for vendor prefixed names\n    var capName = name[0].toUpperCase() + name.slice(1),\n      i = cssPrefixes.length;\n    while (i--) {\n      name = cssPrefixes[i] + capName;\n      if (name in emptyStyle) {\n        return name;\n      }\n    }\n  }\n\n  // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n  function finalPropName(name) {\n    var final = jQuery.cssProps[name] || vendorProps[name];\n    if (final) {\n      return final;\n    }\n    if (name in emptyStyle) {\n      return name;\n    }\n    return vendorProps[name] = vendorPropName(name) || name;\n  }\n  var\n    // Swappable if display is none or starts with table\n    // except \"table\", \"table-cell\", or \"table-caption\"\n    // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n    rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n    cssShow = {\n      position: \"absolute\",\n      visibility: \"hidden\",\n      display: \"block\"\n    },\n    cssNormalTransform = {\n      letterSpacing: \"0\",\n      fontWeight: \"400\"\n    };\n  function setPositiveNumber(_elem, value, subtract) {\n    // Any relative (+/-) values have already been\n    // normalized at this point\n    var matches = rcssNum.exec(value);\n    return matches ?\n    // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n    Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n  }\n  function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n    var i = dimension === \"width\" ? 1 : 0,\n      extra = 0,\n      delta = 0,\n      marginDelta = 0;\n\n    // Adjustment may not be necessary\n    if (box === (isBorderBox ? \"border\" : \"content\")) {\n      return 0;\n    }\n    for (; i < 4; i += 2) {\n      // Both box models exclude margin\n      // Count margin delta separately to only add it after scroll gutter adjustment.\n      // This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n      if (box === \"margin\") {\n        marginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n      }\n\n      // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n      if (!isBorderBox) {\n        // Add padding\n        delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n        // For \"border\" or \"margin\", add border\n        if (box !== \"padding\") {\n          delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n          // But still keep track of it otherwise\n        } else {\n          extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        }\n\n        // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n        // \"padding\" or \"margin\"\n      } else {\n        // For \"content\", subtract padding\n        if (box === \"content\") {\n          delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n        }\n\n        // For \"content\" or \"padding\", subtract border\n        if (box !== \"margin\") {\n          delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        }\n      }\n    }\n\n    // Account for positive content-box scroll gutter when requested by providing computedVal\n    if (!isBorderBox && computedVal >= 0) {\n      // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n      // Assuming integer scroll gutter, subtract the rest and round down\n      delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5\n\n      // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n      // Use an explicit zero to avoid NaN (gh-3964)\n      )) || 0;\n    }\n    return delta + marginDelta;\n  }\n  function getWidthOrHeight(elem, dimension, extra) {\n    // Start with computed style\n    var styles = getStyles(elem),\n      // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n      // Fake content-box until we know it's needed to know the true value.\n      boxSizingNeeded = !support.boxSizingReliable() || extra,\n      isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n      valueIsBorderBox = isBorderBox,\n      val = curCSS(elem, dimension, styles),\n      offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n    // Support: Firefox <=54\n    // Return a confounding non-pixel value or feign ignorance, as appropriate.\n    if (rnumnonpx.test(val)) {\n      if (!extra) {\n        return val;\n      }\n      val = \"auto\";\n    }\n\n    // Support: IE 9 - 11 only\n    // Use offsetWidth/offsetHeight for when box sizing is unreliable.\n    // In those cases, the computed value can be trusted to be border-box.\n    if ((!support.boxSizingReliable() && isBorderBox ||\n    // Support: IE 10 - 11+, Edge 15 - 18+\n    // IE/Edge misreport `getComputedStyle` of table rows with width/height\n    // set in CSS while `offset*` properties report correct values.\n    // Interestingly, in some cases IE 9 doesn't suffer from this issue.\n    !support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n    // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n    // This happens for inline elements with no explicit setting (gh-3571)\n    val === \"auto\" ||\n    // Support: Android <=4.1 - 4.3 only\n    // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n    !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n    // Make sure the element is visible & connected\n    elem.getClientRects().length) {\n      isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n      // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n      // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n      // retrieved value as a content box dimension.\n      valueIsBorderBox = offsetProp in elem;\n      if (valueIsBorderBox) {\n        val = elem[offsetProp];\n      }\n    }\n\n    // Normalize \"\" and auto\n    val = parseFloat(val) || 0;\n\n    // Adjust for the element's box model\n    return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles,\n    // Provide the current computed size to request scroll gutter calculation (gh-3589)\n    val) + \"px\";\n  }\n  jQuery.extend({\n    // Add in style property hooks for overriding the default\n    // behavior of getting and setting a style property\n    cssHooks: {\n      opacity: {\n        get: function (elem, computed) {\n          if (computed) {\n            // We should always get a number back from opacity\n            var ret = curCSS(elem, \"opacity\");\n            return ret === \"\" ? \"1\" : ret;\n          }\n        }\n      }\n    },\n    // Don't automatically add \"px\" to these possibly-unitless properties\n    cssNumber: {\n      animationIterationCount: true,\n      aspectRatio: true,\n      borderImageSlice: true,\n      columnCount: true,\n      flexGrow: true,\n      flexShrink: true,\n      fontWeight: true,\n      gridArea: true,\n      gridColumn: true,\n      gridColumnEnd: true,\n      gridColumnStart: true,\n      gridRow: true,\n      gridRowEnd: true,\n      gridRowStart: true,\n      lineHeight: true,\n      opacity: true,\n      order: true,\n      orphans: true,\n      scale: true,\n      widows: true,\n      zIndex: true,\n      zoom: true,\n      // SVG-related\n      fillOpacity: true,\n      floodOpacity: true,\n      stopOpacity: true,\n      strokeMiterlimit: true,\n      strokeOpacity: true\n    },\n    // Add in properties whose names you wish to fix before\n    // setting or getting the value\n    cssProps: {},\n    // Get and set the style property on a DOM Node\n    style: function (elem, name, value, extra) {\n      // Don't set styles on text and comment nodes\n      if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n        return;\n      }\n\n      // Make sure that we're working with the right name\n      var ret,\n        type,\n        hooks,\n        origName = camelCase(name),\n        isCustomProp = rcustomProp.test(name),\n        style = elem.style;\n\n      // Make sure that we're working with the right name. We don't\n      // want to query the value if it is a CSS custom property\n      // since they are user-defined.\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      }\n\n      // Gets hook for the prefixed version, then unprefixed version\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n      // Check if we're setting a value\n      if (value !== undefined) {\n        type = typeof value;\n\n        // Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n        if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n          value = adjustCSS(elem, name, ret);\n\n          // Fixes bug trac-9237\n          type = \"number\";\n        }\n\n        // Make sure that null and NaN values aren't set (trac-7116)\n        if (value == null || value !== value) {\n          return;\n        }\n\n        // If a number was passed in, add the unit (except for certain CSS properties)\n        // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n        // \"px\" to a few hardcoded values.\n        if (type === \"number\" && !isCustomProp) {\n          value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n        }\n\n        // background-* props affect original clone's values\n        if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n          style[name] = \"inherit\";\n        }\n\n        // If a hook was provided, use that value, otherwise just set the specified value\n        if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n          if (isCustomProp) {\n            style.setProperty(name, value);\n          } else {\n            style[name] = value;\n          }\n        }\n      } else {\n        // If a hook was provided get the non-computed value from there\n        if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n          return ret;\n        }\n\n        // Otherwise just get the value from the style object\n        return style[name];\n      }\n    },\n    css: function (elem, name, extra, styles) {\n      var val,\n        num,\n        hooks,\n        origName = camelCase(name),\n        isCustomProp = rcustomProp.test(name);\n\n      // Make sure that we're working with the right name. We don't\n      // want to modify the value if it is a CSS custom property\n      // since they are user-defined.\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      }\n\n      // Try prefixed name followed by the unprefixed name\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n      // If a hook was provided get the computed value from there\n      if (hooks && \"get\" in hooks) {\n        val = hooks.get(elem, true, extra);\n      }\n\n      // Otherwise, if a way to get the computed value exists, use that\n      if (val === undefined) {\n        val = curCSS(elem, name, styles);\n      }\n\n      // Convert \"normal\" to computed value\n      if (val === \"normal\" && name in cssNormalTransform) {\n        val = cssNormalTransform[name];\n      }\n\n      // Make numeric if forced or a qualifier was provided and val looks numeric\n      if (extra === \"\" || extra) {\n        num = parseFloat(val);\n        return extra === true || isFinite(num) ? num || 0 : val;\n      }\n      return val;\n    }\n  });\n  jQuery.each([\"height\", \"width\"], function (_i, dimension) {\n    jQuery.cssHooks[dimension] = {\n      get: function (elem, computed, extra) {\n        if (computed) {\n          // Certain elements can have dimension info if we invisibly show them\n          // but it must have a current display style that would benefit\n          return rdisplayswap.test(jQuery.css(elem, \"display\")) && (\n          // Support: Safari 8+\n          // Table columns in Safari have non-zero offsetWidth & zero\n          // getBoundingClientRect().width unless display is changed.\n          // Support: IE <=11 only\n          // Running getBoundingClientRect on a disconnected node\n          // in IE throws an error.\n          !elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n            return getWidthOrHeight(elem, dimension, extra);\n          }) : getWidthOrHeight(elem, dimension, extra);\n        }\n      },\n      set: function (elem, value, extra) {\n        var matches,\n          styles = getStyles(elem),\n          // Only read styles.position if the test has a chance to fail\n          // to avoid forcing a reflow.\n          scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\",\n          // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n          boxSizingNeeded = scrollboxSizeBuggy || extra,\n          isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n          subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0;\n\n        // Account for unreliable border-box dimensions by comparing offset* to computed and\n        // faking a content-box to get border and padding (gh-3699)\n        if (isBorderBox && scrollboxSizeBuggy) {\n          subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n        }\n\n        // Convert to pixels if value adjustment is needed\n        if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n          elem.style[dimension] = value;\n          value = jQuery.css(elem, dimension);\n        }\n        return setPositiveNumber(elem, value, subtract);\n      }\n    };\n  });\n  jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n    if (computed) {\n      return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n        marginLeft: 0\n      }, function () {\n        return elem.getBoundingClientRect().left;\n      })) + \"px\";\n    }\n  });\n\n  // These hooks are used by animate to expand properties\n  jQuery.each({\n    margin: \"\",\n    padding: \"\",\n    border: \"Width\"\n  }, function (prefix, suffix) {\n    jQuery.cssHooks[prefix + suffix] = {\n      expand: function (value) {\n        var i = 0,\n          expanded = {},\n          // Assumes a single number if not a string\n          parts = typeof value === \"string\" ? value.split(\" \") : [value];\n        for (; i < 4; i++) {\n          expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n        }\n        return expanded;\n      }\n    };\n    if (prefix !== \"margin\") {\n      jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n    }\n  });\n  jQuery.fn.extend({\n    css: function (name, value) {\n      return access(this, function (elem, name, value) {\n        var styles,\n          len,\n          map = {},\n          i = 0;\n        if (Array.isArray(name)) {\n          styles = getStyles(elem);\n          len = name.length;\n          for (; i < len; i++) {\n            map[name[i]] = jQuery.css(elem, name[i], false, styles);\n          }\n          return map;\n        }\n        return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n      }, name, value, arguments.length > 1);\n    }\n  });\n  function Tween(elem, options, prop, end, easing) {\n    return new Tween.prototype.init(elem, options, prop, end, easing);\n  }\n  jQuery.Tween = Tween;\n  Tween.prototype = {\n    constructor: Tween,\n    init: function (elem, options, prop, end, easing, unit) {\n      this.elem = elem;\n      this.prop = prop;\n      this.easing = easing || jQuery.easing._default;\n      this.options = options;\n      this.start = this.now = this.cur();\n      this.end = end;\n      this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n    },\n    cur: function () {\n      var hooks = Tween.propHooks[this.prop];\n      return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n    },\n    run: function (percent) {\n      var eased,\n        hooks = Tween.propHooks[this.prop];\n      if (this.options.duration) {\n        this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n      } else {\n        this.pos = eased = percent;\n      }\n      this.now = (this.end - this.start) * eased + this.start;\n      if (this.options.step) {\n        this.options.step.call(this.elem, this.now, this);\n      }\n      if (hooks && hooks.set) {\n        hooks.set(this);\n      } else {\n        Tween.propHooks._default.set(this);\n      }\n      return this;\n    }\n  };\n  Tween.prototype.init.prototype = Tween.prototype;\n  Tween.propHooks = {\n    _default: {\n      get: function (tween) {\n        var result;\n\n        // Use a property on the element directly when it is not a DOM element,\n        // or when there is no matching style property that exists.\n        if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n          return tween.elem[tween.prop];\n        }\n\n        // Passing an empty string as a 3rd parameter to .css will automatically\n        // attempt a parseFloat and fallback to a string if the parse fails.\n        // Simple values such as \"10px\" are parsed to Float;\n        // complex values such as \"rotate(1rad)\" are returned as-is.\n        result = jQuery.css(tween.elem, tween.prop, \"\");\n\n        // Empty strings, null, undefined and \"auto\" are converted to 0.\n        return !result || result === \"auto\" ? 0 : result;\n      },\n      set: function (tween) {\n        // Use step hook for back compat.\n        // Use cssHook if its there.\n        // Use .style if available and use plain properties where available.\n        if (jQuery.fx.step[tween.prop]) {\n          jQuery.fx.step[tween.prop](tween);\n        } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n          jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n        } else {\n          tween.elem[tween.prop] = tween.now;\n        }\n      }\n    }\n  };\n\n  // Support: IE <=9 only\n  // Panic based approach to setting things on disconnected nodes\n  Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n    set: function (tween) {\n      if (tween.elem.nodeType && tween.elem.parentNode) {\n        tween.elem[tween.prop] = tween.now;\n      }\n    }\n  };\n  jQuery.easing = {\n    linear: function (p) {\n      return p;\n    },\n    swing: function (p) {\n      return 0.5 - Math.cos(p * Math.PI) / 2;\n    },\n    _default: \"swing\"\n  };\n  jQuery.fx = Tween.prototype.init;\n\n  // Back compat <1.8 extension point\n  jQuery.fx.step = {};\n  var fxNow,\n    inProgress,\n    rfxtypes = /^(?:toggle|show|hide)$/,\n    rrun = /queueHooks$/;\n  function schedule() {\n    if (inProgress) {\n      if (document.hidden === false && window.requestAnimationFrame) {\n        window.requestAnimationFrame(schedule);\n      } else {\n        window.setTimeout(schedule, jQuery.fx.interval);\n      }\n      jQuery.fx.tick();\n    }\n  }\n\n  // Animations created synchronously will run synchronously\n  function createFxNow() {\n    window.setTimeout(function () {\n      fxNow = undefined;\n    });\n    return fxNow = Date.now();\n  }\n\n  // Generate parameters to create a standard animation\n  function genFx(type, includeWidth) {\n    var which,\n      i = 0,\n      attrs = {\n        height: type\n      };\n\n    // If we include width, step value is 1 to do all cssExpand values,\n    // otherwise step value is 2 to skip over Left and Right\n    includeWidth = includeWidth ? 1 : 0;\n    for (; i < 4; i += 2 - includeWidth) {\n      which = cssExpand[i];\n      attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n    }\n    if (includeWidth) {\n      attrs.opacity = attrs.width = type;\n    }\n    return attrs;\n  }\n  function createTween(value, prop, animation) {\n    var tween,\n      collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n      index = 0,\n      length = collection.length;\n    for (; index < length; index++) {\n      if (tween = collection[index].call(animation, prop, value)) {\n        // We're done with this property\n        return tween;\n      }\n    }\n  }\n  function defaultPrefilter(elem, props, opts) {\n    var prop,\n      value,\n      toggle,\n      hooks,\n      oldfire,\n      propTween,\n      restoreDisplay,\n      display,\n      isBox = \"width\" in props || \"height\" in props,\n      anim = this,\n      orig = {},\n      style = elem.style,\n      hidden = elem.nodeType && isHiddenWithinTree(elem),\n      dataShow = dataPriv.get(elem, \"fxshow\");\n\n    // Queue-skipping animations hijack the fx hooks\n    if (!opts.queue) {\n      hooks = jQuery._queueHooks(elem, \"fx\");\n      if (hooks.unqueued == null) {\n        hooks.unqueued = 0;\n        oldfire = hooks.empty.fire;\n        hooks.empty.fire = function () {\n          if (!hooks.unqueued) {\n            oldfire();\n          }\n        };\n      }\n      hooks.unqueued++;\n      anim.always(function () {\n        // Ensure the complete handler is called before this completes\n        anim.always(function () {\n          hooks.unqueued--;\n          if (!jQuery.queue(elem, \"fx\").length) {\n            hooks.empty.fire();\n          }\n        });\n      });\n    }\n\n    // Detect show/hide animations\n    for (prop in props) {\n      value = props[prop];\n      if (rfxtypes.test(value)) {\n        delete props[prop];\n        toggle = toggle || value === \"toggle\";\n        if (value === (hidden ? \"hide\" : \"show\")) {\n          // Pretend to be hidden if this is a \"show\" and\n          // there is still data from a stopped show/hide\n          if (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n            hidden = true;\n\n            // Ignore all other no-op show/hide data\n          } else {\n            continue;\n          }\n        }\n        orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n      }\n    }\n\n    // Bail out if this is a no-op like .hide().hide()\n    propTween = !jQuery.isEmptyObject(props);\n    if (!propTween && jQuery.isEmptyObject(orig)) {\n      return;\n    }\n\n    // Restrict \"overflow\" and \"display\" styles during box animations\n    if (isBox && elem.nodeType === 1) {\n      // Support: IE <=9 - 11, Edge 12 - 15\n      // Record all 3 overflow attributes because IE does not infer the shorthand\n      // from identically-valued overflowX and overflowY and Edge just mirrors\n      // the overflowX value there.\n      opts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n      // Identify a display type, preferring old show/hide data over the CSS cascade\n      restoreDisplay = dataShow && dataShow.display;\n      if (restoreDisplay == null) {\n        restoreDisplay = dataPriv.get(elem, \"display\");\n      }\n      display = jQuery.css(elem, \"display\");\n      if (display === \"none\") {\n        if (restoreDisplay) {\n          display = restoreDisplay;\n        } else {\n          // Get nonempty value(s) by temporarily forcing visibility\n          showHide([elem], true);\n          restoreDisplay = elem.style.display || restoreDisplay;\n          display = jQuery.css(elem, \"display\");\n          showHide([elem]);\n        }\n      }\n\n      // Animate inline elements as inline-block\n      if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n        if (jQuery.css(elem, \"float\") === \"none\") {\n          // Restore the original display value at the end of pure show/hide animations\n          if (!propTween) {\n            anim.done(function () {\n              style.display = restoreDisplay;\n            });\n            if (restoreDisplay == null) {\n              display = style.display;\n              restoreDisplay = display === \"none\" ? \"\" : display;\n            }\n          }\n          style.display = \"inline-block\";\n        }\n      }\n    }\n    if (opts.overflow) {\n      style.overflow = \"hidden\";\n      anim.always(function () {\n        style.overflow = opts.overflow[0];\n        style.overflowX = opts.overflow[1];\n        style.overflowY = opts.overflow[2];\n      });\n    }\n\n    // Implement show/hide animations\n    propTween = false;\n    for (prop in orig) {\n      // General show/hide setup for this element animation\n      if (!propTween) {\n        if (dataShow) {\n          if (\"hidden\" in dataShow) {\n            hidden = dataShow.hidden;\n          }\n        } else {\n          dataShow = dataPriv.access(elem, \"fxshow\", {\n            display: restoreDisplay\n          });\n        }\n\n        // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n        if (toggle) {\n          dataShow.hidden = !hidden;\n        }\n\n        // Show elements before animating them\n        if (hidden) {\n          showHide([elem], true);\n        }\n\n        /* eslint-disable no-loop-func */\n\n        anim.done(function () {\n          /* eslint-enable no-loop-func */\n\n          // The final step of a \"hide\" animation is actually hiding the element\n          if (!hidden) {\n            showHide([elem]);\n          }\n          dataPriv.remove(elem, \"fxshow\");\n          for (prop in orig) {\n            jQuery.style(elem, prop, orig[prop]);\n          }\n        });\n      }\n\n      // Per-property setup\n      propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n      if (!(prop in dataShow)) {\n        dataShow[prop] = propTween.start;\n        if (hidden) {\n          propTween.end = propTween.start;\n          propTween.start = 0;\n        }\n      }\n    }\n  }\n  function propFilter(props, specialEasing) {\n    var index, name, easing, value, hooks;\n\n    // camelCase, specialEasing and expand cssHook pass\n    for (index in props) {\n      name = camelCase(index);\n      easing = specialEasing[name];\n      value = props[index];\n      if (Array.isArray(value)) {\n        easing = value[1];\n        value = props[index] = value[0];\n      }\n      if (index !== name) {\n        props[name] = value;\n        delete props[index];\n      }\n      hooks = jQuery.cssHooks[name];\n      if (hooks && \"expand\" in hooks) {\n        value = hooks.expand(value);\n        delete props[name];\n\n        // Not quite $.extend, this won't overwrite existing keys.\n        // Reusing 'index' because we have the correct \"name\"\n        for (index in value) {\n          if (!(index in props)) {\n            props[index] = value[index];\n            specialEasing[index] = easing;\n          }\n        }\n      } else {\n        specialEasing[name] = easing;\n      }\n    }\n  }\n  function Animation(elem, properties, options) {\n    var result,\n      stopped,\n      index = 0,\n      length = Animation.prefilters.length,\n      deferred = jQuery.Deferred().always(function () {\n        // Don't match elem in the :animated selector\n        delete tick.elem;\n      }),\n      tick = function () {\n        if (stopped) {\n          return false;\n        }\n        var currentTime = fxNow || createFxNow(),\n          remaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n          // Support: Android 2.3 only\n          // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n          temp = remaining / animation.duration || 0,\n          percent = 1 - temp,\n          index = 0,\n          length = animation.tweens.length;\n        for (; index < length; index++) {\n          animation.tweens[index].run(percent);\n        }\n        deferred.notifyWith(elem, [animation, percent, remaining]);\n\n        // If there's more to do, yield\n        if (percent < 1 && length) {\n          return remaining;\n        }\n\n        // If this was an empty animation, synthesize a final progress notification\n        if (!length) {\n          deferred.notifyWith(elem, [animation, 1, 0]);\n        }\n\n        // Resolve the animation and report its conclusion\n        deferred.resolveWith(elem, [animation]);\n        return false;\n      },\n      animation = deferred.promise({\n        elem: elem,\n        props: jQuery.extend({}, properties),\n        opts: jQuery.extend(true, {\n          specialEasing: {},\n          easing: jQuery.easing._default\n        }, options),\n        originalProperties: properties,\n        originalOptions: options,\n        startTime: fxNow || createFxNow(),\n        duration: options.duration,\n        tweens: [],\n        createTween: function (prop, end) {\n          var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n          animation.tweens.push(tween);\n          return tween;\n        },\n        stop: function (gotoEnd) {\n          var index = 0,\n            // If we are going to the end, we want to run all the tweens\n            // otherwise we skip this part\n            length = gotoEnd ? animation.tweens.length : 0;\n          if (stopped) {\n            return this;\n          }\n          stopped = true;\n          for (; index < length; index++) {\n            animation.tweens[index].run(1);\n          }\n\n          // Resolve when we played the last frame; otherwise, reject\n          if (gotoEnd) {\n            deferred.notifyWith(elem, [animation, 1, 0]);\n            deferred.resolveWith(elem, [animation, gotoEnd]);\n          } else {\n            deferred.rejectWith(elem, [animation, gotoEnd]);\n          }\n          return this;\n        }\n      }),\n      props = animation.props;\n    propFilter(props, animation.opts.specialEasing);\n    for (; index < length; index++) {\n      result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n      if (result) {\n        if (isFunction(result.stop)) {\n          jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n        }\n        return result;\n      }\n    }\n    jQuery.map(props, createTween, animation);\n    if (isFunction(animation.opts.start)) {\n      animation.opts.start.call(elem, animation);\n    }\n\n    // Attach callbacks from options\n    animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n    jQuery.fx.timer(jQuery.extend(tick, {\n      elem: elem,\n      anim: animation,\n      queue: animation.opts.queue\n    }));\n    return animation;\n  }\n  jQuery.Animation = jQuery.extend(Animation, {\n    tweeners: {\n      \"*\": [function (prop, value) {\n        var tween = this.createTween(prop, value);\n        adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n        return tween;\n      }]\n    },\n    tweener: function (props, callback) {\n      if (isFunction(props)) {\n        callback = props;\n        props = [\"*\"];\n      } else {\n        props = props.match(rnothtmlwhite);\n      }\n      var prop,\n        index = 0,\n        length = props.length;\n      for (; index < length; index++) {\n        prop = props[index];\n        Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n        Animation.tweeners[prop].unshift(callback);\n      }\n    },\n    prefilters: [defaultPrefilter],\n    prefilter: function (callback, prepend) {\n      if (prepend) {\n        Animation.prefilters.unshift(callback);\n      } else {\n        Animation.prefilters.push(callback);\n      }\n    }\n  });\n  jQuery.speed = function (speed, easing, fn) {\n    var opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n      complete: fn || !fn && easing || isFunction(speed) && speed,\n      duration: speed,\n      easing: fn && easing || easing && !isFunction(easing) && easing\n    };\n\n    // Go to the end state if fx are off\n    if (jQuery.fx.off) {\n      opt.duration = 0;\n    } else {\n      if (typeof opt.duration !== \"number\") {\n        if (opt.duration in jQuery.fx.speeds) {\n          opt.duration = jQuery.fx.speeds[opt.duration];\n        } else {\n          opt.duration = jQuery.fx.speeds._default;\n        }\n      }\n    }\n\n    // Normalize opt.queue - true/undefined/null -> \"fx\"\n    if (opt.queue == null || opt.queue === true) {\n      opt.queue = \"fx\";\n    }\n\n    // Queueing\n    opt.old = opt.complete;\n    opt.complete = function () {\n      if (isFunction(opt.old)) {\n        opt.old.call(this);\n      }\n      if (opt.queue) {\n        jQuery.dequeue(this, opt.queue);\n      }\n    };\n    return opt;\n  };\n  jQuery.fn.extend({\n    fadeTo: function (speed, to, easing, callback) {\n      // Show any hidden elements after setting opacity to 0\n      return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n      // Animate to the value specified\n      .end().animate({\n        opacity: to\n      }, speed, easing, callback);\n    },\n    animate: function (prop, speed, easing, callback) {\n      var empty = jQuery.isEmptyObject(prop),\n        optall = jQuery.speed(speed, easing, callback),\n        doAnimation = function () {\n          // Operate on a copy of prop so per-property easing won't be lost\n          var anim = Animation(this, jQuery.extend({}, prop), optall);\n\n          // Empty animations, or finishing resolves immediately\n          if (empty || dataPriv.get(this, \"finish\")) {\n            anim.stop(true);\n          }\n        };\n      doAnimation.finish = doAnimation;\n      return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n    },\n    stop: function (type, clearQueue, gotoEnd) {\n      var stopQueue = function (hooks) {\n        var stop = hooks.stop;\n        delete hooks.stop;\n        stop(gotoEnd);\n      };\n      if (typeof type !== \"string\") {\n        gotoEnd = clearQueue;\n        clearQueue = type;\n        type = undefined;\n      }\n      if (clearQueue) {\n        this.queue(type || \"fx\", []);\n      }\n      return this.each(function () {\n        var dequeue = true,\n          index = type != null && type + \"queueHooks\",\n          timers = jQuery.timers,\n          data = dataPriv.get(this);\n        if (index) {\n          if (data[index] && data[index].stop) {\n            stopQueue(data[index]);\n          }\n        } else {\n          for (index in data) {\n            if (data[index] && data[index].stop && rrun.test(index)) {\n              stopQueue(data[index]);\n            }\n          }\n        }\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n            timers[index].anim.stop(gotoEnd);\n            dequeue = false;\n            timers.splice(index, 1);\n          }\n        }\n\n        // Start the next in the queue if the last step wasn't forced.\n        // Timers currently will call their complete callbacks, which\n        // will dequeue but only if they were gotoEnd.\n        if (dequeue || !gotoEnd) {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    finish: function (type) {\n      if (type !== false) {\n        type = type || \"fx\";\n      }\n      return this.each(function () {\n        var index,\n          data = dataPriv.get(this),\n          queue = data[type + \"queue\"],\n          hooks = data[type + \"queueHooks\"],\n          timers = jQuery.timers,\n          length = queue ? queue.length : 0;\n\n        // Enable finishing flag on private data\n        data.finish = true;\n\n        // Empty the queue first\n        jQuery.queue(this, type, []);\n        if (hooks && hooks.stop) {\n          hooks.stop.call(this, true);\n        }\n\n        // Look for any active animations, and finish them\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && timers[index].queue === type) {\n            timers[index].anim.stop(true);\n            timers.splice(index, 1);\n          }\n        }\n\n        // Look for any animations in the old queue and finish them\n        for (index = 0; index < length; index++) {\n          if (queue[index] && queue[index].finish) {\n            queue[index].finish.call(this);\n          }\n        }\n\n        // Turn off finishing flag\n        delete data.finish;\n      });\n    }\n  });\n  jQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n    var cssFn = jQuery.fn[name];\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n    };\n  });\n\n  // Generate shortcuts for custom animations\n  jQuery.each({\n    slideDown: genFx(\"show\"),\n    slideUp: genFx(\"hide\"),\n    slideToggle: genFx(\"toggle\"),\n    fadeIn: {\n      opacity: \"show\"\n    },\n    fadeOut: {\n      opacity: \"hide\"\n    },\n    fadeToggle: {\n      opacity: \"toggle\"\n    }\n  }, function (name, props) {\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return this.animate(props, speed, easing, callback);\n    };\n  });\n  jQuery.timers = [];\n  jQuery.fx.tick = function () {\n    var timer,\n      i = 0,\n      timers = jQuery.timers;\n    fxNow = Date.now();\n    for (; i < timers.length; i++) {\n      timer = timers[i];\n\n      // Run the timer and safely remove it when done (allowing for external removal)\n      if (!timer() && timers[i] === timer) {\n        timers.splice(i--, 1);\n      }\n    }\n    if (!timers.length) {\n      jQuery.fx.stop();\n    }\n    fxNow = undefined;\n  };\n  jQuery.fx.timer = function (timer) {\n    jQuery.timers.push(timer);\n    jQuery.fx.start();\n  };\n  jQuery.fx.interval = 13;\n  jQuery.fx.start = function () {\n    if (inProgress) {\n      return;\n    }\n    inProgress = true;\n    schedule();\n  };\n  jQuery.fx.stop = function () {\n    inProgress = null;\n  };\n  jQuery.fx.speeds = {\n    slow: 600,\n    fast: 200,\n    // Default speed\n    _default: 400\n  };\n\n  // Based off of the plugin by Clint Helfers, with permission.\n  jQuery.fn.delay = function (time, type) {\n    time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n    type = type || \"fx\";\n    return this.queue(type, function (next, hooks) {\n      var timeout = window.setTimeout(next, time);\n      hooks.stop = function () {\n        window.clearTimeout(timeout);\n      };\n    });\n  };\n  (function () {\n    var input = document.createElement(\"input\"),\n      select = document.createElement(\"select\"),\n      opt = select.appendChild(document.createElement(\"option\"));\n    input.type = \"checkbox\";\n\n    // Support: Android <=4.3 only\n    // Default value for a checkbox should be \"on\"\n    support.checkOn = input.value !== \"\";\n\n    // Support: IE <=11 only\n    // Must access selectedIndex to make default options select\n    support.optSelected = opt.selected;\n\n    // Support: IE <=11 only\n    // An input loses its value after becoming a radio\n    input = document.createElement(\"input\");\n    input.value = \"t\";\n    input.type = \"radio\";\n    support.radioValue = input.value === \"t\";\n  })();\n  var boolHook,\n    attrHandle = jQuery.expr.attrHandle;\n  jQuery.fn.extend({\n    attr: function (name, value) {\n      return access(this, jQuery.attr, name, value, arguments.length > 1);\n    },\n    removeAttr: function (name) {\n      return this.each(function () {\n        jQuery.removeAttr(this, name);\n      });\n    }\n  });\n  jQuery.extend({\n    attr: function (elem, name, value) {\n      var ret,\n        hooks,\n        nType = elem.nodeType;\n\n      // Don't get/set attributes on text, comment and attribute nodes\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      }\n\n      // Fallback to prop when attributes are not supported\n      if (typeof elem.getAttribute === \"undefined\") {\n        return jQuery.prop(elem, name, value);\n      }\n\n      // Attribute hooks are determined by the lowercase version\n      // Grab necessary hook if one is defined\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n      }\n      if (value !== undefined) {\n        if (value === null) {\n          jQuery.removeAttr(elem, name);\n          return;\n        }\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n        elem.setAttribute(name, value + \"\");\n        return value;\n      }\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n      ret = jQuery.find.attr(elem, name);\n\n      // Non-existent attributes return null, we normalize to undefined\n      return ret == null ? undefined : ret;\n    },\n    attrHooks: {\n      type: {\n        set: function (elem, value) {\n          if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n            var val = elem.value;\n            elem.setAttribute(\"type\", value);\n            if (val) {\n              elem.value = val;\n            }\n            return value;\n          }\n        }\n      }\n    },\n    removeAttr: function (elem, value) {\n      var name,\n        i = 0,\n        // Attribute names can contain non-HTML whitespace characters\n        // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n        attrNames = value && value.match(rnothtmlwhite);\n      if (attrNames && elem.nodeType === 1) {\n        while (name = attrNames[i++]) {\n          elem.removeAttribute(name);\n        }\n      }\n    }\n  });\n\n  // Hooks for boolean attributes\n  boolHook = {\n    set: function (elem, value, name) {\n      if (value === false) {\n        // Remove boolean attributes when set to false\n        jQuery.removeAttr(elem, name);\n      } else {\n        elem.setAttribute(name, name);\n      }\n      return name;\n    }\n  };\n  jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n    var getter = attrHandle[name] || jQuery.find.attr;\n    attrHandle[name] = function (elem, name, isXML) {\n      var ret,\n        handle,\n        lowercaseName = name.toLowerCase();\n      if (!isXML) {\n        // Avoid an infinite loop by temporarily removing this function from the getter\n        handle = attrHandle[lowercaseName];\n        attrHandle[lowercaseName] = ret;\n        ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n        attrHandle[lowercaseName] = handle;\n      }\n      return ret;\n    };\n  });\n  var rfocusable = /^(?:input|select|textarea|button)$/i,\n    rclickable = /^(?:a|area)$/i;\n  jQuery.fn.extend({\n    prop: function (name, value) {\n      return access(this, jQuery.prop, name, value, arguments.length > 1);\n    },\n    removeProp: function (name) {\n      return this.each(function () {\n        delete this[jQuery.propFix[name] || name];\n      });\n    }\n  });\n  jQuery.extend({\n    prop: function (elem, name, value) {\n      var ret,\n        hooks,\n        nType = elem.nodeType;\n\n      // Don't get/set properties on text, comment and attribute nodes\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      }\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        // Fix name and attach hooks\n        name = jQuery.propFix[name] || name;\n        hooks = jQuery.propHooks[name];\n      }\n      if (value !== undefined) {\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n        return elem[name] = value;\n      }\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n      return elem[name];\n    },\n    propHooks: {\n      tabIndex: {\n        get: function (elem) {\n          // Support: IE <=9 - 11 only\n          // elem.tabIndex doesn't always return the\n          // correct value when it hasn't been explicitly set\n          // Use proper attribute retrieval (trac-12072)\n          var tabindex = jQuery.find.attr(elem, \"tabindex\");\n          if (tabindex) {\n            return parseInt(tabindex, 10);\n          }\n          if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n            return 0;\n          }\n          return -1;\n        }\n      }\n    },\n    propFix: {\n      \"for\": \"htmlFor\",\n      \"class\": \"className\"\n    }\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\n  // eslint rule \"no-unused-expressions\" is disabled for this code\n  // since it considers such accessions noop\n  if (!support.optSelected) {\n    jQuery.propHooks.selected = {\n      get: function (elem) {\n        /* eslint no-unused-expressions: \"off\" */\n\n        var parent = elem.parentNode;\n        if (parent && parent.parentNode) {\n          parent.parentNode.selectedIndex;\n        }\n        return null;\n      },\n      set: function (elem) {\n        /* eslint no-unused-expressions: \"off\" */\n\n        var parent = elem.parentNode;\n        if (parent) {\n          parent.selectedIndex;\n          if (parent.parentNode) {\n            parent.parentNode.selectedIndex;\n          }\n        }\n      }\n    };\n  }\n  jQuery.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n    jQuery.propFix[this.toLowerCase()] = this;\n  });\n\n  // Strip and collapse whitespace according to HTML spec\n  // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n  function stripAndCollapse(value) {\n    var tokens = value.match(rnothtmlwhite) || [];\n    return tokens.join(\" \");\n  }\n  function getClass(elem) {\n    return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n  }\n  function classesToArray(value) {\n    if (Array.isArray(value)) {\n      return value;\n    }\n    if (typeof value === \"string\") {\n      return value.match(rnothtmlwhite) || [];\n    }\n    return [];\n  }\n  jQuery.fn.extend({\n    addClass: function (value) {\n      var classNames, cur, curValue, className, i, finalValue;\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).addClass(value.call(this, j, getClass(this)));\n        });\n      }\n      classNames = classesToArray(value);\n      if (classNames.length) {\n        return this.each(function () {\n          curValue = getClass(this);\n          cur = this.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n          if (cur) {\n            for (i = 0; i < classNames.length; i++) {\n              className = classNames[i];\n              if (cur.indexOf(\" \" + className + \" \") < 0) {\n                cur += className + \" \";\n              }\n            }\n\n            // Only assign if different to avoid unneeded rendering.\n            finalValue = stripAndCollapse(cur);\n            if (curValue !== finalValue) {\n              this.setAttribute(\"class\", finalValue);\n            }\n          }\n        });\n      }\n      return this;\n    },\n    removeClass: function (value) {\n      var classNames, cur, curValue, className, i, finalValue;\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).removeClass(value.call(this, j, getClass(this)));\n        });\n      }\n      if (!arguments.length) {\n        return this.attr(\"class\", \"\");\n      }\n      classNames = classesToArray(value);\n      if (classNames.length) {\n        return this.each(function () {\n          curValue = getClass(this);\n\n          // This expression is here for better compressibility (see addClass)\n          cur = this.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n          if (cur) {\n            for (i = 0; i < classNames.length; i++) {\n              className = classNames[i];\n\n              // Remove *all* instances\n              while (cur.indexOf(\" \" + className + \" \") > -1) {\n                cur = cur.replace(\" \" + className + \" \", \" \");\n              }\n            }\n\n            // Only assign if different to avoid unneeded rendering.\n            finalValue = stripAndCollapse(cur);\n            if (curValue !== finalValue) {\n              this.setAttribute(\"class\", finalValue);\n            }\n          }\n        });\n      }\n      return this;\n    },\n    toggleClass: function (value, stateVal) {\n      var classNames,\n        className,\n        i,\n        self,\n        type = typeof value,\n        isValidValue = type === \"string\" || Array.isArray(value);\n      if (isFunction(value)) {\n        return this.each(function (i) {\n          jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n        });\n      }\n      if (typeof stateVal === \"boolean\" && isValidValue) {\n        return stateVal ? this.addClass(value) : this.removeClass(value);\n      }\n      classNames = classesToArray(value);\n      return this.each(function () {\n        if (isValidValue) {\n          // Toggle individual class names\n          self = jQuery(this);\n          for (i = 0; i < classNames.length; i++) {\n            className = classNames[i];\n\n            // Check each className given, space separated list\n            if (self.hasClass(className)) {\n              self.removeClass(className);\n            } else {\n              self.addClass(className);\n            }\n          }\n\n          // Toggle whole class name\n        } else if (value === undefined || type === \"boolean\") {\n          className = getClass(this);\n          if (className) {\n            // Store className if set\n            dataPriv.set(this, \"__className__\", className);\n          }\n\n          // If the element has a class name or if we're passed `false`,\n          // then remove the whole classname (if there was one, the above saved it).\n          // Otherwise bring back whatever was previously saved (if anything),\n          // falling back to the empty string if nothing was stored.\n          if (this.setAttribute) {\n            this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n          }\n        }\n      });\n    },\n    hasClass: function (selector) {\n      var className,\n        elem,\n        i = 0;\n      className = \" \" + selector + \" \";\n      while (elem = this[i++]) {\n        if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n          return true;\n        }\n      }\n      return false;\n    }\n  });\n  var rreturn = /\\r/g;\n  jQuery.fn.extend({\n    val: function (value) {\n      var hooks,\n        ret,\n        valueIsFunction,\n        elem = this[0];\n      if (!arguments.length) {\n        if (elem) {\n          hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n          if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) {\n            return ret;\n          }\n          ret = elem.value;\n\n          // Handle most common string cases\n          if (typeof ret === \"string\") {\n            return ret.replace(rreturn, \"\");\n          }\n\n          // Handle cases where value is null/undef or number\n          return ret == null ? \"\" : ret;\n        }\n        return;\n      }\n      valueIsFunction = isFunction(value);\n      return this.each(function (i) {\n        var val;\n        if (this.nodeType !== 1) {\n          return;\n        }\n        if (valueIsFunction) {\n          val = value.call(this, i, jQuery(this).val());\n        } else {\n          val = value;\n        }\n\n        // Treat null/undefined as \"\"; convert numbers to string\n        if (val == null) {\n          val = \"\";\n        } else if (typeof val === \"number\") {\n          val += \"\";\n        } else if (Array.isArray(val)) {\n          val = jQuery.map(val, function (value) {\n            return value == null ? \"\" : value + \"\";\n          });\n        }\n        hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n        // If set returns undefined, fall back to normal setting\n        if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n          this.value = val;\n        }\n      });\n    }\n  });\n  jQuery.extend({\n    valHooks: {\n      option: {\n        get: function (elem) {\n          var val = jQuery.find.attr(elem, \"value\");\n          return val != null ? val :\n          // Support: IE <=10 - 11 only\n          // option.text throws exceptions (trac-14686, trac-14858)\n          // Strip and collapse whitespace\n          // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n          stripAndCollapse(jQuery.text(elem));\n        }\n      },\n      select: {\n        get: function (elem) {\n          var value,\n            option,\n            i,\n            options = elem.options,\n            index = elem.selectedIndex,\n            one = elem.type === \"select-one\",\n            values = one ? null : [],\n            max = one ? index + 1 : options.length;\n          if (index < 0) {\n            i = max;\n          } else {\n            i = one ? index : 0;\n          }\n\n          // Loop through all the selected options\n          for (; i < max; i++) {\n            option = options[i];\n\n            // Support: IE <=9 only\n            // IE8-9 doesn't update selected after form reset (trac-2551)\n            if ((option.selected || i === index) &&\n            // Don't return options that are disabled or in a disabled optgroup\n            !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n              // Get the specific value for the option\n              value = jQuery(option).val();\n\n              // We don't need an array for one selects\n              if (one) {\n                return value;\n              }\n\n              // Multi-Selects return an array\n              values.push(value);\n            }\n          }\n          return values;\n        },\n        set: function (elem, value) {\n          var optionSet,\n            option,\n            options = elem.options,\n            values = jQuery.makeArray(value),\n            i = options.length;\n          while (i--) {\n            option = options[i];\n\n            /* eslint-disable no-cond-assign */\n\n            if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n              optionSet = true;\n            }\n\n            /* eslint-enable no-cond-assign */\n          }\n\n          // Force browsers to behave consistently when non-matching value is set\n          if (!optionSet) {\n            elem.selectedIndex = -1;\n          }\n          return values;\n        }\n      }\n    }\n  });\n\n  // Radios and checkboxes getter/setter\n  jQuery.each([\"radio\", \"checkbox\"], function () {\n    jQuery.valHooks[this] = {\n      set: function (elem, value) {\n        if (Array.isArray(value)) {\n          return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n        }\n      }\n    };\n    if (!support.checkOn) {\n      jQuery.valHooks[this].get = function (elem) {\n        return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n      };\n    }\n  });\n\n  // Return jQuery for attributes-only inclusion\n  var location = window.location;\n  var nonce = {\n    guid: Date.now()\n  };\n  var rquery = /\\?/;\n\n  // Cross-browser xml parsing\n  jQuery.parseXML = function (data) {\n    var xml, parserErrorElem;\n    if (!data || typeof data !== \"string\") {\n      return null;\n    }\n\n    // Support: IE 9 - 11 only\n    // IE throws on parseFromString with invalid input.\n    try {\n      xml = new window.DOMParser().parseFromString(data, \"text/xml\");\n    } catch (e) {}\n    parserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n    if (!xml || parserErrorElem) {\n      jQuery.error(\"Invalid XML: \" + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function (el) {\n        return el.textContent;\n      }).join(\"\\n\") : data));\n    }\n    return xml;\n  };\n  var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n    stopPropagationCallback = function (e) {\n      e.stopPropagation();\n    };\n  jQuery.extend(jQuery.event, {\n    trigger: function (event, data, elem, onlyHandlers) {\n      var i,\n        cur,\n        tmp,\n        bubbleType,\n        ontype,\n        handle,\n        special,\n        lastElement,\n        eventPath = [elem || document],\n        type = hasOwn.call(event, \"type\") ? event.type : event,\n        namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n      cur = lastElement = tmp = elem = elem || document;\n\n      // Don't do events on text and comment nodes\n      if (elem.nodeType === 3 || elem.nodeType === 8) {\n        return;\n      }\n\n      // focus/blur morphs to focusin/out; ensure we're not firing them right now\n      if (rfocusMorph.test(type + jQuery.event.triggered)) {\n        return;\n      }\n      if (type.indexOf(\".\") > -1) {\n        // Namespaced trigger; create a regexp to match event type in handle()\n        namespaces = type.split(\".\");\n        type = namespaces.shift();\n        namespaces.sort();\n      }\n      ontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n      // Caller can pass in a jQuery.Event object, Object, or just an event type string\n      event = event[jQuery.expando] ? event : new jQuery.Event(type, typeof event === \"object\" && event);\n\n      // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n      event.isTrigger = onlyHandlers ? 2 : 3;\n      event.namespace = namespaces.join(\".\");\n      event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null;\n\n      // Clean up the event in case it is being reused\n      event.result = undefined;\n      if (!event.target) {\n        event.target = elem;\n      }\n\n      // Clone any incoming data and prepend the event, creating the handler arg list\n      data = data == null ? [event] : jQuery.makeArray(data, [event]);\n\n      // Allow special events to draw outside the lines\n      special = jQuery.event.special[type] || {};\n      if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n        return;\n      }\n\n      // Determine event propagation path in advance, per W3C events spec (trac-9951)\n      // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n      if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n        bubbleType = special.delegateType || type;\n        if (!rfocusMorph.test(bubbleType + type)) {\n          cur = cur.parentNode;\n        }\n        for (; cur; cur = cur.parentNode) {\n          eventPath.push(cur);\n          tmp = cur;\n        }\n\n        // Only add window if we got to document (e.g., not plain obj or detached DOM)\n        if (tmp === (elem.ownerDocument || document)) {\n          eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n        }\n      }\n\n      // Fire handlers on the event path\n      i = 0;\n      while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n        lastElement = cur;\n        event.type = i > 1 ? bubbleType : special.bindType || type;\n\n        // jQuery handler\n        handle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] && dataPriv.get(cur, \"handle\");\n        if (handle) {\n          handle.apply(cur, data);\n        }\n\n        // Native handler\n        handle = ontype && cur[ontype];\n        if (handle && handle.apply && acceptData(cur)) {\n          event.result = handle.apply(cur, data);\n          if (event.result === false) {\n            event.preventDefault();\n          }\n        }\n      }\n      event.type = type;\n\n      // If nobody prevented the default action, do it now\n      if (!onlyHandlers && !event.isDefaultPrevented()) {\n        if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n          // Call a native DOM method on the target with the same name as the event.\n          // Don't do default actions on window, that's where global variables be (trac-6170)\n          if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n            // Don't re-trigger an onFOO event when we call its FOO() method\n            tmp = elem[ontype];\n            if (tmp) {\n              elem[ontype] = null;\n            }\n\n            // Prevent re-triggering of the same event, since we already bubbled it above\n            jQuery.event.triggered = type;\n            if (event.isPropagationStopped()) {\n              lastElement.addEventListener(type, stopPropagationCallback);\n            }\n            elem[type]();\n            if (event.isPropagationStopped()) {\n              lastElement.removeEventListener(type, stopPropagationCallback);\n            }\n            jQuery.event.triggered = undefined;\n            if (tmp) {\n              elem[ontype] = tmp;\n            }\n          }\n        }\n      }\n      return event.result;\n    },\n    // Piggyback on a donor event to simulate a different one\n    // Used only for `focus(in | out)` events\n    simulate: function (type, elem, event) {\n      var e = jQuery.extend(new jQuery.Event(), event, {\n        type: type,\n        isSimulated: true\n      });\n      jQuery.event.trigger(e, null, elem);\n    }\n  });\n  jQuery.fn.extend({\n    trigger: function (type, data) {\n      return this.each(function () {\n        jQuery.event.trigger(type, data, this);\n      });\n    },\n    triggerHandler: function (type, data) {\n      var elem = this[0];\n      if (elem) {\n        return jQuery.event.trigger(type, data, elem, true);\n      }\n    }\n  });\n  var rbracket = /\\[\\]$/,\n    rCRLF = /\\r?\\n/g,\n    rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n    rsubmittable = /^(?:input|select|textarea|keygen)/i;\n  function buildParams(prefix, obj, traditional, add) {\n    var name;\n    if (Array.isArray(obj)) {\n      // Serialize array item.\n      jQuery.each(obj, function (i, v) {\n        if (traditional || rbracket.test(prefix)) {\n          // Treat each array item as a scalar.\n          add(prefix, v);\n        } else {\n          // Item is non-scalar (array or object), encode its numeric index.\n          buildParams(prefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n        }\n      });\n    } else if (!traditional && toType(obj) === \"object\") {\n      // Serialize object item.\n      for (name in obj) {\n        buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n      }\n    } else {\n      // Serialize scalar item.\n      add(prefix, obj);\n    }\n  }\n\n  // Serialize an array of form elements or a set of\n  // key/values into a query string\n  jQuery.param = function (a, traditional) {\n    var prefix,\n      s = [],\n      add = function (key, valueOrFunction) {\n        // If value is a function, invoke it and use its return value\n        var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n        s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n      };\n    if (a == null) {\n      return \"\";\n    }\n\n    // If an array was passed in, assume that it is an array of form elements.\n    if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n      // Serialize the form elements\n      jQuery.each(a, function () {\n        add(this.name, this.value);\n      });\n    } else {\n      // If traditional, encode the \"old\" way (the way 1.3.2 or older\n      // did it), otherwise encode params recursively.\n      for (prefix in a) {\n        buildParams(prefix, a[prefix], traditional, add);\n      }\n    }\n\n    // Return the resulting serialization\n    return s.join(\"&\");\n  };\n  jQuery.fn.extend({\n    serialize: function () {\n      return jQuery.param(this.serializeArray());\n    },\n    serializeArray: function () {\n      return this.map(function () {\n        // Can add propHook for \"elements\" to filter or add form elements\n        var elements = jQuery.prop(this, \"elements\");\n        return elements ? jQuery.makeArray(elements) : this;\n      }).filter(function () {\n        var type = this.type;\n\n        // Use .is( \":disabled\" ) so that fieldset[disabled] works\n        return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n      }).map(function (_i, elem) {\n        var val = jQuery(this).val();\n        if (val == null) {\n          return null;\n        }\n        if (Array.isArray(val)) {\n          return jQuery.map(val, function (val) {\n            return {\n              name: elem.name,\n              value: val.replace(rCRLF, \"\\r\\n\")\n            };\n          });\n        }\n        return {\n          name: elem.name,\n          value: val.replace(rCRLF, \"\\r\\n\")\n        };\n      }).get();\n    }\n  });\n  var r20 = /%20/g,\n    rhash = /#.*$/,\n    rantiCache = /([?&])_=[^&]*/,\n    rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n    // trac-7653, trac-8125, trac-8152: local protocol detection\n    rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n    rnoContent = /^(?:GET|HEAD)$/,\n    rprotocol = /^\\/\\//,\n    /* Prefilters\n     * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n     * 2) These are called:\n     *    - BEFORE asking for a transport\n     *    - AFTER param serialization (s.data is a string if s.processData is true)\n     * 3) key is the dataType\n     * 4) the catchall symbol \"*\" can be used\n     * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n     */\n    prefilters = {},\n    /* Transports bindings\n     * 1) key is the dataType\n     * 2) the catchall symbol \"*\" can be used\n     * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n     */\n    transports = {},\n    // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n    allTypes = \"*/\".concat(\"*\"),\n    // Anchor tag for parsing the document origin\n    originAnchor = document.createElement(\"a\");\n  originAnchor.href = location.href;\n\n  // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n  function addToPrefiltersOrTransports(structure) {\n    // dataTypeExpression is optional and defaults to \"*\"\n    return function (dataTypeExpression, func) {\n      if (typeof dataTypeExpression !== \"string\") {\n        func = dataTypeExpression;\n        dataTypeExpression = \"*\";\n      }\n      var dataType,\n        i = 0,\n        dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n      if (isFunction(func)) {\n        // For each dataType in the dataTypeExpression\n        while (dataType = dataTypes[i++]) {\n          // Prepend if requested\n          if (dataType[0] === \"+\") {\n            dataType = dataType.slice(1) || \"*\";\n            (structure[dataType] = structure[dataType] || []).unshift(func);\n\n            // Otherwise append\n          } else {\n            (structure[dataType] = structure[dataType] || []).push(func);\n          }\n        }\n      }\n    };\n  }\n\n  // Base inspection function for prefilters and transports\n  function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n    var inspected = {},\n      seekingTransport = structure === transports;\n    function inspect(dataType) {\n      var selected;\n      inspected[dataType] = true;\n      jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n        var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n        if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n          options.dataTypes.unshift(dataTypeOrTransport);\n          inspect(dataTypeOrTransport);\n          return false;\n        } else if (seekingTransport) {\n          return !(selected = dataTypeOrTransport);\n        }\n      });\n      return selected;\n    }\n    return 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 trac-9887\n  function ajaxExtend(target, src) {\n    var key,\n      deep,\n      flatOptions = jQuery.ajaxSettings.flatOptions || {};\n    for (key in src) {\n      if (src[key] !== undefined) {\n        (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n      }\n    }\n    if (deep) {\n      jQuery.extend(true, target, deep);\n    }\n    return 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   */\n  function ajaxHandleResponses(s, jqXHR, responses) {\n    var ct,\n      type,\n      finalDataType,\n      firstDataType,\n      contents = s.contents,\n      dataTypes = s.dataTypes;\n\n    // Remove auto dataType and get content-type in the process\n    while (dataTypes[0] === \"*\") {\n      dataTypes.shift();\n      if (ct === undefined) {\n        ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n      }\n    }\n\n    // Check if we're dealing with a known content-type\n    if (ct) {\n      for (type in contents) {\n        if (contents[type] && contents[type].test(ct)) {\n          dataTypes.unshift(type);\n          break;\n        }\n      }\n    }\n\n    // Check to see if we have a response for the expected dataType\n    if (dataTypes[0] in responses) {\n      finalDataType = dataTypes[0];\n    } else {\n      // Try convertible dataTypes\n      for (type in responses) {\n        if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n          finalDataType = type;\n          break;\n        }\n        if (!firstDataType) {\n          firstDataType = type;\n        }\n      }\n\n      // Or just use first one\n      finalDataType = finalDataType || firstDataType;\n    }\n\n    // If we found a dataType\n    // We add the dataType to the list if needed\n    // and return the corresponding response\n    if (finalDataType) {\n      if (finalDataType !== dataTypes[0]) {\n        dataTypes.unshift(finalDataType);\n      }\n      return responses[finalDataType];\n    }\n  }\n\n  /* Chain conversions given the request and the original response\n   * Also sets the responseXXX fields on the jqXHR instance\n   */\n  function ajaxConvert(s, response, jqXHR, isSuccess) {\n    var conv2,\n      current,\n      conv,\n      tmp,\n      prev,\n      converters = {},\n      // Work with a copy of dataTypes in case we need to modify it for conversion\n      dataTypes = s.dataTypes.slice();\n\n    // Create converters map with lowercased keys\n    if (dataTypes[1]) {\n      for (conv in s.converters) {\n        converters[conv.toLowerCase()] = s.converters[conv];\n      }\n    }\n    current = dataTypes.shift();\n\n    // Convert to each sequential dataType\n    while (current) {\n      if (s.responseFields[current]) {\n        jqXHR[s.responseFields[current]] = response;\n      }\n\n      // Apply the dataFilter if provided\n      if (!prev && isSuccess && s.dataFilter) {\n        response = s.dataFilter(response, s.dataType);\n      }\n      prev = current;\n      current = dataTypes.shift();\n      if (current) {\n        // There's only work to do if current dataType is non-auto\n        if (current === \"*\") {\n          current = prev;\n\n          // Convert response if prev dataType is non-auto and differs from current\n        } else if (prev !== \"*\" && prev !== current) {\n          // Seek a direct converter\n          conv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n          // If none found, seek a pair\n          if (!conv) {\n            for (conv2 in converters) {\n              // If conv2 outputs current\n              tmp = conv2.split(\" \");\n              if (tmp[1] === current) {\n                // If prev can be converted to accepted input\n                conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n                if (conv) {\n                  // Condense equivalence converters\n                  if (conv === true) {\n                    conv = converters[conv2];\n\n                    // Otherwise, insert the intermediate dataType\n                  } else if (converters[conv2] !== true) {\n                    current = tmp[0];\n                    dataTypes.unshift(tmp[1]);\n                  }\n                  break;\n                }\n              }\n            }\n          }\n\n          // Apply converter (if not an equivalence)\n          if (conv !== true) {\n            // Unless errors are allowed to bubble, catch and return them\n            if (conv && s.throws) {\n              response = conv(response);\n            } else {\n              try {\n                response = conv(response);\n              } catch (e) {\n                return {\n                  state: \"parsererror\",\n                  error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n                };\n              }\n            }\n          }\n        }\n      }\n    }\n    return {\n      state: \"success\",\n      data: response\n    };\n  }\n  jQuery.extend({\n    // Counter for holding the number of active queries\n    active: 0,\n    // Last-Modified header cache for next request\n    lastModified: {},\n    etag: {},\n    ajaxSettings: {\n      url: location.href,\n      type: \"GET\",\n      isLocal: rlocalProtocol.test(location.protocol),\n      global: true,\n      processData: true,\n      async: true,\n      contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n      /*\n      timeout: 0,\n      data: null,\n      dataType: null,\n      username: null,\n      password: null,\n      cache: null,\n      throws: false,\n      traditional: false,\n      headers: {},\n      */\n\n      accepts: {\n        \"*\": allTypes,\n        text: \"text/plain\",\n        html: \"text/html\",\n        xml: \"application/xml, text/xml\",\n        json: \"application/json, text/javascript\"\n      },\n      contents: {\n        xml: /\\bxml\\b/,\n        html: /\\bhtml/,\n        json: /\\bjson\\b/\n      },\n      responseFields: {\n        xml: \"responseXML\",\n        text: \"responseText\",\n        json: \"responseJSON\"\n      },\n      // Data converters\n      // Keys separate source (or catchall \"*\") and destination types with a single space\n      converters: {\n        // Convert anything to text\n        \"* text\": String,\n        // Text to html (true = no transformation)\n        \"text html\": true,\n        // Evaluate text as a json expression\n        \"text json\": JSON.parse,\n        // Parse text as xml\n        \"text xml\": jQuery.parseXML\n      },\n      // For options that shouldn't be deep extended:\n      // you can add your own custom options here if\n      // and when you create one that shouldn't be\n      // deep extended (see ajaxExtend)\n      flatOptions: {\n        url: true,\n        context: true\n      }\n    },\n    // Creates a full fledged settings object into target\n    // with both ajaxSettings and settings fields.\n    // If target is omitted, writes into ajaxSettings.\n    ajaxSetup: function (target, settings) {\n      return settings ?\n      // Building a settings object\n      ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n      // Extending ajaxSettings\n      ajaxExtend(jQuery.ajaxSettings, target);\n    },\n    ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n    ajaxTransport: addToPrefiltersOrTransports(transports),\n    // Main method\n    ajax: function (url, options) {\n      // If url is an object, simulate pre-1.5 signature\n      if (typeof url === \"object\") {\n        options = url;\n        url = undefined;\n      }\n\n      // Force options to be an object\n      options = options || {};\n      var transport,\n        // URL without anti-cache param\n        cacheURL,\n        // Response headers\n        responseHeadersString,\n        responseHeaders,\n        // timeout handle\n        timeoutTimer,\n        // Url cleanup var\n        urlAnchor,\n        // Request state (becomes false upon send and true upon completion)\n        completed,\n        // To know if global events are to be dispatched\n        fireGlobals,\n        // Loop variable\n        i,\n        // uncached part of the url\n        uncached,\n        // Create the final options object\n        s = jQuery.ajaxSetup({}, options),\n        // Callbacks context\n        callbackContext = s.context || s,\n        // Context for global events is callbackContext if it is a DOM node or jQuery collection\n        globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,\n        // Deferreds\n        deferred = jQuery.Deferred(),\n        completeDeferred = jQuery.Callbacks(\"once memory\"),\n        // Status-dependent callbacks\n        statusCode = s.statusCode || {},\n        // Headers (they are sent all at once)\n        requestHeaders = {},\n        requestHeadersNames = {},\n        // Default abort message\n        strAbort = \"canceled\",\n        // Fake xhr\n        jqXHR = {\n          readyState: 0,\n          // Builds headers hashtable if needed\n          getResponseHeader: function (key) {\n            var match;\n            if (completed) {\n              if (!responseHeaders) {\n                responseHeaders = {};\n                while (match = rheaders.exec(responseHeadersString)) {\n                  responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n                }\n              }\n              match = responseHeaders[key.toLowerCase() + \" \"];\n            }\n            return match == null ? null : match.join(\", \");\n          },\n          // Raw string\n          getAllResponseHeaders: function () {\n            return completed ? responseHeadersString : null;\n          },\n          // Caches the header\n          setRequestHeader: function (name, value) {\n            if (completed == null) {\n              name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n              requestHeaders[name] = value;\n            }\n            return this;\n          },\n          // Overrides response content-type header\n          overrideMimeType: function (type) {\n            if (completed == null) {\n              s.mimeType = type;\n            }\n            return this;\n          },\n          // Status-dependent callbacks\n          statusCode: function (map) {\n            var code;\n            if (map) {\n              if (completed) {\n                // Execute the appropriate callbacks\n                jqXHR.always(map[jqXHR.status]);\n              } else {\n                // Lazy-add the new callbacks in a way that preserves old ones\n                for (code in map) {\n                  statusCode[code] = [statusCode[code], map[code]];\n                }\n              }\n            }\n            return this;\n          },\n          // Cancel the request\n          abort: function (statusText) {\n            var finalText = statusText || strAbort;\n            if (transport) {\n              transport.abort(finalText);\n            }\n            done(0, finalText);\n            return this;\n          }\n        };\n\n      // Attach deferreds\n      deferred.promise(jqXHR);\n\n      // Add protocol if not provided (prefilters might expect it)\n      // Handle falsy url in the settings object (trac-10093: consistency with old signature)\n      // We also use the url parameter if available\n      s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\");\n\n      // Alias method option to type as per ticket trac-12004\n      s.type = options.method || options.type || s.method || s.type;\n\n      // Extract dataTypes list\n      s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n      // A cross-domain request is in order when the origin doesn't match the current origin.\n      if (s.crossDomain == null) {\n        urlAnchor = document.createElement(\"a\");\n\n        // Support: IE <=8 - 11, Edge 12 - 15\n        // IE throws exception on accessing the href property if url is malformed,\n        // e.g. http://example.com:80x/\n        try {\n          urlAnchor.href = s.url;\n\n          // Support: IE <=8 - 11 only\n          // Anchor's host property isn't correctly set when s.url is relative\n          urlAnchor.href = urlAnchor.href;\n          s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n        } catch (e) {\n          // If there is an error parsing the URL, assume it is crossDomain,\n          // it can be rejected by the transport if it is invalid\n          s.crossDomain = true;\n        }\n      }\n\n      // Convert data if not already a string\n      if (s.data && s.processData && typeof s.data !== \"string\") {\n        s.data = jQuery.param(s.data, s.traditional);\n      }\n\n      // Apply prefilters\n      inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n      // If request was aborted inside a prefilter, stop there\n      if (completed) {\n        return jqXHR;\n      }\n\n      // We can fire global events as of now if asked to\n      // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n      fireGlobals = jQuery.event && s.global;\n\n      // Watch for a new set of requests\n      if (fireGlobals && jQuery.active++ === 0) {\n        jQuery.event.trigger(\"ajaxStart\");\n      }\n\n      // Uppercase the type\n      s.type = s.type.toUpperCase();\n\n      // Determine if request has content\n      s.hasContent = !rnoContent.test(s.type);\n\n      // Save the URL in case we're toying with the If-Modified-Since\n      // and/or If-None-Match header later on\n      // Remove hash to simplify url manipulation\n      cacheURL = s.url.replace(rhash, \"\");\n\n      // More options handling for requests with no content\n      if (!s.hasContent) {\n        // Remember the hash so we can put it back\n        uncached = s.url.slice(cacheURL.length);\n\n        // If data is available and should be processed, append data to url\n        if (s.data && (s.processData || typeof s.data === \"string\")) {\n          cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n          // trac-9682: remove data so that it's not used in an eventual retry\n          delete s.data;\n        }\n\n        // Add or update anti-cache param if needed\n        if (s.cache === false) {\n          cacheURL = cacheURL.replace(rantiCache, \"$1\");\n          uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce.guid++ + uncached;\n        }\n\n        // Put hash and anti-cache on the URL that will be requested (gh-1732)\n        s.url = cacheURL + uncached;\n\n        // Change '%20' to '+' if this is encoded form body content (gh-2658)\n      } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n        s.data = s.data.replace(r20, \"+\");\n      }\n\n      // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n      if (s.ifModified) {\n        if (jQuery.lastModified[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n        }\n        if (jQuery.etag[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n        }\n      }\n\n      // Set the correct header, if data is being sent\n      if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n        jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n      }\n\n      // Set the Accepts header for the server, depending on the dataType\n      jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]);\n\n      // Check for headers option\n      for (i in s.headers) {\n        jqXHR.setRequestHeader(i, s.headers[i]);\n      }\n\n      // Allow custom headers/mimetypes and early abort\n      if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n        // Abort if not done already and return\n        return jqXHR.abort();\n      }\n\n      // Aborting is no longer a cancellation\n      strAbort = \"abort\";\n\n      // Install callbacks on deferreds\n      completeDeferred.add(s.complete);\n      jqXHR.done(s.success);\n      jqXHR.fail(s.error);\n\n      // Get transport\n      transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n      // If no transport, we auto-abort\n      if (!transport) {\n        done(-1, \"No Transport\");\n      } else {\n        jqXHR.readyState = 1;\n\n        // Send global event\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n        }\n\n        // If request was aborted inside ajaxSend, stop there\n        if (completed) {\n          return jqXHR;\n        }\n\n        // Timeout\n        if (s.async && s.timeout > 0) {\n          timeoutTimer = window.setTimeout(function () {\n            jqXHR.abort(\"timeout\");\n          }, s.timeout);\n        }\n        try {\n          completed = false;\n          transport.send(requestHeaders, done);\n        } catch (e) {\n          // Rethrow post-completion exceptions\n          if (completed) {\n            throw e;\n          }\n\n          // Propagate others as results\n          done(-1, e);\n        }\n      }\n\n      // Callback for when everything is done\n      function done(status, nativeStatusText, responses, headers) {\n        var isSuccess,\n          success,\n          error,\n          response,\n          modified,\n          statusText = nativeStatusText;\n\n        // Ignore repeat invocations\n        if (completed) {\n          return;\n        }\n        completed = true;\n\n        // Clear timeout if it exists\n        if (timeoutTimer) {\n          window.clearTimeout(timeoutTimer);\n        }\n\n        // Dereference transport for early garbage collection\n        // (no matter how long the jqXHR object will be used)\n        transport = undefined;\n\n        // Cache response headers\n        responseHeadersString = headers || \"\";\n\n        // Set readyState\n        jqXHR.readyState = status > 0 ? 4 : 0;\n\n        // Determine if successful\n        isSuccess = status >= 200 && status < 300 || status === 304;\n\n        // Get response data\n        if (responses) {\n          response = ajaxHandleResponses(s, jqXHR, responses);\n        }\n\n        // Use a noop converter for missing script but not if jsonp\n        if (!isSuccess && jQuery.inArray(\"script\", s.dataTypes) > -1 && jQuery.inArray(\"json\", s.dataTypes) < 0) {\n          s.converters[\"text script\"] = function () {};\n        }\n\n        // Convert no matter what (that way responseXXX fields are always set)\n        response = ajaxConvert(s, response, jqXHR, isSuccess);\n\n        // If successful, handle type chaining\n        if (isSuccess) {\n          // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n          if (s.ifModified) {\n            modified = jqXHR.getResponseHeader(\"Last-Modified\");\n            if (modified) {\n              jQuery.lastModified[cacheURL] = modified;\n            }\n            modified = jqXHR.getResponseHeader(\"etag\");\n            if (modified) {\n              jQuery.etag[cacheURL] = modified;\n            }\n          }\n\n          // if no content\n          if (status === 204 || s.type === \"HEAD\") {\n            statusText = \"nocontent\";\n\n            // if not modified\n          } else if (status === 304) {\n            statusText = \"notmodified\";\n\n            // If we have data, let's convert it\n          } else {\n            statusText = response.state;\n            success = response.data;\n            error = response.error;\n            isSuccess = !error;\n          }\n        } else {\n          // Extract error from statusText and normalize for non-aborts\n          error = statusText;\n          if (status || !statusText) {\n            statusText = \"error\";\n            if (status < 0) {\n              status = 0;\n            }\n          }\n        }\n\n        // Set data for the fake xhr object\n        jqXHR.status = status;\n        jqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n        // Success/Error\n        if (isSuccess) {\n          deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n        } else {\n          deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n        }\n\n        // Status-dependent callbacks\n        jqXHR.statusCode(statusCode);\n        statusCode = undefined;\n        if (fireGlobals) {\n          globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [jqXHR, s, isSuccess ? success : error]);\n        }\n\n        // Complete\n        completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n          // Handle the global AJAX counter\n          if (! --jQuery.active) {\n            jQuery.event.trigger(\"ajaxStop\");\n          }\n        }\n      }\n      return jqXHR;\n    },\n    getJSON: function (url, data, callback) {\n      return jQuery.get(url, data, callback, \"json\");\n    },\n    getScript: function (url, callback) {\n      return jQuery.get(url, undefined, callback, \"script\");\n    }\n  });\n  jQuery.each([\"get\", \"post\"], function (_i, method) {\n    jQuery[method] = function (url, data, callback, type) {\n      // Shift arguments if data argument was omitted\n      if (isFunction(data)) {\n        type = type || callback;\n        callback = data;\n        data = undefined;\n      }\n\n      // The url can be an options object (which then must have .url)\n      return jQuery.ajax(jQuery.extend({\n        url: url,\n        type: method,\n        dataType: type,\n        data: data,\n        success: callback\n      }, jQuery.isPlainObject(url) && url));\n    };\n  });\n  jQuery.ajaxPrefilter(function (s) {\n    var i;\n    for (i in s.headers) {\n      if (i.toLowerCase() === \"content-type\") {\n        s.contentType = s.headers[i] || \"\";\n      }\n    }\n  });\n  jQuery._evalUrl = function (url, options, doc) {\n    return jQuery.ajax({\n      url: url,\n      // Make this explicit, since user can override this through ajaxSetup (trac-11264)\n      type: \"GET\",\n      dataType: \"script\",\n      cache: true,\n      async: false,\n      global: false,\n      // Only evaluate the response if it is successful (gh-4126)\n      // dataFilter is not invoked for failure responses, so using it instead\n      // of the default converter is kludgy but it works.\n      converters: {\n        \"text script\": function () {}\n      },\n      dataFilter: function (response) {\n        jQuery.globalEval(response, options, doc);\n      }\n    });\n  };\n  jQuery.fn.extend({\n    wrapAll: function (html) {\n      var wrap;\n      if (this[0]) {\n        if (isFunction(html)) {\n          html = html.call(this[0]);\n        }\n\n        // The elements to wrap the target around\n        wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n        if (this[0].parentNode) {\n          wrap.insertBefore(this[0]);\n        }\n        wrap.map(function () {\n          var elem = this;\n          while (elem.firstElementChild) {\n            elem = elem.firstElementChild;\n          }\n          return elem;\n        }).append(this);\n      }\n      return this;\n    },\n    wrapInner: function (html) {\n      if (isFunction(html)) {\n        return this.each(function (i) {\n          jQuery(this).wrapInner(html.call(this, i));\n        });\n      }\n      return this.each(function () {\n        var self = jQuery(this),\n          contents = self.contents();\n        if (contents.length) {\n          contents.wrapAll(html);\n        } else {\n          self.append(html);\n        }\n      });\n    },\n    wrap: function (html) {\n      var htmlIsFunction = isFunction(html);\n      return this.each(function (i) {\n        jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n      });\n    },\n    unwrap: function (selector) {\n      this.parent(selector).not(\"body\").each(function () {\n        jQuery(this).replaceWith(this.childNodes);\n      });\n      return this;\n    }\n  });\n  jQuery.expr.pseudos.hidden = function (elem) {\n    return !jQuery.expr.pseudos.visible(elem);\n  };\n  jQuery.expr.pseudos.visible = function (elem) {\n    return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n  };\n  jQuery.ajaxSettings.xhr = function () {\n    try {\n      return new window.XMLHttpRequest();\n    } catch (e) {}\n  };\n  var xhrSuccessStatus = {\n      // File protocol always yields status code 0, assume 200\n      0: 200,\n      // Support: IE <=9 only\n      // trac-1450: sometimes IE returns 1223 when it should be 204\n      1223: 204\n    },\n    xhrSupported = jQuery.ajaxSettings.xhr();\n  support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n  support.ajax = xhrSupported = !!xhrSupported;\n  jQuery.ajaxTransport(function (options) {\n    var callback, errorCallback;\n\n    // Cross domain only allowed if supported through XMLHttpRequest\n    if (support.cors || xhrSupported && !options.crossDomain) {\n      return {\n        send: function (headers, complete) {\n          var i,\n            xhr = options.xhr();\n          xhr.open(options.type, options.url, options.async, options.username, options.password);\n\n          // Apply custom fields if provided\n          if (options.xhrFields) {\n            for (i in options.xhrFields) {\n              xhr[i] = options.xhrFields[i];\n            }\n          }\n\n          // Override mime type if needed\n          if (options.mimeType && xhr.overrideMimeType) {\n            xhr.overrideMimeType(options.mimeType);\n          }\n\n          // X-Requested-With header\n          // For cross-domain requests, seeing as conditions for a preflight are\n          // akin to a jigsaw puzzle, we simply never set it to be sure.\n          // (it can always be set on a per-request basis or even using ajaxSetup)\n          // For same-domain requests, won't change header if already provided.\n          if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n            headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n          }\n\n          // Set headers\n          for (i in headers) {\n            xhr.setRequestHeader(i, headers[i]);\n          }\n\n          // Callback\n          callback = function (type) {\n            return function () {\n              if (callback) {\n                callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n                if (type === \"abort\") {\n                  xhr.abort();\n                } else if (type === \"error\") {\n                  // Support: IE <=9 only\n                  // On a manual native abort, IE9 throws\n                  // errors on any property access that is not readyState\n                  if (typeof xhr.status !== \"number\") {\n                    complete(0, \"error\");\n                  } else {\n                    complete(\n                    // File: protocol always yields status 0; see trac-8605, trac-14207\n                    xhr.status, xhr.statusText);\n                  }\n                } else {\n                  complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText,\n                  // Support: IE <=9 only\n                  // IE9 has no XHR2 but throws on binary (trac-11426)\n                  // For XHR2 non-text, let the caller handle it (gh-2498)\n                  (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n                    binary: xhr.response\n                  } : {\n                    text: xhr.responseText\n                  }, xhr.getAllResponseHeaders());\n                }\n              }\n            };\n          };\n\n          // Listen to events\n          xhr.onload = callback();\n          errorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n          // Support: IE 9 only\n          // Use onreadystatechange to replace onabort\n          // to handle uncaught aborts\n          if (xhr.onabort !== undefined) {\n            xhr.onabort = errorCallback;\n          } else {\n            xhr.onreadystatechange = function () {\n              // Check readyState before timeout as it changes\n              if (xhr.readyState === 4) {\n                // Allow onerror to be called first,\n                // but that will not handle a native abort\n                // Also, save errorCallback to a variable\n                // as xhr.onerror cannot be accessed\n                window.setTimeout(function () {\n                  if (callback) {\n                    errorCallback();\n                  }\n                });\n              }\n            };\n          }\n\n          // Create the abort callback\n          callback = callback(\"abort\");\n          try {\n            // Do send the request (this may raise an exception)\n            xhr.send(options.hasContent && options.data || null);\n          } catch (e) {\n            // trac-14683: Only rethrow if this hasn't been notified as an error yet\n            if (callback) {\n              throw e;\n            }\n          }\n        },\n        abort: function () {\n          if (callback) {\n            callback();\n          }\n        }\n      };\n    }\n  });\n\n  // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n  jQuery.ajaxPrefilter(function (s) {\n    if (s.crossDomain) {\n      s.contents.script = false;\n    }\n  });\n\n  // Install script dataType\n  jQuery.ajaxSetup({\n    accepts: {\n      script: \"text/javascript, application/javascript, \" + \"application/ecmascript, application/x-ecmascript\"\n    },\n    contents: {\n      script: /\\b(?:java|ecma)script\\b/\n    },\n    converters: {\n      \"text script\": function (text) {\n        jQuery.globalEval(text);\n        return text;\n      }\n    }\n  });\n\n  // Handle cache's special case and crossDomain\n  jQuery.ajaxPrefilter(\"script\", function (s) {\n    if (s.cache === undefined) {\n      s.cache = false;\n    }\n    if (s.crossDomain) {\n      s.type = \"GET\";\n    }\n  });\n\n  // Bind script tag hack transport\n  jQuery.ajaxTransport(\"script\", function (s) {\n    // This transport only deals with cross domain or forced-by-attrs requests\n    if (s.crossDomain || s.scriptAttrs) {\n      var script, callback;\n      return {\n        send: function (_, complete) {\n          script = jQuery(\"<script>\").attr(s.scriptAttrs || {}).prop({\n            charset: s.scriptCharset,\n            src: s.url\n          }).on(\"load error\", callback = function (evt) {\n            script.remove();\n            callback = null;\n            if (evt) {\n              complete(evt.type === \"error\" ? 404 : 200, evt.type);\n            }\n          });\n\n          // Use native DOM manipulation to avoid our domManip AJAX trickery\n          document.head.appendChild(script[0]);\n        },\n        abort: function () {\n          if (callback) {\n            callback();\n          }\n        }\n      };\n    }\n  });\n  var oldCallbacks = [],\n    rjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n  // Default jsonp settings\n  jQuery.ajaxSetup({\n    jsonp: \"callback\",\n    jsonpCallback: function () {\n      var callback = oldCallbacks.pop() || jQuery.expando + \"_\" + nonce.guid++;\n      this[callback] = true;\n      return callback;\n    }\n  });\n\n  // Detect, normalize options and install callbacks for jsonp requests\n  jQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n    var callbackName,\n      overwritten,\n      responseContainer,\n      jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? \"url\" : typeof s.data === \"string\" && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0 && rjsonp.test(s.data) && \"data\");\n\n    // Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n    if (jsonProp || s.dataTypes[0] === \"jsonp\") {\n      // Get callback name, remembering preexisting value associated with it\n      callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;\n\n      // Insert callback into url or form data\n      if (jsonProp) {\n        s[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n      } else if (s.jsonp !== false) {\n        s.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n      }\n\n      // Use data converter to retrieve json after script execution\n      s.converters[\"script json\"] = function () {\n        if (!responseContainer) {\n          jQuery.error(callbackName + \" was not called\");\n        }\n        return responseContainer[0];\n      };\n\n      // Force json dataType\n      s.dataTypes[0] = \"json\";\n\n      // Install callback\n      overwritten = window[callbackName];\n      window[callbackName] = function () {\n        responseContainer = arguments;\n      };\n\n      // Clean-up function (fires after converters)\n      jqXHR.always(function () {\n        // If previous value didn't exist - remove it\n        if (overwritten === undefined) {\n          jQuery(window).removeProp(callbackName);\n\n          // Otherwise restore preexisting value\n        } else {\n          window[callbackName] = overwritten;\n        }\n\n        // Save back as free\n        if (s[callbackName]) {\n          // Make sure that re-using the options doesn't screw things around\n          s.jsonpCallback = originalSettings.jsonpCallback;\n\n          // Save the callback name for future use\n          oldCallbacks.push(callbackName);\n        }\n\n        // Call if it was a function and we have a response\n        if (responseContainer && isFunction(overwritten)) {\n          overwritten(responseContainer[0]);\n        }\n        responseContainer = overwritten = undefined;\n      });\n\n      // Delegate to script\n      return \"script\";\n    }\n  });\n\n  // Support: Safari 8 only\n  // In Safari 8 documents created via document.implementation.createHTMLDocument\n  // collapse sibling forms: the second one becomes a child of the first one.\n  // Because of that, this security measure has to be disabled in Safari 8.\n  // https://bugs.webkit.org/show_bug.cgi?id=137337\n  support.createHTMLDocument = function () {\n    var body = document.implementation.createHTMLDocument(\"\").body;\n    body.innerHTML = \"<form></form><form></form>\";\n    return body.childNodes.length === 2;\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\n  jQuery.parseHTML = function (data, context, keepScripts) {\n    if (typeof data !== \"string\") {\n      return [];\n    }\n    if (typeof context === \"boolean\") {\n      keepScripts = context;\n      context = false;\n    }\n    var base, parsed, scripts;\n    if (!context) {\n      // Stop scripts or inline event handlers from being executed immediately\n      // by using document.implementation\n      if (support.createHTMLDocument) {\n        context = document.implementation.createHTMLDocument(\"\");\n\n        // Set the base href for the created document\n        // so any parsed elements with URLs\n        // are based on the document's URL (gh-2965)\n        base = context.createElement(\"base\");\n        base.href = document.location.href;\n        context.head.appendChild(base);\n      } else {\n        context = document;\n      }\n    }\n    parsed = rsingleTag.exec(data);\n    scripts = !keepScripts && [];\n\n    // Single tag\n    if (parsed) {\n      return [context.createElement(parsed[1])];\n    }\n    parsed = buildFragment([data], context, scripts);\n    if (scripts && scripts.length) {\n      jQuery(scripts).remove();\n    }\n    return jQuery.merge([], parsed.childNodes);\n  };\n\n  /**\n   * Load a url into a page\n   */\n  jQuery.fn.load = function (url, params, callback) {\n    var selector,\n      type,\n      response,\n      self = this,\n      off = url.indexOf(\" \");\n    if (off > -1) {\n      selector = stripAndCollapse(url.slice(off));\n      url = url.slice(0, off);\n    }\n\n    // If it's a function\n    if (isFunction(params)) {\n      // We assume that it's the callback\n      callback = params;\n      params = undefined;\n\n      // Otherwise, build a param string\n    } else if (params && typeof params === \"object\") {\n      type = \"POST\";\n    }\n\n    // If we have elements to modify, make the request\n    if (self.length > 0) {\n      jQuery.ajax({\n        url: url,\n        // If \"type\" variable is undefined, then \"GET\" method will be used.\n        // Make value of this field explicit since\n        // user can override it through ajaxSetup method\n        type: type || \"GET\",\n        dataType: \"html\",\n        data: params\n      }).done(function (responseText) {\n        // Save response for use in complete callback\n        response = arguments;\n        self.html(selector ?\n        // If a selector was specified, locate the right elements in a dummy div\n        // Exclude scripts to avoid IE 'Permission Denied' errors\n        jQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n        // Otherwise use the full result\n        responseText);\n\n        // If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n        // but they are ignored because response was set above.\n        // If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n      }).always(callback && function (jqXHR, status) {\n        self.each(function () {\n          callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n        });\n      });\n    }\n    return this;\n  };\n  jQuery.expr.pseudos.animated = function (elem) {\n    return jQuery.grep(jQuery.timers, function (fn) {\n      return elem === fn.elem;\n    }).length;\n  };\n  jQuery.offset = {\n    setOffset: function (elem, options, i) {\n      var curPosition,\n        curLeft,\n        curCSSTop,\n        curTop,\n        curOffset,\n        curCSSLeft,\n        calculatePosition,\n        position = jQuery.css(elem, \"position\"),\n        curElem = jQuery(elem),\n        props = {};\n\n      // Set position first, in-case top/left are set even on static elem\n      if (position === \"static\") {\n        elem.style.position = \"relative\";\n      }\n      curOffset = curElem.offset();\n      curCSSTop = jQuery.css(elem, \"top\");\n      curCSSLeft = jQuery.css(elem, \"left\");\n      calculatePosition = (position === \"absolute\" || position === \"fixed\") && (curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n      // Need to be able to calculate position if either\n      // top or left is auto and position is either absolute or fixed\n      if (calculatePosition) {\n        curPosition = curElem.position();\n        curTop = curPosition.top;\n        curLeft = curPosition.left;\n      } else {\n        curTop = parseFloat(curCSSTop) || 0;\n        curLeft = parseFloat(curCSSLeft) || 0;\n      }\n      if (isFunction(options)) {\n        // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n        options = options.call(elem, i, jQuery.extend({}, curOffset));\n      }\n      if (options.top != null) {\n        props.top = options.top - curOffset.top + curTop;\n      }\n      if (options.left != null) {\n        props.left = options.left - curOffset.left + curLeft;\n      }\n      if (\"using\" in options) {\n        options.using.call(elem, props);\n      } else {\n        curElem.css(props);\n      }\n    }\n  };\n  jQuery.fn.extend({\n    // offset() relates an element's border box to the document origin\n    offset: function (options) {\n      // Preserve chaining for setter\n      if (arguments.length) {\n        return options === undefined ? this : this.each(function (i) {\n          jQuery.offset.setOffset(this, options, i);\n        });\n      }\n      var rect,\n        win,\n        elem = this[0];\n      if (!elem) {\n        return;\n      }\n\n      // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n      // Support: IE <=11 only\n      // Running getBoundingClientRect on a\n      // disconnected node in IE throws an error\n      if (!elem.getClientRects().length) {\n        return {\n          top: 0,\n          left: 0\n        };\n      }\n\n      // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n      rect = elem.getBoundingClientRect();\n      win = elem.ownerDocument.defaultView;\n      return {\n        top: rect.top + win.pageYOffset,\n        left: rect.left + win.pageXOffset\n      };\n    },\n    // position() relates an element's margin box to its offset parent's padding box\n    // This corresponds to the behavior of CSS absolute positioning\n    position: function () {\n      if (!this[0]) {\n        return;\n      }\n      var offsetParent,\n        offset,\n        doc,\n        elem = this[0],\n        parentOffset = {\n          top: 0,\n          left: 0\n        };\n\n      // position:fixed elements are offset from the viewport, which itself always has zero offset\n      if (jQuery.css(elem, \"position\") === \"fixed\") {\n        // Assume position:fixed implies availability of getBoundingClientRect\n        offset = elem.getBoundingClientRect();\n      } else {\n        offset = this.offset();\n\n        // Account for the *real* offset parent, which can be the document or its root element\n        // when a statically positioned element is identified\n        doc = elem.ownerDocument;\n        offsetParent = elem.offsetParent || doc.documentElement;\n        while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.parentNode;\n        }\n        if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n          // Incorporate borders into its offset, since they are outside its content origin\n          parentOffset = jQuery(offsetParent).offset();\n          parentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n          parentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n        }\n      }\n\n      // Subtract parent offsets and element margins\n      return {\n        top: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n        left: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n      };\n    },\n    // This method will return documentElement in the following cases:\n    // 1) For the element inside the iframe without offsetParent, this method will return\n    //    documentElement of the parent window\n    // 2) For the hidden or detached element\n    // 3) For body or html element, i.e. in case of the html node - it will return itself\n    //\n    // but those exceptions were never presented as a real life use-cases\n    // and might be considered as more preferable results.\n    //\n    // This logic, however, is not guaranteed and can change at any point in the future\n    offsetParent: function () {\n      return this.map(function () {\n        var offsetParent = this.offsetParent;\n        while (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.offsetParent;\n        }\n        return offsetParent || documentElement;\n      });\n    }\n  });\n\n  // Create scrollLeft and scrollTop methods\n  jQuery.each({\n    scrollLeft: \"pageXOffset\",\n    scrollTop: \"pageYOffset\"\n  }, function (method, prop) {\n    var top = \"pageYOffset\" === prop;\n    jQuery.fn[method] = function (val) {\n      return access(this, function (elem, method, val) {\n        // Coalesce documents and windows\n        var win;\n        if (isWindow(elem)) {\n          win = elem;\n        } else if (elem.nodeType === 9) {\n          win = elem.defaultView;\n        }\n        if (val === undefined) {\n          return win ? win[prop] : elem[method];\n        }\n        if (win) {\n          win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);\n        } else {\n          elem[method] = val;\n        }\n      }, method, val, arguments.length);\n    };\n  });\n\n  // Support: Safari <=7 - 9.1, Chrome <=37 - 49\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://bugs.chromium.org/p/chromium/issues/detail?id=589347\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\n  jQuery.each([\"top\", \"left\"], function (_i, prop) {\n    jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {\n      if (computed) {\n        computed = curCSS(elem, prop);\n\n        // If curCSS returns percentage, fallback to offset\n        return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + \"px\" : computed;\n      }\n    });\n  });\n\n  // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n  jQuery.each({\n    Height: \"height\",\n    Width: \"width\"\n  }, function (name, type) {\n    jQuery.each({\n      padding: \"inner\" + name,\n      content: type,\n      \"\": \"outer\" + name\n    }, function (defaultExtra, funcName) {\n      // Margin is only for outerHeight, outerWidth\n      jQuery.fn[funcName] = function (margin, value) {\n        var chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n          extra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n        return access(this, function (elem, type, value) {\n          var doc;\n          if (isWindow(elem)) {\n            // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n            return funcName.indexOf(\"outer\") === 0 ? elem[\"inner\" + name] : elem.document.documentElement[\"client\" + name];\n          }\n\n          // Get document width or height\n          if (elem.nodeType === 9) {\n            doc = elem.documentElement;\n\n            // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n            // whichever is greatest\n            return Math.max(elem.body[\"scroll\" + name], doc[\"scroll\" + name], elem.body[\"offset\" + name], doc[\"offset\" + name], doc[\"client\" + name]);\n          }\n          return value === undefined ?\n          // Get width or height on the element, requesting but not forcing parseFloat\n          jQuery.css(elem, type, extra) :\n          // Set width or height on the element\n          jQuery.style(elem, type, value, extra);\n        }, type, chainable ? margin : undefined, chainable);\n      };\n    });\n  });\n  jQuery.each([\"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\"], function (_i, type) {\n    jQuery.fn[type] = function (fn) {\n      return this.on(type, fn);\n    };\n  });\n  jQuery.fn.extend({\n    bind: function (types, data, fn) {\n      return this.on(types, null, data, fn);\n    },\n    unbind: function (types, fn) {\n      return this.off(types, null, fn);\n    },\n    delegate: function (selector, types, data, fn) {\n      return this.on(types, selector, data, fn);\n    },\n    undelegate: function (selector, types, fn) {\n      // ( namespace ) or ( selector, types [, fn] )\n      return arguments.length === 1 ? this.off(selector, \"**\") : this.off(types, selector || \"**\", fn);\n    },\n    hover: function (fnOver, fnOut) {\n      return this.on(\"mouseenter\", fnOver).on(\"mouseleave\", fnOut || fnOver);\n    }\n  });\n  jQuery.each((\"blur focus focusin focusout resize scroll click dblclick \" + \"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" + \"change select submit keydown keypress keyup contextmenu\").split(\" \"), function (_i, name) {\n    // Handle event binding\n    jQuery.fn[name] = function (data, fn) {\n      return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);\n    };\n  });\n\n  // Support: Android <=4.0 only\n  // Make sure we trim BOM and NBSP\n  // Require that the \"whitespace run\" starts from a non-whitespace\n  // to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n  var rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n  // Bind a function to a context, optionally partially applying any\n  // arguments.\n  // jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n  // However, it is not slated for removal any time soon\n  jQuery.proxy = function (fn, context) {\n    var tmp, args, proxy;\n    if (typeof context === \"string\") {\n      tmp = fn[context];\n      context = fn;\n      fn = tmp;\n    }\n\n    // Quick check to determine if target is callable, in the spec\n    // this throws a TypeError, but we will just return undefined.\n    if (!isFunction(fn)) {\n      return undefined;\n    }\n\n    // Simulated bind\n    args = slice.call(arguments, 2);\n    proxy = function () {\n      return fn.apply(context || this, args.concat(slice.call(arguments)));\n    };\n\n    // Set the guid of unique handler to the same of original handler, so it can be removed\n    proxy.guid = fn.guid = fn.guid || jQuery.guid++;\n    return proxy;\n  };\n  jQuery.holdReady = function (hold) {\n    if (hold) {\n      jQuery.readyWait++;\n    } else {\n      jQuery.ready(true);\n    }\n  };\n  jQuery.isArray = Array.isArray;\n  jQuery.parseJSON = JSON.parse;\n  jQuery.nodeName = nodeName;\n  jQuery.isFunction = isFunction;\n  jQuery.isWindow = isWindow;\n  jQuery.camelCase = camelCase;\n  jQuery.type = toType;\n  jQuery.now = Date.now;\n  jQuery.isNumeric = function (obj) {\n    // As of jQuery 3.0, isNumeric is limited to\n    // strings and numbers (primitives or objects)\n    // that can be coerced to finite numbers (gh-2662)\n    var type = jQuery.type(obj);\n    return (type === \"number\" || type === \"string\") &&\n    // parseFloat NaNs numeric-cast false positives (\"\")\n    // ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n    // subtraction forces infinities to NaN\n    !isNaN(obj - parseFloat(obj));\n  };\n  jQuery.trim = function (text) {\n    return text == null ? \"\" : (text + \"\").replace(rtrim, \"$1\");\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\n  if (typeof define === \"function\" && define.amd) {\n    define(\"jquery\", [], function () {\n      return jQuery;\n    });\n  }\n  var\n    // Map over jQuery in case of overwrite\n    _jQuery = window.jQuery,\n    // Map over the $ in case of overwrite\n    _$ = window.$;\n  jQuery.noConflict = function (deep) {\n    if (window.$ === jQuery) {\n      window.$ = _$;\n    }\n    if (deep && window.jQuery === jQuery) {\n      window.jQuery = _jQuery;\n    }\n    return jQuery;\n  };\n\n  // Expose jQuery and $ identifiers, even in AMD\n  // (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n  // and CommonJS for browser emulators (trac-13566)\n  if (typeof noGlobal === \"undefined\") {\n    window.jQuery = window.$ = jQuery;\n  }\n  return jQuery;\n});","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n  return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n  if (target === void 0) {\n    target = {};\n  }\n  if (src === void 0) {\n    src = {};\n  }\n  Object.keys(src).forEach(key => {\n    if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n      extend(target[key], src[key]);\n    }\n  });\n}\nconst ssrDocument = {\n  body: {},\n  addEventListener() {},\n  removeEventListener() {},\n  activeElement: {\n    blur() {},\n    nodeName: ''\n  },\n  querySelector() {\n    return null;\n  },\n  querySelectorAll() {\n    return [];\n  },\n  getElementById() {\n    return null;\n  },\n  createEvent() {\n    return {\n      initEvent() {}\n    };\n  },\n  createElement() {\n    return {\n      children: [],\n      childNodes: [],\n      style: {},\n      setAttribute() {},\n      getElementsByTagName() {\n        return [];\n      }\n    };\n  },\n  createElementNS() {\n    return {};\n  },\n  importNode() {\n    return null;\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  }\n};\nfunction getDocument() {\n  const doc = typeof document !== 'undefined' ? document : {};\n  extend(doc, ssrDocument);\n  return doc;\n}\nconst ssrWindow = {\n  document: ssrDocument,\n  navigator: {\n    userAgent: ''\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  },\n  history: {\n    replaceState() {},\n    pushState() {},\n    go() {},\n    back() {}\n  },\n  CustomEvent: function CustomEvent() {\n    return this;\n  },\n  addEventListener() {},\n  removeEventListener() {},\n  getComputedStyle() {\n    return {\n      getPropertyValue() {\n        return '';\n      }\n    };\n  },\n  Image() {},\n  Date() {},\n  screen: {},\n  setTimeout() {},\n  clearTimeout() {},\n  matchMedia() {\n    return {};\n  },\n  requestAnimationFrame(callback) {\n    if (typeof setTimeout === 'undefined') {\n      callback();\n      return null;\n    }\n    return setTimeout(callback, 0);\n  },\n  cancelAnimationFrame(id) {\n    if (typeof setTimeout === 'undefined') {\n      return;\n    }\n    clearTimeout(id);\n  }\n};\nfunction getWindow() {\n  const win = typeof window !== 'undefined' ? window : {};\n  extend(win, ssrWindow);\n  return win;\n}\nexport { getWindow as a, getDocument as g };","/*!\n * FilePond 4.30.4\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = global || self, factory(global.FilePond = {}));\n})(this, function (exports) {\n  'use strict';\n\n  var isNode = function isNode(value) {\n    return value instanceof HTMLElement;\n  };\n  var createStore = function createStore(initialState) {\n    var queries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    var actions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n    // internal state\n    var state = Object.assign({}, initialState);\n\n    // contains all actions for next frame, is clear when actions are requested\n    var actionQueue = [];\n    var dispatchQueue = [];\n\n    // returns a duplicate of the current state\n    var getState = function getState() {\n      return Object.assign({}, state);\n    };\n\n    // returns a duplicate of the actions array and clears the actions array\n    var processActionQueue = function processActionQueue() {\n      // create copy of actions queue\n      var queue = [].concat(actionQueue);\n\n      // clear actions queue (we don't want no double actions)\n      actionQueue.length = 0;\n      return queue;\n    };\n\n    // processes actions that might block the main UI thread\n    var processDispatchQueue = function processDispatchQueue() {\n      // create copy of actions queue\n      var queue = [].concat(dispatchQueue);\n\n      // clear actions queue (we don't want no double actions)\n      dispatchQueue.length = 0;\n\n      // now dispatch these actions\n      queue.forEach(function (_ref) {\n        var type = _ref.type,\n          data = _ref.data;\n        dispatch(type, data);\n      });\n    };\n\n    // adds a new action, calls its handler and\n    var dispatch = function dispatch(type, data, isBlocking) {\n      // is blocking action (should never block if document is hidden)\n      if (isBlocking && !document.hidden) {\n        dispatchQueue.push({\n          type: type,\n          data: data\n        });\n        return;\n      }\n\n      // if this action has a handler, handle the action\n      if (actionHandlers[type]) {\n        actionHandlers[type](data);\n      }\n\n      // now add action\n      actionQueue.push({\n        type: type,\n        data: data\n      });\n    };\n    var query = function query(str) {\n      var _queryHandles;\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      return queryHandles[str] ? (_queryHandles = queryHandles)[str].apply(_queryHandles, args) : null;\n    };\n    var api = {\n      getState: getState,\n      processActionQueue: processActionQueue,\n      processDispatchQueue: processDispatchQueue,\n      dispatch: dispatch,\n      query: query\n    };\n    var queryHandles = {};\n    queries.forEach(function (query) {\n      queryHandles = Object.assign({}, query(state), {}, queryHandles);\n    });\n    var actionHandlers = {};\n    actions.forEach(function (action) {\n      actionHandlers = Object.assign({}, action(dispatch, query, state), {}, actionHandlers);\n    });\n    return api;\n  };\n  var defineProperty = function defineProperty(obj, property, definition) {\n    if (typeof definition === 'function') {\n      obj[property] = definition;\n      return;\n    }\n    Object.defineProperty(obj, property, Object.assign({}, definition));\n  };\n  var forin = function forin(obj, cb) {\n    for (var key in obj) {\n      if (!obj.hasOwnProperty(key)) {\n        continue;\n      }\n      cb(key, obj[key]);\n    }\n  };\n  var createObject = function createObject(definition) {\n    var obj = {};\n    forin(definition, function (property) {\n      defineProperty(obj, property, definition[property]);\n    });\n    return obj;\n  };\n  var attr = function attr(node, name) {\n    var value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    if (value === null) {\n      return node.getAttribute(name) || node.hasAttribute(name);\n    }\n    node.setAttribute(name, value);\n  };\n  var ns = 'http://www.w3.org/2000/svg';\n  var svgElements = ['svg', 'path']; // only svg elements used\n\n  var isSVGElement = function isSVGElement(tag) {\n    return svgElements.includes(tag);\n  };\n  var createElement = function createElement(tag, className) {\n    var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    if (typeof className === 'object') {\n      attributes = className;\n      className = null;\n    }\n    var element = isSVGElement(tag) ? document.createElementNS(ns, tag) : document.createElement(tag);\n    if (className) {\n      if (isSVGElement(tag)) {\n        attr(element, 'class', className);\n      } else {\n        element.className = className;\n      }\n    }\n    forin(attributes, function (name, value) {\n      attr(element, name, value);\n    });\n    return element;\n  };\n  var appendChild = function appendChild(parent) {\n    return function (child, index) {\n      if (typeof index !== 'undefined' && parent.children[index]) {\n        parent.insertBefore(child, parent.children[index]);\n      } else {\n        parent.appendChild(child);\n      }\n    };\n  };\n  var appendChildView = function appendChildView(parent, childViews) {\n    return function (view, index) {\n      if (typeof index !== 'undefined') {\n        childViews.splice(index, 0, view);\n      } else {\n        childViews.push(view);\n      }\n      return view;\n    };\n  };\n  var removeChildView = function removeChildView(parent, childViews) {\n    return function (view) {\n      // remove from child views\n      childViews.splice(childViews.indexOf(view), 1);\n\n      // remove the element\n      if (view.element.parentNode) {\n        parent.removeChild(view.element);\n      }\n      return view;\n    };\n  };\n  var IS_BROWSER = function () {\n    return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  }();\n  var isBrowser = function isBrowser() {\n    return IS_BROWSER;\n  };\n  var testElement = isBrowser() ? createElement('svg') : {};\n  var getChildCount = 'children' in testElement ? function (el) {\n    return el.children.length;\n  } : function (el) {\n    return el.childNodes.length;\n  };\n  var getViewRect = function getViewRect(elementRect, childViews, offset, scale) {\n    var left = offset[0] || elementRect.left;\n    var top = offset[1] || elementRect.top;\n    var right = left + elementRect.width;\n    var bottom = top + elementRect.height * (scale[1] || 1);\n    var rect = {\n      // the rectangle of the element itself\n      element: Object.assign({}, elementRect),\n      // the rectangle of the element expanded to contain its children, does not include any margins\n      inner: {\n        left: elementRect.left,\n        top: elementRect.top,\n        right: elementRect.right,\n        bottom: elementRect.bottom\n      },\n      // the rectangle of the element expanded to contain its children including own margin and child margins\n      // margins will be added after we've recalculated the size\n      outer: {\n        left: left,\n        top: top,\n        right: right,\n        bottom: bottom\n      }\n    };\n\n    // expand rect to fit all child rectangles\n    childViews.filter(function (childView) {\n      return !childView.isRectIgnored();\n    }).map(function (childView) {\n      return childView.rect;\n    }).forEach(function (childViewRect) {\n      expandRect(rect.inner, Object.assign({}, childViewRect.inner));\n      expandRect(rect.outer, Object.assign({}, childViewRect.outer));\n    });\n\n    // calculate inner width and height\n    calculateRectSize(rect.inner);\n\n    // append additional margin (top and left margins are included in top and left automatically)\n    rect.outer.bottom += rect.element.marginBottom;\n    rect.outer.right += rect.element.marginRight;\n\n    // calculate outer width and height\n    calculateRectSize(rect.outer);\n    return rect;\n  };\n  var expandRect = function expandRect(parent, child) {\n    // adjust for parent offset\n    child.top += parent.top;\n    child.right += parent.left;\n    child.bottom += parent.top;\n    child.left += parent.left;\n    if (child.bottom > parent.bottom) {\n      parent.bottom = child.bottom;\n    }\n    if (child.right > parent.right) {\n      parent.right = child.right;\n    }\n  };\n  var calculateRectSize = function calculateRectSize(rect) {\n    rect.width = rect.right - rect.left;\n    rect.height = rect.bottom - rect.top;\n  };\n  var isNumber = function isNumber(value) {\n    return typeof value === 'number';\n  };\n\n  /**\n   * Determines if position is at destination\n   * @param position\n   * @param destination\n   * @param velocity\n   * @param errorMargin\n   * @returns {boolean}\n   */\n  var thereYet = function thereYet(position, destination, velocity) {\n    var errorMargin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.001;\n    return Math.abs(position - destination) < errorMargin && Math.abs(velocity) < errorMargin;\n  };\n\n  /**\n   * Spring animation\n   */\n  var spring =\n  // default options\n  function spring()\n  // method definition\n  {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref$stiffness = _ref.stiffness,\n      stiffness = _ref$stiffness === void 0 ? 0.5 : _ref$stiffness,\n      _ref$damping = _ref.damping,\n      damping = _ref$damping === void 0 ? 0.75 : _ref$damping,\n      _ref$mass = _ref.mass,\n      mass = _ref$mass === void 0 ? 10 : _ref$mass;\n    var target = null;\n    var position = null;\n    var velocity = 0;\n    var resting = false;\n\n    // updates spring state\n    var interpolate = function interpolate(ts, skipToEndState) {\n      // in rest, don't animate\n      if (resting) return;\n\n      // need at least a target or position to do springy things\n      if (!(isNumber(target) && isNumber(position))) {\n        resting = true;\n        velocity = 0;\n        return;\n      }\n\n      // calculate spring force\n      var f = -(position - target) * stiffness;\n\n      // update velocity by adding force based on mass\n      velocity += f / mass;\n\n      // update position by adding velocity\n      position += velocity;\n\n      // slow down based on amount of damping\n      velocity *= damping;\n\n      // we've arrived if we're near target and our velocity is near zero\n      if (thereYet(position, target, velocity) || skipToEndState) {\n        position = target;\n        velocity = 0;\n        resting = true;\n\n        // we done\n        api.onupdate(position);\n        api.oncomplete(position);\n      } else {\n        // progress update\n        api.onupdate(position);\n      }\n    };\n\n    /**\n     * Set new target value\n     * @param value\n     */\n    var setTarget = function setTarget(value) {\n      // if currently has no position, set target and position to this value\n      if (isNumber(value) && !isNumber(position)) {\n        position = value;\n      }\n\n      // next target value will not be animated to\n      if (target === null) {\n        target = value;\n        position = value;\n      }\n\n      // let start moving to target\n      target = value;\n\n      // already at target\n      if (position === target || typeof target === 'undefined') {\n        // now resting as target is current position, stop moving\n        resting = true;\n        velocity = 0;\n\n        // done!\n        api.onupdate(position);\n        api.oncomplete(position);\n        return;\n      }\n      resting = false;\n    };\n\n    // need 'api' to call onupdate callback\n    var api = createObject({\n      interpolate: interpolate,\n      target: {\n        set: setTarget,\n        get: function get() {\n          return target;\n        }\n      },\n      resting: {\n        get: function get() {\n          return resting;\n        }\n      },\n      onupdate: function onupdate(value) {},\n      oncomplete: function oncomplete(value) {}\n    });\n    return api;\n  };\n  var easeLinear = function easeLinear(t) {\n    return t;\n  };\n  var easeInOutQuad = function easeInOutQuad(t) {\n    return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n  };\n  var tween =\n  // default values\n  function tween()\n  // method definition\n  {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref$duration = _ref.duration,\n      duration = _ref$duration === void 0 ? 500 : _ref$duration,\n      _ref$easing = _ref.easing,\n      easing = _ref$easing === void 0 ? easeInOutQuad : _ref$easing,\n      _ref$delay = _ref.delay,\n      delay = _ref$delay === void 0 ? 0 : _ref$delay;\n    var start = null;\n    var t;\n    var p;\n    var resting = true;\n    var reverse = false;\n    var target = null;\n    var interpolate = function interpolate(ts, skipToEndState) {\n      if (resting || target === null) return;\n      if (start === null) {\n        start = ts;\n      }\n      if (ts - start < delay) return;\n      t = ts - start - delay;\n      if (t >= duration || skipToEndState) {\n        t = 1;\n        p = reverse ? 0 : 1;\n        api.onupdate(p * target);\n        api.oncomplete(p * target);\n        resting = true;\n      } else {\n        p = t / duration;\n        api.onupdate((t >= 0 ? easing(reverse ? 1 - p : p) : 0) * target);\n      }\n    };\n\n    // need 'api' to call onupdate callback\n    var api = createObject({\n      interpolate: interpolate,\n      target: {\n        get: function get() {\n          return reverse ? 0 : target;\n        },\n        set: function set(value) {\n          // is initial value\n          if (target === null) {\n            target = value;\n            api.onupdate(value);\n            api.oncomplete(value);\n            return;\n          }\n\n          // want to tween to a smaller value and have a current value\n          if (value < target) {\n            target = 1;\n            reverse = true;\n          } else {\n            // not tweening to a smaller value\n            reverse = false;\n            target = value;\n          }\n\n          // let's go!\n          resting = false;\n          start = null;\n        }\n      },\n      resting: {\n        get: function get() {\n          return resting;\n        }\n      },\n      onupdate: function onupdate(value) {},\n      oncomplete: function oncomplete(value) {}\n    });\n    return api;\n  };\n  var animator = {\n    spring: spring,\n    tween: tween\n  };\n\n  /*\n                     { type: 'spring', stiffness: .5, damping: .75, mass: 10 };\n                     { translation: { type: 'spring', ... }, ... }\n                     { translation: { x: { type: 'spring', ... } } }\n                    */\n  var createAnimator = function createAnimator(definition, category, property) {\n    // default is single definition\n    // we check if transform is set, if so, we check if property is set\n    var def = definition[category] && typeof definition[category][property] === 'object' ? definition[category][property] : definition[category] || definition;\n    var type = typeof def === 'string' ? def : def.type;\n    var props = typeof def === 'object' ? Object.assign({}, def) : {};\n    return animator[type] ? animator[type](props) : null;\n  };\n  var addGetSet = function addGetSet(keys, obj, props) {\n    var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    obj = Array.isArray(obj) ? obj : [obj];\n    obj.forEach(function (o) {\n      keys.forEach(function (key) {\n        var name = key;\n        var getter = function getter() {\n          return props[key];\n        };\n        var setter = function setter(value) {\n          return props[key] = value;\n        };\n        if (typeof key === 'object') {\n          name = key.key;\n          getter = key.getter || getter;\n          setter = key.setter || setter;\n        }\n        if (o[name] && !overwrite) {\n          return;\n        }\n        o[name] = {\n          get: getter,\n          set: setter\n        };\n      });\n    });\n  };\n\n  // add to state,\n  // add getters and setters to internal and external api (if not set)\n  // setup animators\n\n  var animations = function animations(_ref) {\n    var mixinConfig = _ref.mixinConfig,\n      viewProps = _ref.viewProps,\n      viewInternalAPI = _ref.viewInternalAPI,\n      viewExternalAPI = _ref.viewExternalAPI;\n    // initial properties\n    var initialProps = Object.assign({}, viewProps);\n\n    // list of all active animations\n    var animations = [];\n\n    // setup animators\n    forin(mixinConfig, function (property, animation) {\n      var animator = createAnimator(animation);\n      if (!animator) {\n        return;\n      }\n\n      // when the animator updates, update the view state value\n      animator.onupdate = function (value) {\n        viewProps[property] = value;\n      };\n\n      // set animator target\n      animator.target = initialProps[property];\n\n      // when value is set, set the animator target value\n      var prop = {\n        key: property,\n        setter: function setter(value) {\n          // if already at target, we done!\n          if (animator.target === value) {\n            return;\n          }\n          animator.target = value;\n        },\n        getter: function getter() {\n          return viewProps[property];\n        }\n      };\n\n      // add getters and setters\n      addGetSet([prop], [viewInternalAPI, viewExternalAPI], viewProps, true);\n\n      // add it to the list for easy updating from the _write method\n      animations.push(animator);\n    });\n\n    // expose internal write api\n    return {\n      write: function write(ts) {\n        var skipToEndState = document.hidden;\n        var resting = true;\n        animations.forEach(function (animation) {\n          if (!animation.resting) resting = false;\n          animation.interpolate(ts, skipToEndState);\n        });\n        return resting;\n      },\n      destroy: function destroy() {}\n    };\n  };\n  var addEvent = function addEvent(element) {\n    return function (type, fn) {\n      element.addEventListener(type, fn);\n    };\n  };\n  var removeEvent = function removeEvent(element) {\n    return function (type, fn) {\n      element.removeEventListener(type, fn);\n    };\n  };\n\n  // mixin\n  var listeners = function listeners(_ref) {\n    var mixinConfig = _ref.mixinConfig,\n      viewProps = _ref.viewProps,\n      viewInternalAPI = _ref.viewInternalAPI,\n      viewExternalAPI = _ref.viewExternalAPI,\n      viewState = _ref.viewState,\n      view = _ref.view;\n    var events = [];\n    var add = addEvent(view.element);\n    var remove = removeEvent(view.element);\n    viewExternalAPI.on = function (type, fn) {\n      events.push({\n        type: type,\n        fn: fn\n      });\n      add(type, fn);\n    };\n    viewExternalAPI.off = function (type, fn) {\n      events.splice(events.findIndex(function (event) {\n        return event.type === type && event.fn === fn;\n      }), 1);\n      remove(type, fn);\n    };\n    return {\n      write: function write() {\n        // not busy\n        return true;\n      },\n      destroy: function destroy() {\n        events.forEach(function (event) {\n          remove(event.type, event.fn);\n        });\n      }\n    };\n  };\n\n  // add to external api and link to props\n\n  var apis = function apis(_ref) {\n    var mixinConfig = _ref.mixinConfig,\n      viewProps = _ref.viewProps,\n      viewExternalAPI = _ref.viewExternalAPI;\n    addGetSet(mixinConfig, viewExternalAPI, viewProps);\n  };\n  var isDefined = function isDefined(value) {\n    return value != null;\n  };\n\n  // add to state,\n  // add getters and setters to internal and external api (if not set)\n  // set initial state based on props in viewProps\n  // apply as transforms each frame\n\n  var defaults = {\n    opacity: 1,\n    scaleX: 1,\n    scaleY: 1,\n    translateX: 0,\n    translateY: 0,\n    rotateX: 0,\n    rotateY: 0,\n    rotateZ: 0,\n    originX: 0,\n    originY: 0\n  };\n  var styles = function styles(_ref) {\n    var mixinConfig = _ref.mixinConfig,\n      viewProps = _ref.viewProps,\n      viewInternalAPI = _ref.viewInternalAPI,\n      viewExternalAPI = _ref.viewExternalAPI,\n      view = _ref.view;\n    // initial props\n    var initialProps = Object.assign({}, viewProps);\n\n    // current props\n    var currentProps = {};\n\n    // we will add those properties to the external API and link them to the viewState\n    addGetSet(mixinConfig, [viewInternalAPI, viewExternalAPI], viewProps);\n\n    // override rect on internal and external rect getter so it takes in account transforms\n    var getOffset = function getOffset() {\n      return [viewProps['translateX'] || 0, viewProps['translateY'] || 0];\n    };\n    var getScale = function getScale() {\n      return [viewProps['scaleX'] || 0, viewProps['scaleY'] || 0];\n    };\n    var getRect = function getRect() {\n      return view.rect ? getViewRect(view.rect, view.childViews, getOffset(), getScale()) : null;\n    };\n    viewInternalAPI.rect = {\n      get: getRect\n    };\n    viewExternalAPI.rect = {\n      get: getRect\n    };\n\n    // apply view props\n    mixinConfig.forEach(function (key) {\n      viewProps[key] = typeof initialProps[key] === 'undefined' ? defaults[key] : initialProps[key];\n    });\n\n    // expose api\n    return {\n      write: function write() {\n        // see if props have changed\n        if (!propsHaveChanged(currentProps, viewProps)) {\n          return;\n        }\n\n        // moves element to correct position on screen\n        applyStyles(view.element, viewProps);\n\n        // store new transforms\n        Object.assign(currentProps, Object.assign({}, viewProps));\n\n        // no longer busy\n        return true;\n      },\n      destroy: function destroy() {}\n    };\n  };\n  var propsHaveChanged = function propsHaveChanged(currentProps, newProps) {\n    // different amount of keys\n    if (Object.keys(currentProps).length !== Object.keys(newProps).length) {\n      return true;\n    }\n\n    // lets analyze the individual props\n    for (var prop in newProps) {\n      if (newProps[prop] !== currentProps[prop]) {\n        return true;\n      }\n    }\n    return false;\n  };\n  var applyStyles = function applyStyles(element, _ref2) {\n    var opacity = _ref2.opacity,\n      perspective = _ref2.perspective,\n      translateX = _ref2.translateX,\n      translateY = _ref2.translateY,\n      scaleX = _ref2.scaleX,\n      scaleY = _ref2.scaleY,\n      rotateX = _ref2.rotateX,\n      rotateY = _ref2.rotateY,\n      rotateZ = _ref2.rotateZ,\n      originX = _ref2.originX,\n      originY = _ref2.originY,\n      width = _ref2.width,\n      height = _ref2.height;\n    var transforms = '';\n    var styles = '';\n\n    // handle transform origin\n    if (isDefined(originX) || isDefined(originY)) {\n      styles += 'transform-origin: ' + (originX || 0) + 'px ' + (originY || 0) + 'px;';\n    }\n\n    // transform order is relevant\n    // 0. perspective\n    if (isDefined(perspective)) {\n      transforms += 'perspective(' + perspective + 'px) ';\n    }\n\n    // 1. translate\n    if (isDefined(translateX) || isDefined(translateY)) {\n      transforms += 'translate3d(' + (translateX || 0) + 'px, ' + (translateY || 0) + 'px, 0) ';\n    }\n\n    // 2. scale\n    if (isDefined(scaleX) || isDefined(scaleY)) {\n      transforms += 'scale3d(' + (isDefined(scaleX) ? scaleX : 1) + ', ' + (isDefined(scaleY) ? scaleY : 1) + ', 1) ';\n    }\n\n    // 3. rotate\n    if (isDefined(rotateZ)) {\n      transforms += 'rotateZ(' + rotateZ + 'rad) ';\n    }\n    if (isDefined(rotateX)) {\n      transforms += 'rotateX(' + rotateX + 'rad) ';\n    }\n    if (isDefined(rotateY)) {\n      transforms += 'rotateY(' + rotateY + 'rad) ';\n    }\n\n    // add transforms\n    if (transforms.length) {\n      styles += 'transform:' + transforms + ';';\n    }\n\n    // add opacity\n    if (isDefined(opacity)) {\n      styles += 'opacity:' + opacity + ';';\n\n      // if we reach zero, we make the element inaccessible\n      if (opacity === 0) {\n        styles += 'visibility:hidden;';\n      }\n\n      // if we're below 100% opacity this element can't be clicked\n      if (opacity < 1) {\n        styles += 'pointer-events:none;';\n      }\n    }\n\n    // add height\n    if (isDefined(height)) {\n      styles += 'height:' + height + 'px;';\n    }\n\n    // add width\n    if (isDefined(width)) {\n      styles += 'width:' + width + 'px;';\n    }\n\n    // apply styles\n    var elementCurrentStyle = element.elementCurrentStyle || '';\n\n    // if new styles does not match current styles, lets update!\n    if (styles.length !== elementCurrentStyle.length || styles !== elementCurrentStyle) {\n      element.style.cssText = styles;\n      // store current styles so we can compare them to new styles later on\n      // _not_ getting the style value is faster\n      element.elementCurrentStyle = styles;\n    }\n  };\n  var Mixins = {\n    styles: styles,\n    listeners: listeners,\n    animations: animations,\n    apis: apis\n  };\n  var updateRect = function updateRect() {\n    var rect = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    if (!element.layoutCalculated) {\n      rect.paddingTop = parseInt(style.paddingTop, 10) || 0;\n      rect.marginTop = parseInt(style.marginTop, 10) || 0;\n      rect.marginRight = parseInt(style.marginRight, 10) || 0;\n      rect.marginBottom = parseInt(style.marginBottom, 10) || 0;\n      rect.marginLeft = parseInt(style.marginLeft, 10) || 0;\n      element.layoutCalculated = true;\n    }\n    rect.left = element.offsetLeft || 0;\n    rect.top = element.offsetTop || 0;\n    rect.width = element.offsetWidth || 0;\n    rect.height = element.offsetHeight || 0;\n    rect.right = rect.left + rect.width;\n    rect.bottom = rect.top + rect.height;\n    rect.scrollTop = element.scrollTop;\n    rect.hidden = element.offsetParent === null;\n    return rect;\n  };\n  var createView =\n  // default view definition\n  function createView() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref$tag = _ref.tag,\n      tag = _ref$tag === void 0 ? 'div' : _ref$tag,\n      _ref$name = _ref.name,\n      name = _ref$name === void 0 ? null : _ref$name,\n      _ref$attributes = _ref.attributes,\n      attributes = _ref$attributes === void 0 ? {} : _ref$attributes,\n      _ref$read = _ref.read,\n      read = _ref$read === void 0 ? function () {} : _ref$read,\n      _ref$write = _ref.write,\n      write = _ref$write === void 0 ? function () {} : _ref$write,\n      _ref$create = _ref.create,\n      create = _ref$create === void 0 ? function () {} : _ref$create,\n      _ref$destroy = _ref.destroy,\n      destroy = _ref$destroy === void 0 ? function () {} : _ref$destroy,\n      _ref$filterFrameActio = _ref.filterFrameActionsForChild,\n      filterFrameActionsForChild = _ref$filterFrameActio === void 0 ? function (child, actions) {\n        return actions;\n      } : _ref$filterFrameActio,\n      _ref$didCreateView = _ref.didCreateView,\n      didCreateView = _ref$didCreateView === void 0 ? function () {} : _ref$didCreateView,\n      _ref$didWriteView = _ref.didWriteView,\n      didWriteView = _ref$didWriteView === void 0 ? function () {} : _ref$didWriteView,\n      _ref$ignoreRect = _ref.ignoreRect,\n      ignoreRect = _ref$ignoreRect === void 0 ? false : _ref$ignoreRect,\n      _ref$ignoreRectUpdate = _ref.ignoreRectUpdate,\n      ignoreRectUpdate = _ref$ignoreRectUpdate === void 0 ? false : _ref$ignoreRectUpdate,\n      _ref$mixins = _ref.mixins,\n      mixins = _ref$mixins === void 0 ? [] : _ref$mixins;\n    return function (\n    // each view requires reference to store\n    store) {\n      var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      // root element should not be changed\n      var element = createElement(tag, 'filepond--' + name, attributes);\n\n      // style reference should also not be changed\n      var style = window.getComputedStyle(element, null);\n\n      // element rectangle\n      var rect = updateRect();\n      var frameRect = null;\n\n      // rest state\n      var isResting = false;\n\n      // pretty self explanatory\n      var childViews = [];\n\n      // loaded mixins\n      var activeMixins = [];\n\n      // references to created children\n      var ref = {};\n\n      // state used for each instance\n      var state = {};\n\n      // list of writers that will be called to update this view\n      var writers = [write // default writer\n      ];\n\n      var readers = [read // default reader\n      ];\n\n      var destroyers = [destroy // default destroy\n      ];\n\n      // core view methods\n      var getElement = function getElement() {\n        return element;\n      };\n      var getChildViews = function getChildViews() {\n        return childViews.concat();\n      };\n      var getReference = function getReference() {\n        return ref;\n      };\n      var createChildView = function createChildView(store) {\n        return function (view, props) {\n          return view(store, props);\n        };\n      };\n      var getRect = function getRect() {\n        if (frameRect) {\n          return frameRect;\n        }\n        frameRect = getViewRect(rect, childViews, [0, 0], [1, 1]);\n        return frameRect;\n      };\n      var getStyle = function getStyle() {\n        return style;\n      };\n\n      /**\n       * Read data from DOM\n       * @private\n       */\n      var _read = function _read() {\n        frameRect = null;\n\n        // read child views\n        childViews.forEach(function (child) {\n          return child._read();\n        });\n        var shouldUpdate = !(ignoreRectUpdate && rect.width && rect.height);\n        if (shouldUpdate) {\n          updateRect(rect, element, style);\n        }\n\n        // readers\n        var api = {\n          root: internalAPI,\n          props: props,\n          rect: rect\n        };\n        readers.forEach(function (reader) {\n          return reader(api);\n        });\n      };\n\n      /**\n       * Write data to DOM\n       * @private\n       */\n      var _write = function _write(ts, frameActions, shouldOptimize) {\n        // if no actions, we assume that the view is resting\n        var resting = frameActions.length === 0;\n\n        // writers\n        writers.forEach(function (writer) {\n          var writerResting = writer({\n            props: props,\n            root: internalAPI,\n            actions: frameActions,\n            timestamp: ts,\n            shouldOptimize: shouldOptimize\n          });\n          if (writerResting === false) {\n            resting = false;\n          }\n        });\n\n        // run mixins\n        activeMixins.forEach(function (mixin) {\n          // if one of the mixins is still busy after write operation, we are not resting\n          var mixinResting = mixin.write(ts);\n          if (mixinResting === false) {\n            resting = false;\n          }\n        });\n\n        // updates child views that are currently attached to the DOM\n        childViews.filter(function (child) {\n          return !!child.element.parentNode;\n        }).forEach(function (child) {\n          // if a child view is not resting, we are not resting\n          var childResting = child._write(ts, filterFrameActionsForChild(child, frameActions), shouldOptimize);\n          if (!childResting) {\n            resting = false;\n          }\n        });\n\n        // append new elements to DOM and update those\n        childViews\n        //.filter(child => !child.element.parentNode)\n        .forEach(function (child, index) {\n          // skip\n          if (child.element.parentNode) {\n            return;\n          }\n\n          // append to DOM\n          internalAPI.appendChild(child.element, index);\n\n          // call read (need to know the size of these elements)\n          child._read();\n\n          // re-call write\n          child._write(ts, filterFrameActionsForChild(child, frameActions), shouldOptimize);\n\n          // we just added somthing to the dom, no rest\n          resting = false;\n        });\n\n        // update resting state\n        isResting = resting;\n        didWriteView({\n          props: props,\n          root: internalAPI,\n          actions: frameActions,\n          timestamp: ts\n        });\n\n        // let parent know if we are resting\n        return resting;\n      };\n      var _destroy = function _destroy() {\n        activeMixins.forEach(function (mixin) {\n          return mixin.destroy();\n        });\n        destroyers.forEach(function (destroyer) {\n          destroyer({\n            root: internalAPI,\n            props: props\n          });\n        });\n        childViews.forEach(function (child) {\n          return child._destroy();\n        });\n      };\n\n      // sharedAPI\n      var sharedAPIDefinition = {\n        element: {\n          get: getElement\n        },\n        style: {\n          get: getStyle\n        },\n        childViews: {\n          get: getChildViews\n        }\n      };\n\n      // private API definition\n      var internalAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n        rect: {\n          get: getRect\n        },\n        // access to custom children references\n        ref: {\n          get: getReference\n        },\n        // dom modifiers\n        is: function is(needle) {\n          return name === needle;\n        },\n        appendChild: appendChild(element),\n        createChildView: createChildView(store),\n        linkView: function linkView(view) {\n          childViews.push(view);\n          return view;\n        },\n        unlinkView: function unlinkView(view) {\n          childViews.splice(childViews.indexOf(view), 1);\n        },\n        appendChildView: appendChildView(element, childViews),\n        removeChildView: removeChildView(element, childViews),\n        registerWriter: function registerWriter(writer) {\n          return writers.push(writer);\n        },\n        registerReader: function registerReader(reader) {\n          return readers.push(reader);\n        },\n        registerDestroyer: function registerDestroyer(destroyer) {\n          return destroyers.push(destroyer);\n        },\n        invalidateLayout: function invalidateLayout() {\n          return element.layoutCalculated = false;\n        },\n        // access to data store\n        dispatch: store.dispatch,\n        query: store.query\n      });\n\n      // public view API methods\n      var externalAPIDefinition = {\n        element: {\n          get: getElement\n        },\n        childViews: {\n          get: getChildViews\n        },\n        rect: {\n          get: getRect\n        },\n        resting: {\n          get: function get() {\n            return isResting;\n          }\n        },\n        isRectIgnored: function isRectIgnored() {\n          return ignoreRect;\n        },\n        _read: _read,\n        _write: _write,\n        _destroy: _destroy\n      };\n\n      // mixin API methods\n      var mixinAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n        rect: {\n          get: function get() {\n            return rect;\n          }\n        }\n      });\n\n      // add mixin functionality\n      Object.keys(mixins).sort(function (a, b) {\n        // move styles to the back of the mixin list (so adjustments of other mixins are applied to the props correctly)\n        if (a === 'styles') {\n          return 1;\n        } else if (b === 'styles') {\n          return -1;\n        }\n        return 0;\n      }).forEach(function (key) {\n        var mixinAPI = Mixins[key]({\n          mixinConfig: mixins[key],\n          viewProps: props,\n          viewState: state,\n          viewInternalAPI: internalAPIDefinition,\n          viewExternalAPI: externalAPIDefinition,\n          view: createObject(mixinAPIDefinition)\n        });\n        if (mixinAPI) {\n          activeMixins.push(mixinAPI);\n        }\n      });\n\n      // construct private api\n      var internalAPI = createObject(internalAPIDefinition);\n\n      // create the view\n      create({\n        root: internalAPI,\n        props: props\n      });\n\n      // append created child views to root node\n      var childCount = getChildCount(element); // need to know the current child count so appending happens in correct order\n      childViews.forEach(function (child, index) {\n        internalAPI.appendChild(child.element, childCount + index);\n      });\n\n      // call did create\n      didCreateView(internalAPI);\n\n      // expose public api\n      return createObject(externalAPIDefinition);\n    };\n  };\n  var createPainter = function createPainter(read, write) {\n    var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 60;\n    var name = '__framePainter';\n\n    // set global painter\n    if (window[name]) {\n      window[name].readers.push(read);\n      window[name].writers.push(write);\n      return;\n    }\n    window[name] = {\n      readers: [read],\n      writers: [write]\n    };\n    var painter = window[name];\n    var interval = 1000 / fps;\n    var last = null;\n    var id = null;\n    var requestTick = null;\n    var cancelTick = null;\n    var setTimerType = function setTimerType() {\n      if (document.hidden) {\n        requestTick = function requestTick() {\n          return window.setTimeout(function () {\n            return tick(performance.now());\n          }, interval);\n        };\n        cancelTick = function cancelTick() {\n          return window.clearTimeout(id);\n        };\n      } else {\n        requestTick = function requestTick() {\n          return window.requestAnimationFrame(tick);\n        };\n        cancelTick = function cancelTick() {\n          return window.cancelAnimationFrame(id);\n        };\n      }\n    };\n    document.addEventListener('visibilitychange', function () {\n      if (cancelTick) cancelTick();\n      setTimerType();\n      tick(performance.now());\n    });\n    var tick = function tick(ts) {\n      // queue next tick\n      id = requestTick(tick);\n\n      // limit fps\n      if (!last) {\n        last = ts;\n      }\n      var delta = ts - last;\n      if (delta <= interval) {\n        // skip frame\n        return;\n      }\n\n      // align next frame\n      last = ts - delta % interval;\n\n      // update view\n      painter.readers.forEach(function (read) {\n        return read();\n      });\n      painter.writers.forEach(function (write) {\n        return write(ts);\n      });\n    };\n    setTimerType();\n    tick(performance.now());\n    return {\n      pause: function pause() {\n        cancelTick(id);\n      }\n    };\n  };\n  var createRoute = function createRoute(routes, fn) {\n    return function (_ref) {\n      var root = _ref.root,\n        props = _ref.props,\n        _ref$actions = _ref.actions,\n        actions = _ref$actions === void 0 ? [] : _ref$actions,\n        timestamp = _ref.timestamp,\n        shouldOptimize = _ref.shouldOptimize;\n      actions.filter(function (action) {\n        return routes[action.type];\n      }).forEach(function (action) {\n        return routes[action.type]({\n          root: root,\n          props: props,\n          action: action.data,\n          timestamp: timestamp,\n          shouldOptimize: shouldOptimize\n        });\n      });\n      if (fn) {\n        fn({\n          root: root,\n          props: props,\n          actions: actions,\n          timestamp: timestamp,\n          shouldOptimize: shouldOptimize\n        });\n      }\n    };\n  };\n  var insertBefore = function insertBefore(newNode, referenceNode) {\n    return referenceNode.parentNode.insertBefore(newNode, referenceNode);\n  };\n  var insertAfter = function insertAfter(newNode, referenceNode) {\n    return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n  };\n  var isArray = function isArray(value) {\n    return Array.isArray(value);\n  };\n  var isEmpty = function isEmpty(value) {\n    return value == null;\n  };\n  var trim = function trim(str) {\n    return str.trim();\n  };\n  var toString = function toString(value) {\n    return '' + value;\n  };\n  var toArray = function toArray(value) {\n    var splitter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n    if (isEmpty(value)) {\n      return [];\n    }\n    if (isArray(value)) {\n      return value;\n    }\n    return toString(value).split(splitter).map(trim).filter(function (str) {\n      return str.length;\n    });\n  };\n  var isBoolean = function isBoolean(value) {\n    return typeof value === 'boolean';\n  };\n  var toBoolean = function toBoolean(value) {\n    return isBoolean(value) ? value : value === 'true';\n  };\n  var isString = function isString(value) {\n    return typeof value === 'string';\n  };\n  var toNumber = function toNumber(value) {\n    return isNumber(value) ? value : isString(value) ? toString(value).replace(/[a-z]+/gi, '') : 0;\n  };\n  var toInt = function toInt(value) {\n    return parseInt(toNumber(value), 10);\n  };\n  var toFloat = function toFloat(value) {\n    return parseFloat(toNumber(value));\n  };\n  var isInt = function isInt(value) {\n    return isNumber(value) && isFinite(value) && Math.floor(value) === value;\n  };\n  var toBytes = function toBytes(value) {\n    var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n    // is in bytes\n    if (isInt(value)) {\n      return value;\n    }\n\n    // is natural file size\n    var naturalFileSize = toString(value).trim();\n\n    // if is value in megabytes\n    if (/MB$/i.test(naturalFileSize)) {\n      naturalFileSize = naturalFileSize.replace(/MB$i/, '').trim();\n      return toInt(naturalFileSize) * base * base;\n    }\n\n    // if is value in kilobytes\n    if (/KB/i.test(naturalFileSize)) {\n      naturalFileSize = naturalFileSize.replace(/KB$i/, '').trim();\n      return toInt(naturalFileSize) * base;\n    }\n    return toInt(naturalFileSize);\n  };\n  var isFunction = function isFunction(value) {\n    return typeof value === 'function';\n  };\n  var toFunctionReference = function toFunctionReference(string) {\n    var ref = self;\n    var levels = string.split('.');\n    var level = null;\n    while (level = levels.shift()) {\n      ref = ref[level];\n      if (!ref) {\n        return null;\n      }\n    }\n    return ref;\n  };\n  var methods = {\n    process: 'POST',\n    patch: 'PATCH',\n    revert: 'DELETE',\n    fetch: 'GET',\n    restore: 'GET',\n    load: 'GET'\n  };\n  var createServerAPI = function createServerAPI(outline) {\n    var api = {};\n    api.url = isString(outline) ? outline : outline.url || '';\n    api.timeout = outline.timeout ? parseInt(outline.timeout, 10) : 0;\n    api.headers = outline.headers ? outline.headers : {};\n    forin(methods, function (key) {\n      api[key] = createAction(key, outline[key], methods[key], api.timeout, api.headers);\n    });\n\n    // remove process if no url or process on outline\n    api.process = outline.process || isString(outline) || outline.url ? api.process : null;\n\n    // special treatment for remove\n    api.remove = outline.remove || null;\n\n    // remove generic headers from api object\n    delete api.headers;\n    return api;\n  };\n  var createAction = function createAction(name, outline, method, timeout, headers) {\n    // is explicitely set to null so disable\n    if (outline === null) {\n      return null;\n    }\n\n    // if is custom function, done! Dev handles everything.\n    if (typeof outline === 'function') {\n      return outline;\n    }\n\n    // build action object\n    var action = {\n      url: method === 'GET' || method === 'PATCH' ? '?' + name + '=' : '',\n      method: method,\n      headers: headers,\n      withCredentials: false,\n      timeout: timeout,\n      onload: null,\n      ondata: null,\n      onerror: null\n    };\n\n    // is a single url\n    if (isString(outline)) {\n      action.url = outline;\n      return action;\n    }\n\n    // overwrite\n    Object.assign(action, outline);\n\n    // see if should reformat headers;\n    if (isString(action.headers)) {\n      var parts = action.headers.split(/:(.+)/);\n      action.headers = {\n        header: parts[0],\n        value: parts[1]\n      };\n    }\n\n    // if is bool withCredentials\n    action.withCredentials = toBoolean(action.withCredentials);\n    return action;\n  };\n  var toServerAPI = function toServerAPI(value) {\n    return createServerAPI(value);\n  };\n  var isNull = function isNull(value) {\n    return value === null;\n  };\n  var isObject = function isObject(value) {\n    return typeof value === 'object' && value !== null;\n  };\n  var isAPI = function isAPI(value) {\n    return isObject(value) && isString(value.url) && isObject(value.process) && isObject(value.revert) && isObject(value.restore) && isObject(value.fetch);\n  };\n  var getType = function getType(value) {\n    if (isArray(value)) {\n      return 'array';\n    }\n    if (isNull(value)) {\n      return 'null';\n    }\n    if (isInt(value)) {\n      return 'int';\n    }\n    if (/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(value)) {\n      return 'bytes';\n    }\n    if (isAPI(value)) {\n      return 'api';\n    }\n    return typeof value;\n  };\n  var replaceSingleQuotes = function replaceSingleQuotes(str) {\n    return str.replace(/{\\s*'/g, '{\"').replace(/'\\s*}/g, '\"}').replace(/'\\s*:/g, '\":').replace(/:\\s*'/g, ':\"').replace(/,\\s*'/g, ',\"').replace(/'\\s*,/g, '\",');\n  };\n  var conversionTable = {\n    array: toArray,\n    boolean: toBoolean,\n    int: function int(value) {\n      return getType(value) === 'bytes' ? toBytes(value) : toInt(value);\n    },\n    number: toFloat,\n    float: toFloat,\n    bytes: toBytes,\n    string: function string(value) {\n      return isFunction(value) ? value : toString(value);\n    },\n    function: function _function(value) {\n      return toFunctionReference(value);\n    },\n    serverapi: toServerAPI,\n    object: function object(value) {\n      try {\n        return JSON.parse(replaceSingleQuotes(value));\n      } catch (e) {\n        return null;\n      }\n    }\n  };\n  var convertTo = function convertTo(value, type) {\n    return conversionTable[type](value);\n  };\n  var getValueByType = function getValueByType(newValue, defaultValue, valueType) {\n    // can always assign default value\n    if (newValue === defaultValue) {\n      return newValue;\n    }\n\n    // get the type of the new value\n    var newValueType = getType(newValue);\n\n    // is valid type?\n    if (newValueType !== valueType) {\n      // is string input, let's attempt to convert\n      var convertedValue = convertTo(newValue, valueType);\n\n      // what is the type now\n      newValueType = getType(convertedValue);\n\n      // no valid conversions found\n      if (convertedValue === null) {\n        throw 'Trying to assign value with incorrect type to \"' + option + '\", allowed type: \"' + valueType + '\"';\n      } else {\n        newValue = convertedValue;\n      }\n    }\n\n    // assign new value\n    return newValue;\n  };\n  var createOption = function createOption(defaultValue, valueType) {\n    var currentValue = defaultValue;\n    return {\n      enumerable: true,\n      get: function get() {\n        return currentValue;\n      },\n      set: function set(newValue) {\n        currentValue = getValueByType(newValue, defaultValue, valueType);\n      }\n    };\n  };\n  var createOptions = function createOptions(options) {\n    var obj = {};\n    forin(options, function (prop) {\n      var optionDefinition = options[prop];\n      obj[prop] = createOption(optionDefinition[0], optionDefinition[1]);\n    });\n    return createObject(obj);\n  };\n  var createInitialState = function createInitialState(options) {\n    return {\n      // model\n      items: [],\n      // timeout used for calling update items\n      listUpdateTimeout: null,\n      // timeout used for stacking metadata updates\n      itemUpdateTimeout: null,\n      // queue of items waiting to be processed\n      processingQueue: [],\n      // options\n      options: createOptions(options)\n    };\n  };\n  var fromCamels = function fromCamels(string) {\n    var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n    return string.split(/(?=[A-Z])/).map(function (part) {\n      return part.toLowerCase();\n    }).join(separator);\n  };\n  var createOptionAPI = function createOptionAPI(store, options) {\n    var obj = {};\n    forin(options, function (key) {\n      obj[key] = {\n        get: function get() {\n          return store.getState().options[key];\n        },\n        set: function set(value) {\n          store.dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n            value: value\n          });\n        }\n      };\n    });\n    return obj;\n  };\n  var createOptionActions = function createOptionActions(options) {\n    return function (dispatch, query, state) {\n      var obj = {};\n      forin(options, function (key) {\n        var name = fromCamels(key, '_').toUpperCase();\n        obj['SET_' + name] = function (action) {\n          try {\n            state.options[key] = action.value;\n          } catch (e) {} // nope, failed\n\n          // we successfully set the value of this option\n          dispatch('DID_SET_' + name, {\n            value: state.options[key]\n          });\n        };\n      });\n      return obj;\n    };\n  };\n  var createOptionQueries = function createOptionQueries(options) {\n    return function (state) {\n      var obj = {};\n      forin(options, function (key) {\n        obj['GET_' + fromCamels(key, '_').toUpperCase()] = function (action) {\n          return state.options[key];\n        };\n      });\n      return obj;\n    };\n  };\n  var InteractionMethod = {\n    API: 1,\n    DROP: 2,\n    BROWSE: 3,\n    PASTE: 4,\n    NONE: 5\n  };\n  var getUniqueId = function getUniqueId() {\n    return Math.random().toString(36).substring(2, 11);\n  };\n  function _typeof(obj) {\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  }\n  var REACT_ELEMENT_TYPE;\n  function _jsx(type, props, key, children) {\n    if (!REACT_ELEMENT_TYPE) {\n      REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n    }\n    var defaultProps = type && type.defaultProps;\n    var childrenLength = arguments.length - 3;\n    if (!props && childrenLength !== 0) {\n      props = {\n        children: void 0\n      };\n    }\n    if (props && defaultProps) {\n      for (var propName in defaultProps) {\n        if (props[propName] === void 0) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    } else if (!props) {\n      props = defaultProps || {};\n    }\n    if (childrenLength === 1) {\n      props.children = children;\n    } else if (childrenLength > 1) {\n      var childArray = new Array(childrenLength);\n      for (var i = 0; i < childrenLength; i++) {\n        childArray[i] = arguments[i + 3];\n      }\n      props.children = childArray;\n    }\n    return {\n      $$typeof: REACT_ELEMENT_TYPE,\n      type: type,\n      key: key === undefined ? null : '' + key,\n      ref: null,\n      props: props,\n      _owner: null\n    };\n  }\n  function _asyncIterator(iterable) {\n    var method;\n    if (typeof Symbol !== 'undefined') {\n      if (Symbol.asyncIterator) {\n        method = iterable[Symbol.asyncIterator];\n        if (method != null) return method.call(iterable);\n      }\n      if (Symbol.iterator) {\n        method = iterable[Symbol.iterator];\n        if (method != null) return method.call(iterable);\n      }\n    }\n    throw new TypeError('Object is not async iterable');\n  }\n  function _AwaitValue(value) {\n    this.wrapped = value;\n  }\n  function _AsyncGenerator(gen) {\n    var front, back;\n    function send(key, arg) {\n      return new Promise(function (resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n        var wrappedAwait = value instanceof _AwaitValue;\n        Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {\n          if (wrappedAwait) {\n            resume('next', arg);\n            return;\n          }\n          settle(result.done ? 'return' : 'normal', arg);\n        }, function (err) {\n          resume('throw', err);\n        });\n      } catch (err) {\n        settle('throw', err);\n      }\n    }\n    function settle(type, value) {\n      switch (type) {\n        case 'return':\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n        case 'throw':\n          front.reject(value);\n          break;\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n      front = front.next;\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n    this._invoke = send;\n    if (typeof gen.return !== 'function') {\n      this.return = undefined;\n    }\n  }\n  if (typeof Symbol === 'function' && Symbol.asyncIterator) {\n    _AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n      return this;\n    };\n  }\n  _AsyncGenerator.prototype.next = function (arg) {\n    return this._invoke('next', arg);\n  };\n  _AsyncGenerator.prototype.throw = function (arg) {\n    return this._invoke('throw', arg);\n  };\n  _AsyncGenerator.prototype.return = function (arg) {\n    return this._invoke('return', arg);\n  };\n  function _wrapAsyncGenerator(fn) {\n    return function () {\n      return new _AsyncGenerator(fn.apply(this, arguments));\n    };\n  }\n  function _awaitAsyncGenerator(value) {\n    return new _AwaitValue(value);\n  }\n  function _asyncGeneratorDelegate(inner, awaitWrap) {\n    var iter = {},\n      waiting = false;\n    function pump(key, value) {\n      waiting = true;\n      value = new Promise(function (resolve) {\n        resolve(inner[key](value));\n      });\n      return {\n        done: false,\n        value: awaitWrap(value)\n      };\n    }\n    if (typeof Symbol === 'function' && Symbol.iterator) {\n      iter[Symbol.iterator] = function () {\n        return this;\n      };\n    }\n    iter.next = function (value) {\n      if (waiting) {\n        waiting = false;\n        return value;\n      }\n      return pump('next', value);\n    };\n    if (typeof inner.throw === 'function') {\n      iter.throw = function (value) {\n        if (waiting) {\n          waiting = false;\n          throw value;\n        }\n        return pump('throw', value);\n      };\n    }\n    if (typeof inner.return === 'function') {\n      iter.return = function (value) {\n        return pump('return', value);\n      };\n    }\n    return iter;\n  }\n  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n      var info = gen[key](arg);\n      var value = info.value;\n    } catch (error) {\n      reject(error);\n      return;\n    }\n    if (info.done) {\n      resolve(value);\n    } else {\n      Promise.resolve(value).then(_next, _throw);\n    }\n  }\n  function _asyncToGenerator(fn) {\n    return function () {\n      var self = this,\n        args = arguments;\n      return new Promise(function (resolve, reject) {\n        var gen = fn.apply(self, args);\n        function _next(value) {\n          asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);\n        }\n        function _throw(err) {\n          asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);\n        }\n        _next(undefined);\n      });\n    };\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if ('value' in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n  function _defineEnumerableProperties(obj, descs) {\n    for (var key in descs) {\n      var desc = descs[key];\n      desc.configurable = desc.enumerable = true;\n      if ('value' in desc) desc.writable = true;\n      Object.defineProperty(obj, key, desc);\n    }\n    if (Object.getOwnPropertySymbols) {\n      var objectSymbols = Object.getOwnPropertySymbols(descs);\n      for (var i = 0; i < objectSymbols.length; i++) {\n        var sym = objectSymbols[i];\n        var desc = descs[sym];\n        desc.configurable = desc.enumerable = true;\n        if ('value' in desc) desc.writable = true;\n        Object.defineProperty(obj, sym, desc);\n      }\n    }\n    return obj;\n  }\n  function _defaults(obj, defaults) {\n    var keys = Object.getOwnPropertyNames(defaults);\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      var value = Object.getOwnPropertyDescriptor(defaults, key);\n      if (value && value.configurable && obj[key] === undefined) {\n        Object.defineProperty(obj, key, value);\n      }\n    }\n    return obj;\n  }\n  function _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  }\n  function _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  }\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n    return target;\n  }\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      if (enumerableOnly) symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n      keys.push.apply(keys, symbols);\n    }\n    return keys;\n  }\n  function _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(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(source).forEach(function (key) {\n          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n        });\n      }\n    }\n    return target;\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function');\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) _setPrototypeOf(subClass, superClass);\n  }\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n      return o.__proto__ || Object.getPrototypeOf(o);\n    };\n    return _getPrototypeOf(o);\n  }\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n    return _setPrototypeOf(o, p);\n  }\n  function isNativeReflectConstruct() {\n    if (typeof Reflect === 'undefined' || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === 'function') return true;\n    try {\n      Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n  function _construct(Parent, args, Class) {\n    if (isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct(Parent, args, Class) {\n        var a = [null];\n        a.push.apply(a, args);\n        var Constructor = Function.bind.apply(Parent, a);\n        var instance = new Constructor();\n        if (Class) _setPrototypeOf(instance, Class.prototype);\n        return instance;\n      };\n    }\n    return _construct.apply(null, arguments);\n  }\n  function _isNativeFunction(fn) {\n    return Function.toString.call(fn).indexOf('[native code]') !== -1;\n  }\n  function _wrapNativeSuper(Class) {\n    var _cache = typeof Map === 'function' ? new Map() : undefined;\n    _wrapNativeSuper = function _wrapNativeSuper(Class) {\n      if (Class === null || !_isNativeFunction(Class)) return Class;\n      if (typeof Class !== 'function') {\n        throw new TypeError('Super expression must either be null or a function');\n      }\n      if (typeof _cache !== 'undefined') {\n        if (_cache.has(Class)) return _cache.get(Class);\n        _cache.set(Class, Wrapper);\n      }\n      function Wrapper() {\n        return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n      }\n      Wrapper.prototype = Object.create(Class.prototype, {\n        constructor: {\n          value: Wrapper,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      });\n      return _setPrototypeOf(Wrapper, Class);\n    };\n    return _wrapNativeSuper(Class);\n  }\n  function _instanceof(left, right) {\n    if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) {\n      return !!right[Symbol.hasInstance](left);\n    } else {\n      return left instanceof right;\n    }\n  }\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n  function _interopRequireWildcard(obj) {\n    if (obj && obj.__esModule) {\n      return obj;\n    } else {\n      var newObj = {};\n      if (obj != null) {\n        for (var key in obj) {\n          if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};\n            if (desc.get || desc.set) {\n              Object.defineProperty(newObj, key, desc);\n            } else {\n              newObj[key] = obj[key];\n            }\n          }\n        }\n      }\n      newObj.default = obj;\n      return newObj;\n    }\n  }\n  function _newArrowCheck(innerThis, boundThis) {\n    if (innerThis !== boundThis) {\n      throw new TypeError('Cannot instantiate an arrow function');\n    }\n  }\n  function _objectDestructuringEmpty(obj) {\n    if (obj == null) throw new TypeError('Cannot destructure undefined');\n  }\n  function _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  }\n  function _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  }\n  function _assertThisInitialized(self) {\n    if (self === void 0) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n    return self;\n  }\n  function _possibleConstructorReturn(self, call) {\n    if (call && (typeof call === 'object' || typeof call === 'function')) {\n      return call;\n    }\n    return _assertThisInitialized(self);\n  }\n  function _superPropBase(object, property) {\n    while (!Object.prototype.hasOwnProperty.call(object, property)) {\n      object = _getPrototypeOf(object);\n      if (object === null) break;\n    }\n    return object;\n  }\n  function _get(target, property, receiver) {\n    if (typeof Reflect !== 'undefined' && Reflect.get) {\n      _get = Reflect.get;\n    } else {\n      _get = function _get(target, property, receiver) {\n        var base = _superPropBase(target, property);\n        if (!base) return;\n        var desc = Object.getOwnPropertyDescriptor(base, property);\n        if (desc.get) {\n          return desc.get.call(receiver);\n        }\n        return desc.value;\n      };\n    }\n    return _get(target, property, receiver || target);\n  }\n  function set(target, property, value, receiver) {\n    if (typeof Reflect !== 'undefined' && Reflect.set) {\n      set = Reflect.set;\n    } else {\n      set = function set(target, property, value, receiver) {\n        var base = _superPropBase(target, property);\n        var desc;\n        if (base) {\n          desc = Object.getOwnPropertyDescriptor(base, property);\n          if (desc.set) {\n            desc.set.call(receiver, value);\n            return true;\n          } else if (!desc.writable) {\n            return false;\n          }\n        }\n        desc = Object.getOwnPropertyDescriptor(receiver, property);\n        if (desc) {\n          if (!desc.writable) {\n            return false;\n          }\n          desc.value = value;\n          Object.defineProperty(receiver, property, desc);\n        } else {\n          _defineProperty(receiver, property, value);\n        }\n        return true;\n      };\n    }\n    return set(target, property, value, receiver);\n  }\n  function _set(target, property, value, receiver, isStrict) {\n    var s = set(target, property, value, receiver || target);\n    if (!s && isStrict) {\n      throw new Error('failed to set property');\n    }\n    return value;\n  }\n  function _taggedTemplateLiteral(strings, raw) {\n    if (!raw) {\n      raw = strings.slice(0);\n    }\n    return Object.freeze(Object.defineProperties(strings, {\n      raw: {\n        value: Object.freeze(raw)\n      }\n    }));\n  }\n  function _taggedTemplateLiteralLoose(strings, raw) {\n    if (!raw) {\n      raw = strings.slice(0);\n    }\n    strings.raw = raw;\n    return strings;\n  }\n  function _temporalRef(val, name) {\n    if (val === _temporalUndefined) {\n      throw new ReferenceError(name + ' is not defined - temporal dead zone');\n    } else {\n      return val;\n    }\n  }\n  function _readOnlyError(name) {\n    throw new Error('\"' + name + '\" is read-only');\n  }\n  function _classNameTDZError(name) {\n    throw new Error('Class \"' + name + '\" cannot be referenced in computed property keys.');\n  }\n  var _temporalUndefined = {};\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n  }\n  function _slicedToArrayLoose(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimitLoose(arr, i) || _nonIterableRest();\n  }\n  function _toArray(arr) {\n    return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n  }\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n  }\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n      return arr2;\n    }\n  }\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n  }\n  function _iterableToArray(iter) {\n    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === '[object Arguments]') return Array.from(iter);\n  }\n  function _iterableToArrayLimit(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i['return'] != null) _i['return']();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n    return _arr;\n  }\n  function _iterableToArrayLimitLoose(arr, i) {\n    var _arr = [];\n    for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n      _arr.push(_step.value);\n      if (i && _arr.length === i) break;\n    }\n    return _arr;\n  }\n  function _nonIterableSpread() {\n    throw new TypeError('Invalid attempt to spread non-iterable instance');\n  }\n  function _nonIterableRest() {\n    throw new TypeError('Invalid attempt to destructure non-iterable instance');\n  }\n  function _skipFirstGeneratorNext(fn) {\n    return function () {\n      var it = fn.apply(this, arguments);\n      it.next();\n      return it;\n    };\n  }\n  function _toPrimitive(input, hint) {\n    if (typeof input !== 'object' || input === null) return input;\n    var prim = input[Symbol.toPrimitive];\n    if (prim !== undefined) {\n      var res = prim.call(input, hint || 'default');\n      if (typeof res !== 'object') return res;\n      throw new TypeError('@@toPrimitive must return a primitive value.');\n    }\n    return (hint === 'string' ? String : Number)(input);\n  }\n  function _toPropertyKey(arg) {\n    var key = _toPrimitive(arg, 'string');\n    return typeof key === 'symbol' ? key : String(key);\n  }\n  function _initializerWarningHelper(descriptor, context) {\n    throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and set to use loose mode. ' + 'To use proposal-class-properties in spec mode with decorators, wait for ' + 'the next major version of decorators in stage 2.');\n  }\n  function _initializerDefineProperty(target, property, descriptor, context) {\n    if (!descriptor) return;\n    Object.defineProperty(target, property, {\n      enumerable: descriptor.enumerable,\n      configurable: descriptor.configurable,\n      writable: descriptor.writable,\n      value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n    });\n  }\n  function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n    var desc = {};\n    Object.keys(descriptor).forEach(function (key) {\n      desc[key] = descriptor[key];\n    });\n    desc.enumerable = !!desc.enumerable;\n    desc.configurable = !!desc.configurable;\n    if ('value' in desc || desc.initializer) {\n      desc.writable = true;\n    }\n    desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n      return decorator(target, property, desc) || desc;\n    }, desc);\n    if (context && desc.initializer !== void 0) {\n      desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n      desc.initializer = undefined;\n    }\n    if (desc.initializer === void 0) {\n      Object.defineProperty(target, property, desc);\n      desc = null;\n    }\n    return desc;\n  }\n  var id = 0;\n  function _classPrivateFieldLooseKey(name) {\n    return '__private_' + id++ + '_' + name;\n  }\n  function _classPrivateFieldLooseBase(receiver, privateKey) {\n    if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n      throw new TypeError('attempted to use private field on non-instance');\n    }\n    return receiver;\n  }\n  function _classPrivateFieldGet(receiver, privateMap) {\n    var descriptor = privateMap.get(receiver);\n    if (!descriptor) {\n      throw new TypeError('attempted to get private field on non-instance');\n    }\n    if (descriptor.get) {\n      return descriptor.get.call(receiver);\n    }\n    return descriptor.value;\n  }\n  function _classPrivateFieldSet(receiver, privateMap, value) {\n    var descriptor = privateMap.get(receiver);\n    if (!descriptor) {\n      throw new TypeError('attempted to set private field on non-instance');\n    }\n    if (descriptor.set) {\n      descriptor.set.call(receiver, value);\n    } else {\n      if (!descriptor.writable) {\n        throw new TypeError('attempted to set read only private field');\n      }\n      descriptor.value = value;\n    }\n    return value;\n  }\n  function _classPrivateFieldDestructureSet(receiver, privateMap) {\n    if (!privateMap.has(receiver)) {\n      throw new TypeError('attempted to set private field on non-instance');\n    }\n    var descriptor = privateMap.get(receiver);\n    if (descriptor.set) {\n      if (!('__destrObj' in descriptor)) {\n        descriptor.__destrObj = {\n          set value(v) {\n            descriptor.set.call(receiver, v);\n          }\n        };\n      }\n      return descriptor.__destrObj;\n    } else {\n      if (!descriptor.writable) {\n        throw new TypeError('attempted to set read only private field');\n      }\n      return descriptor;\n    }\n  }\n  function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {\n    if (receiver !== classConstructor) {\n      throw new TypeError('Private static access of wrong provenance');\n    }\n    return descriptor.value;\n  }\n  function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {\n    if (receiver !== classConstructor) {\n      throw new TypeError('Private static access of wrong provenance');\n    }\n    if (!descriptor.writable) {\n      throw new TypeError('attempted to set read only private field');\n    }\n    descriptor.value = value;\n    return value;\n  }\n  function _classStaticPrivateMethodGet(receiver, classConstructor, method) {\n    if (receiver !== classConstructor) {\n      throw new TypeError('Private static access of wrong provenance');\n    }\n    return method;\n  }\n  function _classStaticPrivateMethodSet() {\n    throw new TypeError('attempted to set read only static private field');\n  }\n  function _decorate(decorators, factory, superClass, mixins) {\n    var api = _getDecoratorsApi();\n    if (mixins) {\n      for (var i = 0; i < mixins.length; i++) {\n        api = mixins[i](api);\n      }\n    }\n    var r = factory(function initialize(O) {\n      api.initializeInstanceElements(O, decorated.elements);\n    }, superClass);\n    var decorated = api.decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);\n    api.initializeClassElements(r.F, decorated.elements);\n    return api.runClassFinishers(r.F, decorated.finishers);\n  }\n  function _getDecoratorsApi() {\n    _getDecoratorsApi = function () {\n      return api;\n    };\n    var api = {\n      elementsDefinitionOrder: [['method'], ['field']],\n      initializeInstanceElements: function (O, elements) {\n        ['method', 'field'].forEach(function (kind) {\n          elements.forEach(function (element) {\n            if (element.kind === kind && element.placement === 'own') {\n              this.defineClassElement(O, element);\n            }\n          }, this);\n        }, this);\n      },\n      initializeClassElements: function (F, elements) {\n        var proto = F.prototype;\n        ['method', 'field'].forEach(function (kind) {\n          elements.forEach(function (element) {\n            var placement = element.placement;\n            if (element.kind === kind && (placement === 'static' || placement === 'prototype')) {\n              var receiver = placement === 'static' ? F : proto;\n              this.defineClassElement(receiver, element);\n            }\n          }, this);\n        }, this);\n      },\n      defineClassElement: function (receiver, element) {\n        var descriptor = element.descriptor;\n        if (element.kind === 'field') {\n          var initializer = element.initializer;\n          descriptor = {\n            enumerable: descriptor.enumerable,\n            writable: descriptor.writable,\n            configurable: descriptor.configurable,\n            value: initializer === void 0 ? void 0 : initializer.call(receiver)\n          };\n        }\n        Object.defineProperty(receiver, element.key, descriptor);\n      },\n      decorateClass: function (elements, decorators) {\n        var newElements = [];\n        var finishers = [];\n        var placements = {\n          static: [],\n          prototype: [],\n          own: []\n        };\n        elements.forEach(function (element) {\n          this.addElementPlacement(element, placements);\n        }, this);\n        elements.forEach(function (element) {\n          if (!_hasDecorators(element)) return newElements.push(element);\n          var elementFinishersExtras = this.decorateElement(element, placements);\n          newElements.push(elementFinishersExtras.element);\n          newElements.push.apply(newElements, elementFinishersExtras.extras);\n          finishers.push.apply(finishers, elementFinishersExtras.finishers);\n        }, this);\n        if (!decorators) {\n          return {\n            elements: newElements,\n            finishers: finishers\n          };\n        }\n        var result = this.decorateConstructor(newElements, decorators);\n        finishers.push.apply(finishers, result.finishers);\n        result.finishers = finishers;\n        return result;\n      },\n      addElementPlacement: function (element, placements, silent) {\n        var keys = placements[element.placement];\n        if (!silent && keys.indexOf(element.key) !== -1) {\n          throw new TypeError('Duplicated element (' + element.key + ')');\n        }\n        keys.push(element.key);\n      },\n      decorateElement: function (element, placements) {\n        var extras = [];\n        var finishers = [];\n        for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {\n          var keys = placements[element.placement];\n          keys.splice(keys.indexOf(element.key), 1);\n          var elementObject = this.fromElementDescriptor(element);\n          var elementFinisherExtras = this.toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);\n          element = elementFinisherExtras.element;\n          this.addElementPlacement(element, placements);\n          if (elementFinisherExtras.finisher) {\n            finishers.push(elementFinisherExtras.finisher);\n          }\n          var newExtras = elementFinisherExtras.extras;\n          if (newExtras) {\n            for (var j = 0; j < newExtras.length; j++) {\n              this.addElementPlacement(newExtras[j], placements);\n            }\n            extras.push.apply(extras, newExtras);\n          }\n        }\n        return {\n          element: element,\n          finishers: finishers,\n          extras: extras\n        };\n      },\n      decorateConstructor: function (elements, decorators) {\n        var finishers = [];\n        for (var i = decorators.length - 1; i >= 0; i--) {\n          var obj = this.fromClassDescriptor(elements);\n          var elementsAndFinisher = this.toClassDescriptor((0, decorators[i])(obj) || obj);\n          if (elementsAndFinisher.finisher !== undefined) {\n            finishers.push(elementsAndFinisher.finisher);\n          }\n          if (elementsAndFinisher.elements !== undefined) {\n            elements = elementsAndFinisher.elements;\n            for (var j = 0; j < elements.length - 1; j++) {\n              for (var k = j + 1; k < elements.length; k++) {\n                if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {\n                  throw new TypeError('Duplicated element (' + elements[j].key + ')');\n                }\n              }\n            }\n          }\n        }\n        return {\n          elements: elements,\n          finishers: finishers\n        };\n      },\n      fromElementDescriptor: function (element) {\n        var obj = {\n          kind: element.kind,\n          key: element.key,\n          placement: element.placement,\n          descriptor: element.descriptor\n        };\n        var desc = {\n          value: 'Descriptor',\n          configurable: true\n        };\n        Object.defineProperty(obj, Symbol.toStringTag, desc);\n        if (element.kind === 'field') obj.initializer = element.initializer;\n        return obj;\n      },\n      toElementDescriptors: function (elementObjects) {\n        if (elementObjects === undefined) return;\n        return _toArray(elementObjects).map(function (elementObject) {\n          var element = this.toElementDescriptor(elementObject);\n          this.disallowProperty(elementObject, 'finisher', 'An element descriptor');\n          this.disallowProperty(elementObject, 'extras', 'An element descriptor');\n          return element;\n        }, this);\n      },\n      toElementDescriptor: function (elementObject) {\n        var kind = String(elementObject.kind);\n        if (kind !== 'method' && kind !== 'field') {\n          throw new TypeError('An element descriptor\\'s .kind property must be either \"method\" or' + ' \"field\", but a decorator created an element descriptor with' + ' .kind \"' + kind + '\"');\n        }\n        var key = _toPropertyKey(elementObject.key);\n        var placement = String(elementObject.placement);\n        if (placement !== 'static' && placement !== 'prototype' && placement !== 'own') {\n          throw new TypeError('An element descriptor\\'s .placement property must be one of \"static\",' + ' \"prototype\" or \"own\", but a decorator created an element descriptor' + ' with .placement \"' + placement + '\"');\n        }\n        var descriptor = elementObject.descriptor;\n        this.disallowProperty(elementObject, 'elements', 'An element descriptor');\n        var element = {\n          kind: kind,\n          key: key,\n          placement: placement,\n          descriptor: Object.assign({}, descriptor)\n        };\n        if (kind !== 'field') {\n          this.disallowProperty(elementObject, 'initializer', 'A method descriptor');\n        } else {\n          this.disallowProperty(descriptor, 'get', 'The property descriptor of a field descriptor');\n          this.disallowProperty(descriptor, 'set', 'The property descriptor of a field descriptor');\n          this.disallowProperty(descriptor, 'value', 'The property descriptor of a field descriptor');\n          element.initializer = elementObject.initializer;\n        }\n        return element;\n      },\n      toElementFinisherExtras: function (elementObject) {\n        var element = this.toElementDescriptor(elementObject);\n        var finisher = _optionalCallableProperty(elementObject, 'finisher');\n        var extras = this.toElementDescriptors(elementObject.extras);\n        return {\n          element: element,\n          finisher: finisher,\n          extras: extras\n        };\n      },\n      fromClassDescriptor: function (elements) {\n        var obj = {\n          kind: 'class',\n          elements: elements.map(this.fromElementDescriptor, this)\n        };\n        var desc = {\n          value: 'Descriptor',\n          configurable: true\n        };\n        Object.defineProperty(obj, Symbol.toStringTag, desc);\n        return obj;\n      },\n      toClassDescriptor: function (obj) {\n        var kind = String(obj.kind);\n        if (kind !== 'class') {\n          throw new TypeError('A class descriptor\\'s .kind property must be \"class\", but a decorator' + ' created a class descriptor with .kind \"' + kind + '\"');\n        }\n        this.disallowProperty(obj, 'key', 'A class descriptor');\n        this.disallowProperty(obj, 'placement', 'A class descriptor');\n        this.disallowProperty(obj, 'descriptor', 'A class descriptor');\n        this.disallowProperty(obj, 'initializer', 'A class descriptor');\n        this.disallowProperty(obj, 'extras', 'A class descriptor');\n        var finisher = _optionalCallableProperty(obj, 'finisher');\n        var elements = this.toElementDescriptors(obj.elements);\n        return {\n          elements: elements,\n          finisher: finisher\n        };\n      },\n      runClassFinishers: function (constructor, finishers) {\n        for (var i = 0; i < finishers.length; i++) {\n          var newConstructor = (0, finishers[i])(constructor);\n          if (newConstructor !== undefined) {\n            if (typeof newConstructor !== 'function') {\n              throw new TypeError('Finishers must return a constructor.');\n            }\n            constructor = newConstructor;\n          }\n        }\n        return constructor;\n      },\n      disallowProperty: function (obj, name, objectType) {\n        if (obj[name] !== undefined) {\n          throw new TypeError(objectType + \" can't have a .\" + name + ' property.');\n        }\n      }\n    };\n    return api;\n  }\n  function _createElementDescriptor(def) {\n    var key = _toPropertyKey(def.key);\n    var descriptor;\n    if (def.kind === 'method') {\n      descriptor = {\n        value: def.value,\n        writable: true,\n        configurable: true,\n        enumerable: false\n      };\n    } else if (def.kind === 'get') {\n      descriptor = {\n        get: def.value,\n        configurable: true,\n        enumerable: false\n      };\n    } else if (def.kind === 'set') {\n      descriptor = {\n        set: def.value,\n        configurable: true,\n        enumerable: false\n      };\n    } else if (def.kind === 'field') {\n      descriptor = {\n        configurable: true,\n        writable: true,\n        enumerable: true\n      };\n    }\n    var element = {\n      kind: def.kind === 'field' ? 'field' : 'method',\n      key: key,\n      placement: def.static ? 'static' : def.kind === 'field' ? 'own' : 'prototype',\n      descriptor: descriptor\n    };\n    if (def.decorators) element.decorators = def.decorators;\n    if (def.kind === 'field') element.initializer = def.value;\n    return element;\n  }\n  function _coalesceGetterSetter(element, other) {\n    if (element.descriptor.get !== undefined) {\n      other.descriptor.get = element.descriptor.get;\n    } else {\n      other.descriptor.set = element.descriptor.set;\n    }\n  }\n  function _coalesceClassElements(elements) {\n    var newElements = [];\n    var isSameElement = function (other) {\n      return other.kind === 'method' && other.key === element.key && other.placement === element.placement;\n    };\n    for (var i = 0; i < elements.length; i++) {\n      var element = elements[i];\n      var other;\n      if (element.kind === 'method' && (other = newElements.find(isSameElement))) {\n        if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {\n          if (_hasDecorators(element) || _hasDecorators(other)) {\n            throw new ReferenceError('Duplicated methods (' + element.key + \") can't be decorated.\");\n          }\n          other.descriptor = element.descriptor;\n        } else {\n          if (_hasDecorators(element)) {\n            if (_hasDecorators(other)) {\n              throw new ReferenceError(\"Decorators can't be placed on different accessors with for \" + 'the same property (' + element.key + ').');\n            }\n            other.decorators = element.decorators;\n          }\n          _coalesceGetterSetter(element, other);\n        }\n      } else {\n        newElements.push(element);\n      }\n    }\n    return newElements;\n  }\n  function _hasDecorators(element) {\n    return element.decorators && element.decorators.length;\n  }\n  function _isDataDescriptor(desc) {\n    return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);\n  }\n  function _optionalCallableProperty(obj, name) {\n    var value = obj[name];\n    if (value !== undefined && typeof value !== 'function') {\n      throw new TypeError(\"Expected '\" + name + \"' to be a function\");\n    }\n    return value;\n  }\n  function _classPrivateMethodGet(receiver, privateSet, fn) {\n    if (!privateSet.has(receiver)) {\n      throw new TypeError('attempted to get private field on non-instance');\n    }\n    return fn;\n  }\n  function _classPrivateMethodSet() {\n    throw new TypeError('attempted to reassign private method');\n  }\n  function _wrapRegExp(re, groups) {\n    _wrapRegExp = function (re, groups) {\n      return new BabelRegExp(re, groups);\n    };\n    var _RegExp = _wrapNativeSuper(RegExp);\n    var _super = RegExp.prototype;\n    var _groups = new WeakMap();\n    function BabelRegExp(re, groups) {\n      var _this = _RegExp.call(this, re);\n      _groups.set(_this, groups);\n      return _this;\n    }\n    _inherits(BabelRegExp, _RegExp);\n    BabelRegExp.prototype.exec = function (str) {\n      var result = _super.exec.call(this, str);\n      if (result) result.groups = buildGroups(result, this);\n      return result;\n    };\n    BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\n      if (typeof substitution === 'string') {\n        var groups = _groups.get(this);\n        return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\n          return '$' + groups[name];\n        }));\n      } else if (typeof substitution === 'function') {\n        var _this = this;\n        return _super[Symbol.replace].call(this, str, function () {\n          var args = [];\n          args.push.apply(args, arguments);\n          if (typeof args[args.length - 1] !== 'object') {\n            args.push(buildGroups(args, _this));\n          }\n          return substitution.apply(this, args);\n        });\n      } else {\n        return _super[Symbol.replace].call(this, str, substitution);\n      }\n    };\n    function buildGroups(result, re) {\n      var g = _groups.get(re);\n      return Object.keys(g).reduce(function (groups, name) {\n        groups[name] = result[g[name]];\n        return groups;\n      }, Object.create(null));\n    }\n    return _wrapRegExp.apply(this, arguments);\n  }\n  var arrayRemove = function arrayRemove(arr, index) {\n    return arr.splice(index, 1);\n  };\n  var run = function run(cb, sync) {\n    if (sync) {\n      cb();\n    } else if (document.hidden) {\n      Promise.resolve(1).then(cb);\n    } else {\n      setTimeout(cb, 0);\n    }\n  };\n  var on = function on() {\n    var listeners = [];\n    var off = function off(event, cb) {\n      arrayRemove(listeners, listeners.findIndex(function (listener) {\n        return listener.event === event && (listener.cb === cb || !cb);\n      }));\n    };\n    var _fire = function fire(event, args, sync) {\n      listeners.filter(function (listener) {\n        return listener.event === event;\n      }).map(function (listener) {\n        return listener.cb;\n      }).forEach(function (cb) {\n        return run(function () {\n          return cb.apply(void 0, _toConsumableArray(args));\n        }, sync);\n      });\n    };\n    return {\n      fireSync: function fireSync(event) {\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        _fire(event, args, true);\n      },\n      fire: function fire(event) {\n        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          args[_key2 - 1] = arguments[_key2];\n        }\n        _fire(event, args, false);\n      },\n      on: function on(event, cb) {\n        listeners.push({\n          event: event,\n          cb: cb\n        });\n      },\n      onOnce: function onOnce(event, _cb) {\n        listeners.push({\n          event: event,\n          cb: function cb() {\n            off(event, _cb);\n            _cb.apply(void 0, arguments);\n          }\n        });\n      },\n      off: off\n    };\n  };\n  var copyObjectPropertiesToObject = function copyObjectPropertiesToObject(src, target, excluded) {\n    Object.getOwnPropertyNames(src).filter(function (property) {\n      return !excluded.includes(property);\n    }).forEach(function (key) {\n      return Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(src, key));\n    });\n  };\n  var PRIVATE = ['fire', 'process', 'revert', 'load', 'on', 'off', 'onOnce', 'retryLoad', 'extend', 'archive', 'archived', 'release', 'released', 'requestProcessing', 'freeze'];\n  var createItemAPI = function createItemAPI(item) {\n    var api = {};\n    copyObjectPropertiesToObject(item, api, PRIVATE);\n    return api;\n  };\n  var removeReleasedItems = function removeReleasedItems(items) {\n    items.forEach(function (item, index) {\n      if (item.released) {\n        arrayRemove(items, index);\n      }\n    });\n  };\n  var ItemStatus = {\n    INIT: 1,\n    IDLE: 2,\n    PROCESSING_QUEUED: 9,\n    PROCESSING: 3,\n    PROCESSING_COMPLETE: 5,\n    PROCESSING_ERROR: 6,\n    PROCESSING_REVERT_ERROR: 10,\n    LOADING: 7,\n    LOAD_ERROR: 8\n  };\n  var FileOrigin = {\n    INPUT: 1,\n    LIMBO: 2,\n    LOCAL: 3\n  };\n  var getNonNumeric = function getNonNumeric(str) {\n    return /[^0-9]+/.exec(str);\n  };\n  var getDecimalSeparator = function getDecimalSeparator() {\n    return getNonNumeric(1.1.toLocaleString())[0];\n  };\n  var getThousandsSeparator = function getThousandsSeparator() {\n    // Added for browsers that do not return the thousands separator (happend on native browser Android 4.4.4)\n    // We check against the normal toString output and if they're the same return a comma when decimal separator is a dot\n    var decimalSeparator = getDecimalSeparator();\n    var thousandsStringWithSeparator = 1000.0.toLocaleString();\n    var thousandsStringWithoutSeparator = 1000.0.toString();\n    if (thousandsStringWithSeparator !== thousandsStringWithoutSeparator) {\n      return getNonNumeric(thousandsStringWithSeparator)[0];\n    }\n    return decimalSeparator === '.' ? ',' : '.';\n  };\n  var Type = {\n    BOOLEAN: 'boolean',\n    INT: 'int',\n    NUMBER: 'number',\n    STRING: 'string',\n    ARRAY: 'array',\n    OBJECT: 'object',\n    FUNCTION: 'function',\n    ACTION: 'action',\n    SERVER_API: 'serverapi',\n    REGEX: 'regex'\n  };\n\n  // all registered filters\n  var filters = [];\n\n  // loops over matching filters and passes options to each filter, returning the mapped results\n  var applyFilterChain = function applyFilterChain(key, value, utils) {\n    return new Promise(function (resolve, reject) {\n      // find matching filters for this key\n      var matchingFilters = filters.filter(function (f) {\n        return f.key === key;\n      }).map(function (f) {\n        return f.cb;\n      });\n\n      // resolve now\n      if (matchingFilters.length === 0) {\n        resolve(value);\n        return;\n      }\n\n      // first filter to kick things of\n      var initialFilter = matchingFilters.shift();\n\n      // chain filters\n      matchingFilters.reduce(\n      // loop over promises passing value to next promise\n      function (current, next) {\n        return current.then(function (value) {\n          return next(value, utils);\n        });\n      },\n      // call initial filter, will return a promise\n      initialFilter(value, utils)\n\n      // all executed\n      ).then(function (value) {\n        return resolve(value);\n      }).catch(function (error) {\n        return reject(error);\n      });\n    });\n  };\n  var applyFilters = function applyFilters(key, value, utils) {\n    return filters.filter(function (f) {\n      return f.key === key;\n    }).map(function (f) {\n      return f.cb(value, utils);\n    });\n  };\n\n  // adds a new filter to the list\n  var addFilter = function addFilter(key, cb) {\n    return filters.push({\n      key: key,\n      cb: cb\n    });\n  };\n  var extendDefaultOptions = function extendDefaultOptions(additionalOptions) {\n    return Object.assign(defaultOptions, additionalOptions);\n  };\n  var getOptions = function getOptions() {\n    return Object.assign({}, defaultOptions);\n  };\n  var setOptions = function setOptions(opts) {\n    forin(opts, function (key, value) {\n      // key does not exist, so this option cannot be set\n      if (!defaultOptions[key]) {\n        return;\n      }\n      defaultOptions[key][0] = getValueByType(value, defaultOptions[key][0], defaultOptions[key][1]);\n    });\n  };\n\n  // default options on app\n  var defaultOptions = {\n    // the id to add to the root element\n    id: [null, Type.STRING],\n    // input field name to use\n    name: ['filepond', Type.STRING],\n    // disable the field\n    disabled: [false, Type.BOOLEAN],\n    // classname to put on wrapper\n    className: [null, Type.STRING],\n    // is the field required\n    required: [false, Type.BOOLEAN],\n    // Allow media capture when value is set\n    captureMethod: [null, Type.STRING],\n    // - \"camera\", \"microphone\" or \"camcorder\",\n    // - Does not work with multiple on apple devices\n    // - If set, acceptedFileTypes must be made to match with media wildcard \"image/*\", \"audio/*\" or \"video/*\"\n\n    // sync `acceptedFileTypes` property with `accept` attribute\n    allowSyncAcceptAttribute: [true, Type.BOOLEAN],\n    // Feature toggles\n    allowDrop: [true, Type.BOOLEAN],\n    // Allow dropping of files\n    allowBrowse: [true, Type.BOOLEAN],\n    // Allow browsing the file system\n    allowPaste: [true, Type.BOOLEAN],\n    // Allow pasting files\n    allowMultiple: [false, Type.BOOLEAN],\n    // Allow multiple files (disabled by default, as multiple attribute is also required on input to allow multiple)\n    allowReplace: [true, Type.BOOLEAN],\n    // Allow dropping a file on other file to replace it (only works when multiple is set to false)\n    allowRevert: [true, Type.BOOLEAN],\n    // Allows user to revert file upload\n    allowRemove: [true, Type.BOOLEAN],\n    // Allow user to remove a file\n    allowProcess: [true, Type.BOOLEAN],\n    // Allows user to process a file, when set to false, this removes the file upload button\n    allowReorder: [false, Type.BOOLEAN],\n    // Allow reordering of files\n    allowDirectoriesOnly: [false, Type.BOOLEAN],\n    // Allow only selecting directories with browse (no support for filtering dnd at this point)\n\n    // Try store file if `server` not set\n    storeAsFile: [false, Type.BOOLEAN],\n    // Revert mode\n    forceRevert: [false, Type.BOOLEAN],\n    // Set to 'force' to require the file to be reverted before removal\n\n    // Input requirements\n    maxFiles: [null, Type.INT],\n    // Max number of files\n    checkValidity: [false, Type.BOOLEAN],\n    // Enables custom validity messages\n\n    // Where to put file\n    itemInsertLocationFreedom: [true, Type.BOOLEAN],\n    // Set to false to always add items to begin or end of list\n    itemInsertLocation: ['before', Type.STRING],\n    // Default index in list to add items that have been dropped at the top of the list\n    itemInsertInterval: [75, Type.INT],\n    // Drag 'n Drop related\n    dropOnPage: [false, Type.BOOLEAN],\n    // Allow dropping of files anywhere on page (prevents browser from opening file if dropped outside of Up)\n    dropOnElement: [true, Type.BOOLEAN],\n    // Drop needs to happen on element (set to false to also load drops outside of Up)\n    dropValidation: [false, Type.BOOLEAN],\n    // Enable or disable validating files on drop\n    ignoredFiles: [['.ds_store', 'thumbs.db', 'desktop.ini'], Type.ARRAY],\n    // Upload related\n    instantUpload: [true, Type.BOOLEAN],\n    // Should upload files immediately on drop\n    maxParallelUploads: [2, Type.INT],\n    // Maximum files to upload in parallel\n    allowMinimumUploadDuration: [true, Type.BOOLEAN],\n    // if true uploads take at least 750 ms, this ensures the user sees the upload progress giving trust the upload actually happened\n\n    // Chunks\n    chunkUploads: [false, Type.BOOLEAN],\n    // Enable chunked uploads\n    chunkForce: [false, Type.BOOLEAN],\n    // Force use of chunk uploads even for files smaller than chunk size\n    chunkSize: [5000000, Type.INT],\n    // Size of chunks (5MB default)\n    chunkRetryDelays: [[500, 1000, 3000], Type.ARRAY],\n    // Amount of times to retry upload of a chunk when it fails\n\n    // The server api end points to use for uploading (see docs)\n    server: [null, Type.SERVER_API],\n    // File size calculations, can set to 1024, this is only used for display, properties use file size base 1000\n    fileSizeBase: [1000, Type.INT],\n    // Labels and status messages\n    labelFileSizeBytes: ['bytes', Type.STRING],\n    labelFileSizeKilobytes: ['KB', Type.STRING],\n    labelFileSizeMegabytes: ['MB', Type.STRING],\n    labelFileSizeGigabytes: ['GB', Type.STRING],\n    labelDecimalSeparator: [getDecimalSeparator(), Type.STRING],\n    // Default is locale separator\n    labelThousandsSeparator: [getThousandsSeparator(), Type.STRING],\n    // Default is locale separator\n\n    labelIdle: ['Drag & Drop your files or <span class=\"filepond--label-action\">Browse</span>', Type.STRING],\n    labelInvalidField: ['Field contains invalid files', Type.STRING],\n    labelFileWaitingForSize: ['Waiting for size', Type.STRING],\n    labelFileSizeNotAvailable: ['Size not available', Type.STRING],\n    labelFileCountSingular: ['file in list', Type.STRING],\n    labelFileCountPlural: ['files in list', Type.STRING],\n    labelFileLoading: ['Loading', Type.STRING],\n    labelFileAdded: ['Added', Type.STRING],\n    // assistive only\n    labelFileLoadError: ['Error during load', Type.STRING],\n    labelFileRemoved: ['Removed', Type.STRING],\n    // assistive only\n    labelFileRemoveError: ['Error during remove', Type.STRING],\n    labelFileProcessing: ['Uploading', Type.STRING],\n    labelFileProcessingComplete: ['Upload complete', Type.STRING],\n    labelFileProcessingAborted: ['Upload cancelled', Type.STRING],\n    labelFileProcessingError: ['Error during upload', Type.STRING],\n    labelFileProcessingRevertError: ['Error during revert', Type.STRING],\n    labelTapToCancel: ['tap to cancel', Type.STRING],\n    labelTapToRetry: ['tap to retry', Type.STRING],\n    labelTapToUndo: ['tap to undo', Type.STRING],\n    labelButtonRemoveItem: ['Remove', Type.STRING],\n    labelButtonAbortItemLoad: ['Abort', Type.STRING],\n    labelButtonRetryItemLoad: ['Retry', Type.STRING],\n    labelButtonAbortItemProcessing: ['Cancel', Type.STRING],\n    labelButtonUndoItemProcessing: ['Undo', Type.STRING],\n    labelButtonRetryItemProcessing: ['Retry', Type.STRING],\n    labelButtonProcessItem: ['Upload', Type.STRING],\n    // make sure width and height plus viewpox are even numbers so icons are nicely centered\n    iconRemove: ['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.586 13l-2.293 2.293a1 1 0 0 0 1.414 1.414L13 14.414l2.293 2.293a1 1 0 0 0 1.414-1.414L14.414 13l2.293-2.293a1 1 0 0 0-1.414-1.414L13 11.586l-2.293-2.293a1 1 0 0 0-1.414 1.414L11.586 13z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>', Type.STRING],\n    iconProcess: ['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14 10.414v3.585a1 1 0 0 1-2 0v-3.585l-1.293 1.293a1 1 0 0 1-1.414-1.415l3-3a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1-1.414 1.415L14 10.414zM9 18a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2H9z\" fill=\"currentColor\" fill-rule=\"evenodd\"/></svg>', Type.STRING],\n    iconRetry: ['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.81 9.185l-.038.02A4.997 4.997 0 0 0 8 13.683a5 5 0 0 0 5 5 5 5 0 0 0 5-5 1 1 0 0 1 2 0A7 7 0 1 1 9.722 7.496l-.842-.21a.999.999 0 1 1 .484-1.94l3.23.806c.535.133.86.675.73 1.21l-.804 3.233a.997.997 0 0 1-1.21.73.997.997 0 0 1-.73-1.21l.23-.928v-.002z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>', Type.STRING],\n    iconUndo: ['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.185 10.81l.02-.038A4.997 4.997 0 0 1 13.683 8a5 5 0 0 1 5 5 5 5 0 0 1-5 5 1 1 0 0 0 0 2A7 7 0 1 0 7.496 9.722l-.21-.842a.999.999 0 1 0-1.94.484l.806 3.23c.133.535.675.86 1.21.73l3.233-.803a.997.997 0 0 0 .73-1.21.997.997 0 0 0-1.21-.73l-.928.23-.002-.001z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>', Type.STRING],\n    iconDone: ['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18.293 9.293a1 1 0 0 1 1.414 1.414l-7.002 7a1 1 0 0 1-1.414 0l-3.998-4a1 1 0 1 1 1.414-1.414L12 15.586l6.294-6.293z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>', Type.STRING],\n    // event handlers\n    oninit: [null, Type.FUNCTION],\n    onwarning: [null, Type.FUNCTION],\n    onerror: [null, Type.FUNCTION],\n    onactivatefile: [null, Type.FUNCTION],\n    oninitfile: [null, Type.FUNCTION],\n    onaddfilestart: [null, Type.FUNCTION],\n    onaddfileprogress: [null, Type.FUNCTION],\n    onaddfile: [null, Type.FUNCTION],\n    onprocessfilestart: [null, Type.FUNCTION],\n    onprocessfileprogress: [null, Type.FUNCTION],\n    onprocessfileabort: [null, Type.FUNCTION],\n    onprocessfilerevert: [null, Type.FUNCTION],\n    onprocessfile: [null, Type.FUNCTION],\n    onprocessfiles: [null, Type.FUNCTION],\n    onremovefile: [null, Type.FUNCTION],\n    onpreparefile: [null, Type.FUNCTION],\n    onupdatefiles: [null, Type.FUNCTION],\n    onreorderfiles: [null, Type.FUNCTION],\n    // hooks\n    beforeDropFile: [null, Type.FUNCTION],\n    beforeAddFile: [null, Type.FUNCTION],\n    beforeRemoveFile: [null, Type.FUNCTION],\n    beforePrepareFile: [null, Type.FUNCTION],\n    // styles\n    stylePanelLayout: [null, Type.STRING],\n    // null 'integrated', 'compact', 'circle'\n    stylePanelAspectRatio: [null, Type.STRING],\n    // null or '3:2' or 1\n    styleItemPanelAspectRatio: [null, Type.STRING],\n    styleButtonRemoveItemPosition: ['left', Type.STRING],\n    styleButtonProcessItemPosition: ['right', Type.STRING],\n    styleLoadIndicatorPosition: ['right', Type.STRING],\n    styleProgressIndicatorPosition: ['right', Type.STRING],\n    styleButtonRemoveItemAlign: [false, Type.BOOLEAN],\n    // custom initial files array\n    files: [[], Type.ARRAY],\n    // show support by displaying credits\n    credits: [['https://pqina.nl/', 'Powered by PQINA'], Type.ARRAY]\n  };\n  var getItemByQuery = function getItemByQuery(items, query) {\n    // just return first index\n    if (isEmpty(query)) {\n      return items[0] || null;\n    }\n\n    // query is index\n    if (isInt(query)) {\n      return items[query] || null;\n    }\n\n    // if query is item, get the id\n    if (typeof query === 'object') {\n      query = query.id;\n    }\n\n    // assume query is a string and return item by id\n    return items.find(function (item) {\n      return item.id === query;\n    }) || null;\n  };\n  var getNumericAspectRatioFromString = function getNumericAspectRatioFromString(aspectRatio) {\n    if (isEmpty(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (/:/.test(aspectRatio)) {\n      var parts = aspectRatio.split(':');\n      return parts[1] / parts[0];\n    }\n    return parseFloat(aspectRatio);\n  };\n  var getActiveItems = function getActiveItems(items) {\n    return items.filter(function (item) {\n      return !item.archived;\n    });\n  };\n  var Status = {\n    EMPTY: 0,\n    IDLE: 1,\n    // waiting\n    ERROR: 2,\n    // a file is in error state\n    BUSY: 3,\n    // busy processing or loading\n    READY: 4 // all files uploaded\n  };\n\n  var res = null;\n  var canUpdateFileInput = function canUpdateFileInput() {\n    if (res === null) {\n      try {\n        var dataTransfer = new DataTransfer();\n        dataTransfer.items.add(new File(['hello world'], 'This_Works.txt'));\n        var el = document.createElement('input');\n        el.setAttribute('type', 'file');\n        el.files = dataTransfer.files;\n        res = el.files.length === 1;\n      } catch (err) {\n        res = false;\n      }\n    }\n    return res;\n  };\n  var ITEM_ERROR = [ItemStatus.LOAD_ERROR, ItemStatus.PROCESSING_ERROR, ItemStatus.PROCESSING_REVERT_ERROR];\n  var ITEM_BUSY = [ItemStatus.LOADING, ItemStatus.PROCESSING, ItemStatus.PROCESSING_QUEUED, ItemStatus.INIT];\n  var ITEM_READY = [ItemStatus.PROCESSING_COMPLETE];\n  var isItemInErrorState = function isItemInErrorState(item) {\n    return ITEM_ERROR.includes(item.status);\n  };\n  var isItemInBusyState = function isItemInBusyState(item) {\n    return ITEM_BUSY.includes(item.status);\n  };\n  var isItemInReadyState = function isItemInReadyState(item) {\n    return ITEM_READY.includes(item.status);\n  };\n  var isAsync = function isAsync(state) {\n    return isObject(state.options.server) && (isObject(state.options.server.process) || isFunction(state.options.server.process));\n  };\n  var queries = function queries(state) {\n    return {\n      GET_STATUS: function GET_STATUS() {\n        var items = getActiveItems(state.items);\n        var EMPTY = Status.EMPTY,\n          ERROR = Status.ERROR,\n          BUSY = Status.BUSY,\n          IDLE = Status.IDLE,\n          READY = Status.READY;\n        if (items.length === 0) return EMPTY;\n        if (items.some(isItemInErrorState)) return ERROR;\n        if (items.some(isItemInBusyState)) return BUSY;\n        if (items.some(isItemInReadyState)) return READY;\n        return IDLE;\n      },\n      GET_ITEM: function GET_ITEM(query) {\n        return getItemByQuery(state.items, query);\n      },\n      GET_ACTIVE_ITEM: function GET_ACTIVE_ITEM(query) {\n        return getItemByQuery(getActiveItems(state.items), query);\n      },\n      GET_ACTIVE_ITEMS: function GET_ACTIVE_ITEMS() {\n        return getActiveItems(state.items);\n      },\n      GET_ITEMS: function GET_ITEMS() {\n        return state.items;\n      },\n      GET_ITEM_NAME: function GET_ITEM_NAME(query) {\n        var item = getItemByQuery(state.items, query);\n        return item ? item.filename : null;\n      },\n      GET_ITEM_SIZE: function GET_ITEM_SIZE(query) {\n        var item = getItemByQuery(state.items, query);\n        return item ? item.fileSize : null;\n      },\n      GET_STYLES: function GET_STYLES() {\n        return Object.keys(state.options).filter(function (key) {\n          return /^style/.test(key);\n        }).map(function (option) {\n          return {\n            name: option,\n            value: state.options[option]\n          };\n        });\n      },\n      GET_PANEL_ASPECT_RATIO: function GET_PANEL_ASPECT_RATIO() {\n        var isShapeCircle = /circle/.test(state.options.stylePanelLayout);\n        var aspectRatio = isShapeCircle ? 1 : getNumericAspectRatioFromString(state.options.stylePanelAspectRatio);\n        return aspectRatio;\n      },\n      GET_ITEM_PANEL_ASPECT_RATIO: function GET_ITEM_PANEL_ASPECT_RATIO() {\n        return state.options.styleItemPanelAspectRatio;\n      },\n      GET_ITEMS_BY_STATUS: function GET_ITEMS_BY_STATUS(status) {\n        return getActiveItems(state.items).filter(function (item) {\n          return item.status === status;\n        });\n      },\n      GET_TOTAL_ITEMS: function GET_TOTAL_ITEMS() {\n        return getActiveItems(state.items).length;\n      },\n      SHOULD_UPDATE_FILE_INPUT: function SHOULD_UPDATE_FILE_INPUT() {\n        return state.options.storeAsFile && canUpdateFileInput() && !isAsync(state);\n      },\n      IS_ASYNC: function IS_ASYNC() {\n        return isAsync(state);\n      },\n      GET_FILE_SIZE_LABELS: function GET_FILE_SIZE_LABELS(query) {\n        return {\n          labelBytes: query('GET_LABEL_FILE_SIZE_BYTES') || undefined,\n          labelKilobytes: query('GET_LABEL_FILE_SIZE_KILOBYTES') || undefined,\n          labelMegabytes: query('GET_LABEL_FILE_SIZE_MEGABYTES') || undefined,\n          labelGigabytes: query('GET_LABEL_FILE_SIZE_GIGABYTES') || undefined\n        };\n      }\n    };\n  };\n  var hasRoomForItem = function hasRoomForItem(state) {\n    var count = getActiveItems(state.items).length;\n\n    // if cannot have multiple items, to add one item it should currently not contain items\n    if (!state.options.allowMultiple) {\n      return count === 0;\n    }\n\n    // if allows multiple items, we check if a max item count has been set, if not, there's no limit\n    var maxFileCount = state.options.maxFiles;\n    if (maxFileCount === null) {\n      return true;\n    }\n\n    // we check if the current count is smaller than the max count, if so, another file can still be added\n    if (count < maxFileCount) {\n      return true;\n    }\n\n    // no more room for another file\n    return false;\n  };\n  var limit = function limit(value, min, max) {\n    return Math.max(Math.min(max, value), min);\n  };\n  var arrayInsert = function arrayInsert(arr, index, item) {\n    return arr.splice(index, 0, item);\n  };\n  var insertItem = function insertItem(items, item, index) {\n    if (isEmpty(item)) {\n      return null;\n    }\n\n    // if index is undefined, append\n    if (typeof index === 'undefined') {\n      items.push(item);\n      return item;\n    }\n\n    // limit the index to the size of the items array\n    index = limit(index, 0, items.length);\n\n    // add item to array\n    arrayInsert(items, index, item);\n\n    // expose\n    return item;\n  };\n  var isBase64DataURI = function isBase64DataURI(str) {\n    return /^\\s*data:([a-z]+\\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s]*)\\s*$/i.test(str);\n  };\n  var getFilenameFromURL = function getFilenameFromURL(url) {\n    return url.split('/').pop().split('?').shift();\n  };\n  var getExtensionFromFilename = function getExtensionFromFilename(name) {\n    return name.split('.').pop();\n  };\n  var guesstimateExtension = function guesstimateExtension(type) {\n    // if no extension supplied, exit here\n    if (typeof type !== 'string') {\n      return '';\n    }\n\n    // get subtype\n    var subtype = type.split('/').pop();\n\n    // is svg subtype\n    if (/svg/.test(subtype)) {\n      return 'svg';\n    }\n    if (/zip|compressed/.test(subtype)) {\n      return 'zip';\n    }\n    if (/plain/.test(subtype)) {\n      return 'txt';\n    }\n    if (/msword/.test(subtype)) {\n      return 'doc';\n    }\n\n    // if is valid subtype\n    if (/[a-z]+/.test(subtype)) {\n      // always use jpg extension\n      if (subtype === 'jpeg') {\n        return 'jpg';\n      }\n\n      // return subtype\n      return subtype;\n    }\n    return '';\n  };\n  var leftPad = function leftPad(value) {\n    var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    return (padding + value).slice(-padding.length);\n  };\n  var getDateString = function getDateString() {\n    var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n    return date.getFullYear() + '-' + leftPad(date.getMonth() + 1, '00') + '-' + leftPad(date.getDate(), '00') + '_' + leftPad(date.getHours(), '00') + '-' + leftPad(date.getMinutes(), '00') + '-' + leftPad(date.getSeconds(), '00');\n  };\n  var getFileFromBlob = function getFileFromBlob(blob, filename) {\n    var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    var extension = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n    var file = typeof type === 'string' ? blob.slice(0, blob.size, type) : blob.slice(0, blob.size, blob.type);\n    file.lastModifiedDate = new Date();\n\n    // copy relative path\n    if (blob._relativePath) file._relativePath = blob._relativePath;\n\n    // if blob has name property, use as filename if no filename supplied\n    if (!isString(filename)) {\n      filename = getDateString();\n    }\n\n    // if filename supplied but no extension and filename has extension\n    if (filename && extension === null && getExtensionFromFilename(filename)) {\n      file.name = filename;\n    } else {\n      extension = extension || guesstimateExtension(file.type);\n      file.name = filename + (extension ? '.' + extension : '');\n    }\n    return file;\n  };\n  var getBlobBuilder = function getBlobBuilder() {\n    return window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n  };\n  var createBlob = function createBlob(arrayBuffer, mimeType) {\n    var BB = getBlobBuilder();\n    if (BB) {\n      var bb = new BB();\n      bb.append(arrayBuffer);\n      return bb.getBlob(mimeType);\n    }\n    return new Blob([arrayBuffer], {\n      type: mimeType\n    });\n  };\n  var getBlobFromByteStringWithMimeType = function getBlobFromByteStringWithMimeType(byteString, mimeType) {\n    var ab = new ArrayBuffer(byteString.length);\n    var ia = new Uint8Array(ab);\n    for (var i = 0; i < byteString.length; i++) {\n      ia[i] = byteString.charCodeAt(i);\n    }\n    return createBlob(ab, mimeType);\n  };\n  var getMimeTypeFromBase64DataURI = function getMimeTypeFromBase64DataURI(dataURI) {\n    return (/^data:(.+);/.exec(dataURI) || [])[1] || null;\n  };\n  var getBase64DataFromBase64DataURI = function getBase64DataFromBase64DataURI(dataURI) {\n    // get data part of string (remove data:image/jpeg...,)\n    var data = dataURI.split(',')[1];\n\n    // remove any whitespace as that causes InvalidCharacterError in IE\n    return data.replace(/\\s/g, '');\n  };\n  var getByteStringFromBase64DataURI = function getByteStringFromBase64DataURI(dataURI) {\n    return atob(getBase64DataFromBase64DataURI(dataURI));\n  };\n  var getBlobFromBase64DataURI = function getBlobFromBase64DataURI(dataURI) {\n    var mimeType = getMimeTypeFromBase64DataURI(dataURI);\n    var byteString = getByteStringFromBase64DataURI(dataURI);\n    return getBlobFromByteStringWithMimeType(byteString, mimeType);\n  };\n  var getFileFromBase64DataURI = function getFileFromBase64DataURI(dataURI, filename, extension) {\n    return getFileFromBlob(getBlobFromBase64DataURI(dataURI), filename, null, extension);\n  };\n  var getFileNameFromHeader = function getFileNameFromHeader(header) {\n    // test if is content disposition header, if not exit\n    if (!/^content-disposition:/i.test(header)) return null;\n\n    // get filename parts\n    var matches = header.split(/filename=|filename\\*=.+''/).splice(1).map(function (name) {\n      return name.trim().replace(/^[\"']|[;\"']{0,2}$/g, '');\n    }).filter(function (name) {\n      return name.length;\n    });\n    return matches.length ? decodeURI(matches[matches.length - 1]) : null;\n  };\n  var getFileSizeFromHeader = function getFileSizeFromHeader(header) {\n    if (/content-length:/i.test(header)) {\n      var size = header.match(/[0-9]+/)[0];\n      return size ? parseInt(size, 10) : null;\n    }\n    return null;\n  };\n  var getTranfserIdFromHeader = function getTranfserIdFromHeader(header) {\n    if (/x-content-transfer-id:/i.test(header)) {\n      var id = (header.split(':')[1] || '').trim();\n      return id || null;\n    }\n    return null;\n  };\n  var getFileInfoFromHeaders = function getFileInfoFromHeaders(headers) {\n    var info = {\n      source: null,\n      name: null,\n      size: null\n    };\n    var rows = headers.split('\\n');\n    var _iteratorNormalCompletion = true;\n    var _didIteratorError = false;\n    var _iteratorError = undefined;\n    try {\n      for (var _iterator = rows[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n        var header = _step.value;\n        var name = getFileNameFromHeader(header);\n        if (name) {\n          info.name = name;\n          continue;\n        }\n        var size = getFileSizeFromHeader(header);\n        if (size) {\n          info.size = size;\n          continue;\n        }\n        var source = getTranfserIdFromHeader(header);\n        if (source) {\n          info.source = source;\n          continue;\n        }\n      }\n    } catch (err) {\n      _didIteratorError = true;\n      _iteratorError = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion && _iterator.return != null) {\n          _iterator.return();\n        }\n      } finally {\n        if (_didIteratorError) {\n          throw _iteratorError;\n        }\n      }\n    }\n    return info;\n  };\n  var createFileLoader = function createFileLoader(fetchFn) {\n    var state = {\n      source: null,\n      complete: false,\n      progress: 0,\n      size: null,\n      timestamp: null,\n      duration: 0,\n      request: null\n    };\n    var getProgress = function getProgress() {\n      return state.progress;\n    };\n    var abort = function abort() {\n      if (state.request && state.request.abort) {\n        state.request.abort();\n      }\n    };\n\n    // load source\n    var load = function load() {\n      // get quick reference\n      var source = state.source;\n      api.fire('init', source);\n\n      // Load Files\n      if (source instanceof File) {\n        api.fire('load', source);\n      } else if (source instanceof Blob) {\n        // Load blobs, set default name to current date\n        api.fire('load', getFileFromBlob(source, source.name));\n      } else if (isBase64DataURI(source)) {\n        // Load base 64, set default name to current date\n        api.fire('load', getFileFromBase64DataURI(source));\n      } else {\n        // Deal as if is external URL, let's load it!\n        loadURL(source);\n      }\n    };\n\n    // loads a url\n    var loadURL = function loadURL(url) {\n      // is remote url and no fetch method supplied\n      if (!fetchFn) {\n        api.fire('error', {\n          type: 'error',\n          body: \"Can't load URL\",\n          code: 400\n        });\n        return;\n      }\n\n      // set request start\n      state.timestamp = Date.now();\n\n      // load file\n      state.request = fetchFn(url, function (response) {\n        // update duration\n        state.duration = Date.now() - state.timestamp;\n\n        // done!\n        state.complete = true;\n\n        // turn blob response into a file\n        if (response instanceof Blob) {\n          response = getFileFromBlob(response, response.name || getFilenameFromURL(url));\n        }\n        api.fire('load',\n        // if has received blob, we go with blob, if no response, we return null\n        response instanceof Blob ? response : response ? response.body : null);\n      }, function (error) {\n        api.fire('error', typeof error === 'string' ? {\n          type: 'error',\n          code: 0,\n          body: error\n        } : error);\n      }, function (computable, current, total) {\n        // collected some meta data already\n        if (total) {\n          state.size = total;\n        }\n\n        // update duration\n        state.duration = Date.now() - state.timestamp;\n\n        // if we can't compute progress, we're not going to fire progress events\n        if (!computable) {\n          state.progress = null;\n          return;\n        }\n\n        // update progress percentage\n        state.progress = current / total;\n\n        // expose\n        api.fire('progress', state.progress);\n      }, function () {\n        api.fire('abort');\n      }, function (response) {\n        var fileinfo = getFileInfoFromHeaders(typeof response === 'string' ? response : response.headers);\n        api.fire('meta', {\n          size: state.size || fileinfo.size,\n          filename: fileinfo.name,\n          source: fileinfo.source\n        });\n      });\n    };\n    var api = Object.assign({}, on(), {\n      setSource: function setSource(source) {\n        return state.source = source;\n      },\n      getProgress: getProgress,\n      // file load progress\n      abort: abort,\n      // abort file load\n      load: load // start load\n    });\n\n    return api;\n  };\n  var isGet = function isGet(method) {\n    return /GET|HEAD/.test(method);\n  };\n  var sendRequest = function sendRequest(data, url, options) {\n    var api = {\n      onheaders: function onheaders() {},\n      onprogress: function onprogress() {},\n      onload: function onload() {},\n      ontimeout: function ontimeout() {},\n      onerror: function onerror() {},\n      onabort: function onabort() {},\n      abort: function abort() {\n        aborted = true;\n        xhr.abort();\n      }\n    };\n\n    // timeout identifier, only used when timeout is defined\n    var aborted = false;\n    var headersReceived = false;\n\n    // set default options\n    options = Object.assign({\n      method: 'POST',\n      headers: {},\n      withCredentials: false\n    }, options);\n\n    // encode url\n    url = encodeURI(url);\n\n    // if method is GET, add any received data to url\n\n    if (isGet(options.method) && data) {\n      url = '' + url + encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data));\n    }\n\n    // create request\n    var xhr = new XMLHttpRequest();\n\n    // progress of load\n    var process = isGet(options.method) ? xhr : xhr.upload;\n    process.onprogress = function (e) {\n      // no progress event when aborted ( onprogress is called once after abort() )\n      if (aborted) {\n        return;\n      }\n      api.onprogress(e.lengthComputable, e.loaded, e.total);\n    };\n\n    // tries to get header info to the app as fast as possible\n    xhr.onreadystatechange = function () {\n      // not interesting in these states ('unsent' and 'openend' as they don't give us any additional info)\n      if (xhr.readyState < 2) {\n        return;\n      }\n\n      // no server response\n      if (xhr.readyState === 4 && xhr.status === 0) {\n        return;\n      }\n      if (headersReceived) {\n        return;\n      }\n      headersReceived = true;\n\n      // we've probably received some useful data in response headers\n      api.onheaders(xhr);\n    };\n\n    // load successful\n    xhr.onload = function () {\n      // is classified as valid response\n      if (xhr.status >= 200 && xhr.status < 300) {\n        api.onload(xhr);\n      } else {\n        api.onerror(xhr);\n      }\n    };\n\n    // error during load\n    xhr.onerror = function () {\n      return api.onerror(xhr);\n    };\n\n    // request aborted\n    xhr.onabort = function () {\n      aborted = true;\n      api.onabort();\n    };\n\n    // request timeout\n    xhr.ontimeout = function () {\n      return api.ontimeout(xhr);\n    };\n\n    // open up open up!\n    xhr.open(options.method, url, true);\n\n    // set timeout if defined (do it after open so IE11 plays ball)\n    if (isInt(options.timeout)) {\n      xhr.timeout = options.timeout;\n    }\n\n    // add headers\n    Object.keys(options.headers).forEach(function (key) {\n      var value = unescape(encodeURIComponent(options.headers[key]));\n      xhr.setRequestHeader(key, value);\n    });\n\n    // set type of response\n    if (options.responseType) {\n      xhr.responseType = options.responseType;\n    }\n\n    // set credentials\n    if (options.withCredentials) {\n      xhr.withCredentials = true;\n    }\n\n    // let's send our data\n    xhr.send(data);\n    return api;\n  };\n  var createResponse = function createResponse(type, code, body, headers) {\n    return {\n      type: type,\n      code: code,\n      body: body,\n      headers: headers\n    };\n  };\n  var createTimeoutResponse = function createTimeoutResponse(cb) {\n    return function (xhr) {\n      cb(createResponse('error', 0, 'Timeout', xhr.getAllResponseHeaders()));\n    };\n  };\n  var hasQS = function hasQS(str) {\n    return /\\?/.test(str);\n  };\n  var buildURL = function buildURL() {\n    var url = '';\n    for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {\n      parts[_key] = arguments[_key];\n    }\n    parts.forEach(function (part) {\n      url += hasQS(url) && hasQS(part) ? part.replace(/\\?/, '&') : part;\n    });\n    return url;\n  };\n  var createFetchFunction = function createFetchFunction() {\n    var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var action = arguments.length > 1 ? arguments[1] : undefined;\n    // custom handler (should also handle file, load, error, progress and abort)\n    if (typeof action === 'function') {\n      return action;\n    }\n\n    // no action supplied\n    if (!action || !isString(action.url)) {\n      return null;\n    }\n\n    // set onload hanlder\n    var onload = action.onload || function (res) {\n      return res;\n    };\n    var onerror = action.onerror || function (res) {\n      return null;\n    };\n\n    // internal handler\n    return function (url, load, error, progress, abort, headers) {\n      // do local or remote request based on if the url is external\n      var request = sendRequest(url, buildURL(apiUrl, action.url), Object.assign({}, action, {\n        responseType: 'blob'\n      }));\n      request.onload = function (xhr) {\n        // get headers\n        var headers = xhr.getAllResponseHeaders();\n\n        // get filename\n        var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n        // create response\n        load(createResponse('load', xhr.status, action.method === 'HEAD' ? null : getFileFromBlob(onload(xhr.response), filename), headers));\n      };\n      request.onerror = function (xhr) {\n        error(createResponse('error', xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));\n      };\n      request.onheaders = function (xhr) {\n        headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n      };\n      request.ontimeout = createTimeoutResponse(error);\n      request.onprogress = progress;\n      request.onabort = abort;\n\n      // should return request\n      return request;\n    };\n  };\n  var ChunkStatus = {\n    QUEUED: 0,\n    COMPLETE: 1,\n    PROCESSING: 2,\n    ERROR: 3,\n    WAITING: 4\n  };\n\n  /*\n                                                     function signature:\n                                                       (file, metadata, load, error, progress, abort, transfer, options) => {\n                                                         return {\n                                                         abort:() => {}\n                                                       }\n                                                     }\n                                                     */\n\n  // apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options\n  var processFileChunked = function processFileChunked(apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options) {\n    // all chunks\n    var chunks = [];\n    var chunkTransferId = options.chunkTransferId,\n      chunkServer = options.chunkServer,\n      chunkSize = options.chunkSize,\n      chunkRetryDelays = options.chunkRetryDelays;\n\n    // default state\n    var state = {\n      serverId: chunkTransferId,\n      aborted: false\n    };\n\n    // set onload handlers\n    var ondata = action.ondata || function (fd) {\n      return fd;\n    };\n    var onload = action.onload || function (xhr, method) {\n      return method === 'HEAD' ? xhr.getResponseHeader('Upload-Offset') : xhr.response;\n    };\n    var onerror = action.onerror || function (res) {\n      return null;\n    };\n\n    // create server hook\n    var requestTransferId = function requestTransferId(cb) {\n      var formData = new FormData();\n\n      // add metadata under same name\n      if (isObject(metadata)) formData.append(name, JSON.stringify(metadata));\n      var headers = typeof action.headers === 'function' ? action.headers(file, metadata) : Object.assign({}, action.headers, {\n        'Upload-Length': file.size\n      });\n      var requestParams = Object.assign({}, action, {\n        headers: headers\n      });\n\n      // send request object\n      var request = sendRequest(ondata(formData), buildURL(apiUrl, action.url), requestParams);\n      request.onload = function (xhr) {\n        return cb(onload(xhr, requestParams.method));\n      };\n      request.onerror = function (xhr) {\n        return error(createResponse('error', xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));\n      };\n      request.ontimeout = createTimeoutResponse(error);\n    };\n    var requestTransferOffset = function requestTransferOffset(cb) {\n      var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n      var headers = typeof action.headers === 'function' ? action.headers(state.serverId) : Object.assign({}, action.headers);\n      var requestParams = {\n        headers: headers,\n        method: 'HEAD'\n      };\n      var request = sendRequest(null, requestUrl, requestParams);\n      request.onload = function (xhr) {\n        return cb(onload(xhr, requestParams.method));\n      };\n      request.onerror = function (xhr) {\n        return error(createResponse('error', xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));\n      };\n      request.ontimeout = createTimeoutResponse(error);\n    };\n\n    // create chunks\n    var lastChunkIndex = Math.floor(file.size / chunkSize);\n    for (var i = 0; i <= lastChunkIndex; i++) {\n      var offset = i * chunkSize;\n      var data = file.slice(offset, offset + chunkSize, 'application/offset+octet-stream');\n      chunks[i] = {\n        index: i,\n        size: data.size,\n        offset: offset,\n        data: data,\n        file: file,\n        progress: 0,\n        retries: _toConsumableArray(chunkRetryDelays),\n        status: ChunkStatus.QUEUED,\n        error: null,\n        request: null,\n        timeout: null\n      };\n    }\n    var completeProcessingChunks = function completeProcessingChunks() {\n      return load(state.serverId);\n    };\n    var canProcessChunk = function canProcessChunk(chunk) {\n      return chunk.status === ChunkStatus.QUEUED || chunk.status === ChunkStatus.ERROR;\n    };\n    var processChunk = function processChunk(chunk) {\n      // processing is paused, wait here\n      if (state.aborted) return;\n\n      // get next chunk to process\n      chunk = chunk || chunks.find(canProcessChunk);\n\n      // no more chunks to process\n      if (!chunk) {\n        // all done?\n        if (chunks.every(function (chunk) {\n          return chunk.status === ChunkStatus.COMPLETE;\n        })) {\n          completeProcessingChunks();\n        }\n\n        // no chunk to handle\n        return;\n      }\n\n      // now processing this chunk\n      chunk.status = ChunkStatus.PROCESSING;\n      chunk.progress = null;\n\n      // allow parsing of formdata\n      var ondata = chunkServer.ondata || function (fd) {\n        return fd;\n      };\n      var onerror = chunkServer.onerror || function (res) {\n        return null;\n      };\n\n      // send request object\n      var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n      var headers = typeof chunkServer.headers === 'function' ? chunkServer.headers(chunk) : Object.assign({}, chunkServer.headers, {\n        'Content-Type': 'application/offset+octet-stream',\n        'Upload-Offset': chunk.offset,\n        'Upload-Length': file.size,\n        'Upload-Name': file.name\n      });\n      var request = chunk.request = sendRequest(ondata(chunk.data), requestUrl, Object.assign({}, chunkServer, {\n        headers: headers\n      }));\n      request.onload = function () {\n        // done!\n        chunk.status = ChunkStatus.COMPLETE;\n\n        // remove request reference\n        chunk.request = null;\n\n        // start processing more chunks\n        processChunks();\n      };\n      request.onprogress = function (lengthComputable, loaded, total) {\n        chunk.progress = lengthComputable ? loaded : null;\n        updateTotalProgress();\n      };\n      request.onerror = function (xhr) {\n        chunk.status = ChunkStatus.ERROR;\n        chunk.request = null;\n        chunk.error = onerror(xhr.response) || xhr.statusText;\n        if (!retryProcessChunk(chunk)) {\n          error(createResponse('error', xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));\n        }\n      };\n      request.ontimeout = function (xhr) {\n        chunk.status = ChunkStatus.ERROR;\n        chunk.request = null;\n        if (!retryProcessChunk(chunk)) {\n          createTimeoutResponse(error)(xhr);\n        }\n      };\n      request.onabort = function () {\n        chunk.status = ChunkStatus.QUEUED;\n        chunk.request = null;\n        abort();\n      };\n    };\n    var retryProcessChunk = function retryProcessChunk(chunk) {\n      // no more retries left\n      if (chunk.retries.length === 0) return false;\n\n      // new retry\n      chunk.status = ChunkStatus.WAITING;\n      clearTimeout(chunk.timeout);\n      chunk.timeout = setTimeout(function () {\n        processChunk(chunk);\n      }, chunk.retries.shift());\n\n      // we're going to retry\n      return true;\n    };\n    var updateTotalProgress = function updateTotalProgress() {\n      // calculate total progress fraction\n      var totalBytesTransfered = chunks.reduce(function (p, chunk) {\n        if (p === null || chunk.progress === null) return null;\n        return p + chunk.progress;\n      }, 0);\n\n      // can't compute progress\n      if (totalBytesTransfered === null) return progress(false, 0, 0);\n\n      // calculate progress values\n      var totalSize = chunks.reduce(function (total, chunk) {\n        return total + chunk.size;\n      }, 0);\n\n      // can update progress indicator\n      progress(true, totalBytesTransfered, totalSize);\n    };\n\n    // process new chunks\n    var processChunks = function processChunks() {\n      var totalProcessing = chunks.filter(function (chunk) {\n        return chunk.status === ChunkStatus.PROCESSING;\n      }).length;\n      if (totalProcessing >= 1) return;\n      processChunk();\n    };\n    var abortChunks = function abortChunks() {\n      chunks.forEach(function (chunk) {\n        clearTimeout(chunk.timeout);\n        if (chunk.request) {\n          chunk.request.abort();\n        }\n      });\n    };\n\n    // let's go!\n    if (!state.serverId) {\n      requestTransferId(function (serverId) {\n        // stop here if aborted, might have happened in between request and callback\n        if (state.aborted) return;\n\n        // pass back to item so we can use it if something goes wrong\n        transfer(serverId);\n\n        // store internally\n        state.serverId = serverId;\n        processChunks();\n      });\n    } else {\n      requestTransferOffset(function (offset) {\n        // stop here if aborted, might have happened in between request and callback\n        if (state.aborted) return;\n\n        // mark chunks with lower offset as complete\n        chunks.filter(function (chunk) {\n          return chunk.offset < offset;\n        }).forEach(function (chunk) {\n          chunk.status = ChunkStatus.COMPLETE;\n          chunk.progress = chunk.size;\n        });\n\n        // continue processing\n        processChunks();\n      });\n    }\n    return {\n      abort: function abort() {\n        state.aborted = true;\n        abortChunks();\n      }\n    };\n  };\n\n  /*\n                                                             function signature:\n                                                               (file, metadata, load, error, progress, abort) => {\n                                                                 return {\n                                                                 abort:() => {}\n                                                               }\n                                                             }\n                                                             */\n  var createFileProcessorFunction = function createFileProcessorFunction(apiUrl, action, name, options) {\n    return function (file, metadata, load, error, progress, abort, transfer) {\n      // no file received\n      if (!file) return;\n\n      // if was passed a file, and we can chunk it, exit here\n      var canChunkUpload = options.chunkUploads;\n      var shouldChunkUpload = canChunkUpload && file.size > options.chunkSize;\n      var willChunkUpload = canChunkUpload && (shouldChunkUpload || options.chunkForce);\n      if (file instanceof Blob && willChunkUpload) return processFileChunked(apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options);\n\n      // set handlers\n      var ondata = action.ondata || function (fd) {\n        return fd;\n      };\n      var onload = action.onload || function (res) {\n        return res;\n      };\n      var onerror = action.onerror || function (res) {\n        return null;\n      };\n      var headers = typeof action.headers === 'function' ? action.headers(file, metadata) || {} : Object.assign({}, action.headers);\n      var requestParams = Object.assign({}, action, {\n        headers: headers\n      });\n\n      // create formdata object\n      var formData = new FormData();\n\n      // add metadata under same name\n      if (isObject(metadata)) {\n        formData.append(name, JSON.stringify(metadata));\n      }\n\n      // Turn into an array of objects so no matter what the input, we can handle it the same way\n      (file instanceof Blob ? [{\n        name: null,\n        file: file\n      }] : file).forEach(function (item) {\n        formData.append(name, item.file, item.name === null ? item.file.name : '' + item.name + item.file.name);\n      });\n\n      // send request object\n      var request = sendRequest(ondata(formData), buildURL(apiUrl, action.url), requestParams);\n      request.onload = function (xhr) {\n        load(createResponse('load', xhr.status, onload(xhr.response), xhr.getAllResponseHeaders()));\n      };\n      request.onerror = function (xhr) {\n        error(createResponse('error', xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));\n      };\n      request.ontimeout = createTimeoutResponse(error);\n      request.onprogress = progress;\n      request.onabort = abort;\n\n      // should return request\n      return request;\n    };\n  };\n  var createProcessorFunction = function createProcessorFunction() {\n    var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var action = arguments.length > 1 ? arguments[1] : undefined;\n    var name = arguments.length > 2 ? arguments[2] : undefined;\n    var options = arguments.length > 3 ? arguments[3] : undefined;\n\n    // custom handler (should also handle file, load, error, progress and abort)\n    if (typeof action === 'function') return function () {\n      for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n        params[_key] = arguments[_key];\n      }\n      return action.apply(void 0, [name].concat(params, [options]));\n    };\n\n    // no action supplied\n    if (!action || !isString(action.url)) return null;\n\n    // internal handler\n    return createFileProcessorFunction(apiUrl, action, name, options);\n  };\n\n  /*\n                                                    function signature:\n                                                    (uniqueFileId, load, error) => { }\n                                                    */\n  var createRevertFunction = function createRevertFunction() {\n    var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var action = arguments.length > 1 ? arguments[1] : undefined;\n    // is custom implementation\n    if (typeof action === 'function') {\n      return action;\n    }\n\n    // no action supplied, return stub function, interface will work, but file won't be removed\n    if (!action || !isString(action.url)) {\n      return function (uniqueFileId, load) {\n        return load();\n      };\n    }\n\n    // set onload hanlder\n    var onload = action.onload || function (res) {\n      return res;\n    };\n    var onerror = action.onerror || function (res) {\n      return null;\n    };\n\n    // internal implementation\n    return function (uniqueFileId, load, error) {\n      var request = sendRequest(uniqueFileId, apiUrl + action.url, action // contains method, headers and withCredentials properties\n      );\n\n      request.onload = function (xhr) {\n        load(createResponse('load', xhr.status, onload(xhr.response), xhr.getAllResponseHeaders()));\n      };\n      request.onerror = function (xhr) {\n        error(createResponse('error', xhr.status, onerror(xhr.response) || xhr.statusText, xhr.getAllResponseHeaders()));\n      };\n      request.ontimeout = createTimeoutResponse(error);\n      return request;\n    };\n  };\n  var getRandomNumber = function getRandomNumber() {\n    var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n    return min + Math.random() * (max - min);\n  };\n  var createPerceivedPerformanceUpdater = function createPerceivedPerformanceUpdater(cb) {\n    var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n    var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var tickMin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;\n    var tickMax = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n    var timeout = null;\n    var start = Date.now();\n    var tick = function tick() {\n      var runtime = Date.now() - start;\n      var delay = getRandomNumber(tickMin, tickMax);\n      if (runtime + delay > duration) {\n        delay = runtime + delay - duration;\n      }\n      var progress = runtime / duration;\n      if (progress >= 1 || document.hidden) {\n        cb(1);\n        return;\n      }\n      cb(progress);\n      timeout = setTimeout(tick, delay);\n    };\n    if (duration > 0) tick();\n    return {\n      clear: function clear() {\n        clearTimeout(timeout);\n      }\n    };\n  };\n  var createFileProcessor = function createFileProcessor(processFn, options) {\n    var state = {\n      complete: false,\n      perceivedProgress: 0,\n      perceivedPerformanceUpdater: null,\n      progress: null,\n      timestamp: null,\n      perceivedDuration: 0,\n      duration: 0,\n      request: null,\n      response: null\n    };\n    var allowMinimumUploadDuration = options.allowMinimumUploadDuration;\n    var process = function process(file, metadata) {\n      var progressFn = function progressFn() {\n        // we've not yet started the real download, stop here\n        // the request might not go through, for instance, there might be some server trouble\n        // if state.progress is null, the server does not allow computing progress and we show the spinner instead\n        if (state.duration === 0 || state.progress === null) return;\n\n        // as we're now processing, fire the progress event\n        api.fire('progress', api.getProgress());\n      };\n      var completeFn = function completeFn() {\n        state.complete = true;\n        api.fire('load-perceived', state.response.body);\n      };\n\n      // let's start processing\n      api.fire('start');\n\n      // set request start\n      state.timestamp = Date.now();\n\n      // create perceived performance progress indicator\n      state.perceivedPerformanceUpdater = createPerceivedPerformanceUpdater(function (progress) {\n        state.perceivedProgress = progress;\n        state.perceivedDuration = Date.now() - state.timestamp;\n        progressFn();\n\n        // if fake progress is done, and a response has been received,\n        // and we've not yet called the complete method\n        if (state.response && state.perceivedProgress === 1 && !state.complete) {\n          // we done!\n          completeFn();\n        }\n      },\n      // random delay as in a list of files you start noticing\n      // files uploading at the exact same speed\n      allowMinimumUploadDuration ? getRandomNumber(750, 1500) : 0);\n\n      // remember request so we can abort it later\n      state.request = processFn(\n      // the file to process\n      file,\n      // the metadata to send along\n      metadata,\n      // callbacks (load, error, progress, abort, transfer)\n      // load expects the body to be a server id if\n      // you want to make use of revert\n      function (response) {\n        // we put the response in state so we can access\n        // it outside of this method\n        state.response = isObject(response) ? response : {\n          type: 'load',\n          code: 200,\n          body: '' + response,\n          headers: {}\n        };\n\n        // update duration\n        state.duration = Date.now() - state.timestamp;\n\n        // force progress to 1 as we're now done\n        state.progress = 1;\n\n        // actual load is done let's share results\n        api.fire('load', state.response.body);\n\n        // we are really done\n        // if perceived progress is 1 ( wait for perceived progress to complete )\n        // or if server does not support progress ( null )\n        if (!allowMinimumUploadDuration || allowMinimumUploadDuration && state.perceivedProgress === 1) {\n          completeFn();\n        }\n      },\n      // error is expected to be an object with type, code, body\n      function (error) {\n        // cancel updater\n        state.perceivedPerformanceUpdater.clear();\n\n        // update others about this error\n        api.fire('error', isObject(error) ? error : {\n          type: 'error',\n          code: 0,\n          body: '' + error\n        });\n      },\n      // actual processing progress\n      function (computable, current, total) {\n        // update actual duration\n        state.duration = Date.now() - state.timestamp;\n\n        // update actual progress\n        state.progress = computable ? current / total : null;\n        progressFn();\n      },\n      // abort does not expect a value\n      function () {\n        // stop updater\n        state.perceivedPerformanceUpdater.clear();\n\n        // fire the abort event so we can switch visuals\n        api.fire('abort', state.response ? state.response.body : null);\n      },\n      // register the id for this transfer\n      function (transferId) {\n        api.fire('transfer', transferId);\n      });\n    };\n    var abort = function abort() {\n      // no request running, can't abort\n      if (!state.request) return;\n\n      // stop updater\n      state.perceivedPerformanceUpdater.clear();\n\n      // abort actual request\n      if (state.request.abort) state.request.abort();\n\n      // if has response object, we've completed the request\n      state.complete = true;\n    };\n    var reset = function reset() {\n      abort();\n      state.complete = false;\n      state.perceivedProgress = 0;\n      state.progress = 0;\n      state.timestamp = null;\n      state.perceivedDuration = 0;\n      state.duration = 0;\n      state.request = null;\n      state.response = null;\n    };\n    var getProgress = allowMinimumUploadDuration ? function () {\n      return state.progress ? Math.min(state.progress, state.perceivedProgress) : null;\n    } : function () {\n      return state.progress || null;\n    };\n    var getDuration = allowMinimumUploadDuration ? function () {\n      return Math.min(state.duration, state.perceivedDuration);\n    } : function () {\n      return state.duration;\n    };\n    var api = Object.assign({}, on(), {\n      process: process,\n      // start processing file\n      abort: abort,\n      // abort active process request\n      getProgress: getProgress,\n      getDuration: getDuration,\n      reset: reset\n    });\n    return api;\n  };\n  var getFilenameWithoutExtension = function getFilenameWithoutExtension(name) {\n    return name.substring(0, name.lastIndexOf('.')) || name;\n  };\n  var createFileStub = function createFileStub(source) {\n    var data = [source.name, source.size, source.type];\n\n    // is blob or base64, then we need to set the name\n    if (source instanceof Blob || isBase64DataURI(source)) {\n      data[0] = source.name || getDateString();\n    } else if (isBase64DataURI(source)) {\n      // if is base64 data uri we need to determine the average size and type\n      data[1] = source.length;\n      data[2] = getMimeTypeFromBase64DataURI(source);\n    } else if (isString(source)) {\n      // url\n      data[0] = getFilenameFromURL(source);\n      data[1] = 0;\n      data[2] = 'application/octet-stream';\n    }\n    return {\n      name: data[0],\n      size: data[1],\n      type: data[2]\n    };\n  };\n  var isFile = function isFile(value) {\n    return !!(value instanceof File || value instanceof Blob && value.name);\n  };\n  var deepCloneObject = function deepCloneObject(src) {\n    if (!isObject(src)) return src;\n    var target = isArray(src) ? [] : {};\n    for (var key in src) {\n      if (!src.hasOwnProperty(key)) continue;\n      var v = src[key];\n      target[key] = v && isObject(v) ? deepCloneObject(v) : v;\n    }\n    return target;\n  };\n  var createItem = function createItem() {\n    var origin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var serverFileReference = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    // unique id for this item, is used to identify the item across views\n    var id = getUniqueId();\n\n    /**\n     * Internal item state\n     */\n    var state = {\n      // is archived\n      archived: false,\n      // if is frozen, no longer fires events\n      frozen: false,\n      // removed from view\n      released: false,\n      // original source\n      source: null,\n      // file model reference\n      file: file,\n      // id of file on server\n      serverFileReference: serverFileReference,\n      // id of file transfer on server\n      transferId: null,\n      // is aborted\n      processingAborted: false,\n      // current item status\n      status: serverFileReference ? ItemStatus.PROCESSING_COMPLETE : ItemStatus.INIT,\n      // active processes\n      activeLoader: null,\n      activeProcessor: null\n    };\n\n    // callback used when abort processing is called to link back to the resolve method\n    var abortProcessingRequestComplete = null;\n\n    /**\n     * Externally added item metadata\n     */\n    var metadata = {};\n\n    // item data\n    var setStatus = function setStatus(status) {\n      return state.status = status;\n    };\n\n    // fire event unless the item has been archived\n    var fire = function fire(event) {\n      if (state.released || state.frozen) return;\n      for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        params[_key - 1] = arguments[_key];\n      }\n      api.fire.apply(api, [event].concat(params));\n    };\n\n    // file data\n    var getFileExtension = function getFileExtension() {\n      return getExtensionFromFilename(state.file.name);\n    };\n    var getFileType = function getFileType() {\n      return state.file.type;\n    };\n    var getFileSize = function getFileSize() {\n      return state.file.size;\n    };\n    var getFile = function getFile() {\n      return state.file;\n    };\n\n    //\n    // logic to load a file\n    //\n    var load = function load(source, loader, onload) {\n      // remember the original item source\n      state.source = source;\n\n      // source is known\n      api.fireSync('init');\n\n      // file stub is already there\n      if (state.file) {\n        api.fireSync('load-skip');\n        return;\n      }\n\n      // set a stub file object while loading the actual data\n      state.file = createFileStub(source);\n\n      // starts loading\n      loader.on('init', function () {\n        fire('load-init');\n      });\n\n      // we'eve received a size indication, let's update the stub\n      loader.on('meta', function (meta) {\n        // set size of file stub\n        state.file.size = meta.size;\n\n        // set name of file stub\n        state.file.filename = meta.filename;\n\n        // if has received source, we done\n        if (meta.source) {\n          origin = FileOrigin.LIMBO;\n          state.serverFileReference = meta.source;\n          state.status = ItemStatus.PROCESSING_COMPLETE;\n        }\n\n        // size has been updated\n        fire('load-meta');\n      });\n\n      // the file is now loading we need to update the progress indicators\n      loader.on('progress', function (progress) {\n        setStatus(ItemStatus.LOADING);\n        fire('load-progress', progress);\n      });\n\n      // an error was thrown while loading the file, we need to switch to error state\n      loader.on('error', function (error) {\n        setStatus(ItemStatus.LOAD_ERROR);\n        fire('load-request-error', error);\n      });\n\n      // user or another process aborted the file load (cannot retry)\n      loader.on('abort', function () {\n        setStatus(ItemStatus.INIT);\n        fire('load-abort');\n      });\n\n      // done loading\n      loader.on('load', function (file) {\n        // as we've now loaded the file the loader is no longer required\n        state.activeLoader = null;\n\n        // called when file has loaded succesfully\n        var success = function success(result) {\n          // set (possibly) transformed file\n          state.file = isFile(result) ? result : state.file;\n\n          // file received\n          if (origin === FileOrigin.LIMBO && state.serverFileReference) {\n            setStatus(ItemStatus.PROCESSING_COMPLETE);\n          } else {\n            setStatus(ItemStatus.IDLE);\n          }\n          fire('load');\n        };\n        var error = function error(result) {\n          // set original file\n          state.file = file;\n          fire('load-meta');\n          setStatus(ItemStatus.LOAD_ERROR);\n          fire('load-file-error', result);\n        };\n\n        // if we already have a server file reference, we don't need to call the onload method\n        if (state.serverFileReference) {\n          success(file);\n          return;\n        }\n\n        // no server id, let's give this file the full treatment\n        onload(file, success, error);\n      });\n\n      // set loader source data\n      loader.setSource(source);\n\n      // set as active loader\n      state.activeLoader = loader;\n\n      // load the source data\n      loader.load();\n    };\n    var retryLoad = function retryLoad() {\n      if (!state.activeLoader) {\n        return;\n      }\n      state.activeLoader.load();\n    };\n    var abortLoad = function abortLoad() {\n      if (state.activeLoader) {\n        state.activeLoader.abort();\n        return;\n      }\n      setStatus(ItemStatus.INIT);\n      fire('load-abort');\n    };\n\n    //\n    // logic to process a file\n    //\n    var process = function process(processor, onprocess) {\n      // processing was aborted\n      if (state.processingAborted) {\n        state.processingAborted = false;\n        return;\n      }\n\n      // now processing\n      setStatus(ItemStatus.PROCESSING);\n\n      // reset abort callback\n      abortProcessingRequestComplete = null;\n\n      // if no file loaded we'll wait for the load event\n      if (!(state.file instanceof Blob)) {\n        api.on('load', function () {\n          process(processor, onprocess);\n        });\n        return;\n      }\n\n      // setup processor\n      processor.on('load', function (serverFileReference) {\n        // need this id to be able to revert the upload\n        state.transferId = null;\n        state.serverFileReference = serverFileReference;\n      });\n\n      // register transfer id\n      processor.on('transfer', function (transferId) {\n        // need this id to be able to revert the upload\n        state.transferId = transferId;\n      });\n      processor.on('load-perceived', function (serverFileReference) {\n        // no longer required\n        state.activeProcessor = null;\n\n        // need this id to be able to rever the upload\n        state.transferId = null;\n        state.serverFileReference = serverFileReference;\n        setStatus(ItemStatus.PROCESSING_COMPLETE);\n        fire('process-complete', serverFileReference);\n      });\n      processor.on('start', function () {\n        fire('process-start');\n      });\n      processor.on('error', function (error) {\n        state.activeProcessor = null;\n        setStatus(ItemStatus.PROCESSING_ERROR);\n        fire('process-error', error);\n      });\n      processor.on('abort', function (serverFileReference) {\n        state.activeProcessor = null;\n\n        // if file was uploaded but processing was cancelled during perceived processor time store file reference\n        state.serverFileReference = serverFileReference;\n        setStatus(ItemStatus.IDLE);\n        fire('process-abort');\n\n        // has timeout so doesn't interfere with remove action\n        if (abortProcessingRequestComplete) {\n          abortProcessingRequestComplete();\n        }\n      });\n      processor.on('progress', function (progress) {\n        fire('process-progress', progress);\n      });\n\n      // when successfully transformed\n      var success = function success(file) {\n        // if was archived in the mean time, don't process\n        if (state.archived) return;\n\n        // process file!\n        processor.process(file, Object.assign({}, metadata));\n      };\n\n      // something went wrong during transform phase\n      var error = console.error;\n\n      // start processing the file\n      onprocess(state.file, success, error);\n\n      // set as active processor\n      state.activeProcessor = processor;\n    };\n    var requestProcessing = function requestProcessing() {\n      state.processingAborted = false;\n      setStatus(ItemStatus.PROCESSING_QUEUED);\n    };\n    var abortProcessing = function abortProcessing() {\n      return new Promise(function (resolve) {\n        if (!state.activeProcessor) {\n          state.processingAborted = true;\n          setStatus(ItemStatus.IDLE);\n          fire('process-abort');\n          resolve();\n          return;\n        }\n        abortProcessingRequestComplete = function abortProcessingRequestComplete() {\n          resolve();\n        };\n        state.activeProcessor.abort();\n      });\n    };\n\n    //\n    // logic to revert a processed file\n    //\n    var revert = function revert(revertFileUpload, forceRevert) {\n      return new Promise(function (resolve, reject) {\n        // a completed upload will have a serverFileReference, a failed chunked upload where\n        // getting a serverId succeeded but >=0 chunks have been uploaded will have transferId set\n        var serverTransferId = state.serverFileReference !== null ? state.serverFileReference : state.transferId;\n\n        // cannot revert without a server id for this process\n        if (serverTransferId === null) {\n          resolve();\n          return;\n        }\n\n        // revert the upload (fire and forget)\n        revertFileUpload(serverTransferId, function () {\n          // reset file server id and transfer id as now it's not available on the server\n          state.serverFileReference = null;\n          state.transferId = null;\n          resolve();\n        }, function (error) {\n          // don't set error state when reverting is optional, it will always resolve\n          if (!forceRevert) {\n            resolve();\n            return;\n          }\n\n          // oh no errors\n          setStatus(ItemStatus.PROCESSING_REVERT_ERROR);\n          fire('process-revert-error');\n          reject(error);\n        });\n\n        // fire event\n        setStatus(ItemStatus.IDLE);\n        fire('process-revert');\n      });\n    };\n\n    // exposed methods\n    var _setMetadata = function setMetadata(key, value, silent) {\n      var keys = key.split('.');\n      var root = keys[0];\n      var last = keys.pop();\n      var data = metadata;\n      keys.forEach(function (key) {\n        return data = data[key];\n      });\n\n      // compare old value against new value, if they're the same, we're not updating\n      if (JSON.stringify(data[last]) === JSON.stringify(value)) return;\n\n      // update value\n      data[last] = value;\n\n      // fire update\n      fire('metadata-update', {\n        key: root,\n        value: metadata[root],\n        silent: silent\n      });\n    };\n    var getMetadata = function getMetadata(key) {\n      return deepCloneObject(key ? metadata[key] : metadata);\n    };\n    var api = Object.assign({\n      id: {\n        get: function get() {\n          return id;\n        }\n      },\n      origin: {\n        get: function get() {\n          return origin;\n        },\n        set: function set(value) {\n          return origin = value;\n        }\n      },\n      serverId: {\n        get: function get() {\n          return state.serverFileReference;\n        }\n      },\n      transferId: {\n        get: function get() {\n          return state.transferId;\n        }\n      },\n      status: {\n        get: function get() {\n          return state.status;\n        }\n      },\n      filename: {\n        get: function get() {\n          return state.file.name;\n        }\n      },\n      filenameWithoutExtension: {\n        get: function get() {\n          return getFilenameWithoutExtension(state.file.name);\n        }\n      },\n      fileExtension: {\n        get: getFileExtension\n      },\n      fileType: {\n        get: getFileType\n      },\n      fileSize: {\n        get: getFileSize\n      },\n      file: {\n        get: getFile\n      },\n      relativePath: {\n        get: function get() {\n          return state.file._relativePath;\n        }\n      },\n      source: {\n        get: function get() {\n          return state.source;\n        }\n      },\n      getMetadata: getMetadata,\n      setMetadata: function setMetadata(key, value, silent) {\n        if (isObject(key)) {\n          var data = key;\n          Object.keys(data).forEach(function (key) {\n            _setMetadata(key, data[key], value);\n          });\n          return key;\n        }\n        _setMetadata(key, value, silent);\n        return value;\n      },\n      extend: function extend(name, handler) {\n        return itemAPI[name] = handler;\n      },\n      abortLoad: abortLoad,\n      retryLoad: retryLoad,\n      requestProcessing: requestProcessing,\n      abortProcessing: abortProcessing,\n      load: load,\n      process: process,\n      revert: revert\n    }, on(), {\n      freeze: function freeze() {\n        return state.frozen = true;\n      },\n      release: function release() {\n        return state.released = true;\n      },\n      released: {\n        get: function get() {\n          return state.released;\n        }\n      },\n      archive: function archive() {\n        return state.archived = true;\n      },\n      archived: {\n        get: function get() {\n          return state.archived;\n        }\n      }\n    });\n\n    // create it here instead of returning it instantly so we can extend it later\n    var itemAPI = createObject(api);\n    return itemAPI;\n  };\n  var getItemIndexByQuery = function getItemIndexByQuery(items, query) {\n    // just return first index\n    if (isEmpty(query)) {\n      return 0;\n    }\n\n    // invalid queries\n    if (!isString(query)) {\n      return -1;\n    }\n\n    // return item by id (or -1 if not found)\n    return items.findIndex(function (item) {\n      return item.id === query;\n    });\n  };\n  var getItemById = function getItemById(items, itemId) {\n    var index = getItemIndexByQuery(items, itemId);\n    if (index < 0) {\n      return;\n    }\n    return items[index] || null;\n  };\n  var fetchBlob = function fetchBlob(url, load, error, progress, abort, headers) {\n    var request = sendRequest(null, url, {\n      method: 'GET',\n      responseType: 'blob'\n    });\n    request.onload = function (xhr) {\n      // get headers\n      var headers = xhr.getAllResponseHeaders();\n\n      // get filename\n      var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n      // create response\n      load(createResponse('load', xhr.status, getFileFromBlob(xhr.response, filename), headers));\n    };\n    request.onerror = function (xhr) {\n      error(createResponse('error', xhr.status, xhr.statusText, xhr.getAllResponseHeaders()));\n    };\n    request.onheaders = function (xhr) {\n      headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n    };\n    request.ontimeout = createTimeoutResponse(error);\n    request.onprogress = progress;\n    request.onabort = abort;\n\n    // should return request\n    return request;\n  };\n  var getDomainFromURL = function getDomainFromURL(url) {\n    if (url.indexOf('//') === 0) {\n      url = location.protocol + url;\n    }\n    return url.toLowerCase().replace('blob:', '').replace(/([a-z])?:\\/\\//, '$1').split('/')[0];\n  };\n  var isExternalURL = function isExternalURL(url) {\n    return (url.indexOf(':') > -1 || url.indexOf('//') > -1) && getDomainFromURL(location.href) !== getDomainFromURL(url);\n  };\n  var dynamicLabel = function dynamicLabel(label) {\n    return function () {\n      return isFunction(label) ? label.apply(void 0, arguments) : label;\n    };\n  };\n  var isMockItem = function isMockItem(item) {\n    return !isFile(item.file);\n  };\n  var listUpdated = function listUpdated(dispatch, state) {\n    clearTimeout(state.listUpdateTimeout);\n    state.listUpdateTimeout = setTimeout(function () {\n      dispatch('DID_UPDATE_ITEMS', {\n        items: getActiveItems(state.items)\n      });\n    }, 0);\n  };\n  var optionalPromise = function optionalPromise(fn) {\n    for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      params[_key - 1] = arguments[_key];\n    }\n    return new Promise(function (resolve) {\n      if (!fn) {\n        return resolve(true);\n      }\n      var result = fn.apply(void 0, params);\n      if (result == null) {\n        return resolve(true);\n      }\n      if (typeof result === 'boolean') {\n        return resolve(result);\n      }\n      if (typeof result.then === 'function') {\n        result.then(resolve);\n      }\n    });\n  };\n  var sortItems = function sortItems(state, compare) {\n    state.items.sort(function (a, b) {\n      return compare(createItemAPI(a), createItemAPI(b));\n    });\n  };\n\n  // returns item based on state\n  var getItemByQueryFromState = function getItemByQueryFromState(state, itemHandler) {\n    return function () {\n      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var query = _ref.query,\n        _ref$success = _ref.success,\n        success = _ref$success === void 0 ? function () {} : _ref$success,\n        _ref$failure = _ref.failure,\n        failure = _ref$failure === void 0 ? function () {} : _ref$failure,\n        options = _objectWithoutProperties(_ref, ['query', 'success', 'failure']);\n      var item = getItemByQuery(state.items, query);\n      if (!item) {\n        failure({\n          error: createResponse('error', 0, 'Item not found'),\n          file: null\n        });\n        return;\n      }\n      itemHandler(item, success, failure, options || {});\n    };\n  };\n  var actions = function actions(dispatch, query, state) {\n    return {\n      /**\n       * Aborts all ongoing processes\n       */\n      ABORT_ALL: function ABORT_ALL() {\n        getActiveItems(state.items).forEach(function (item) {\n          item.freeze();\n          item.abortLoad();\n          item.abortProcessing();\n        });\n      },\n      /**\n       * Sets initial files\n       */\n      DID_SET_FILES: function DID_SET_FILES(_ref2) {\n        var _ref2$value = _ref2.value,\n          value = _ref2$value === void 0 ? [] : _ref2$value;\n        // map values to file objects\n        var files = value.map(function (file) {\n          return {\n            source: file.source ? file.source : file,\n            options: file.options\n          };\n        });\n\n        // loop over files, if file is in list, leave it be, if not, remove\n        // test if items should be moved\n        var activeItems = getActiveItems(state.items);\n        activeItems.forEach(function (item) {\n          // if item not is in new value, remove\n          if (!files.find(function (file) {\n            return file.source === item.source || file.source === item.file;\n          })) {\n            dispatch('REMOVE_ITEM', {\n              query: item,\n              remove: false\n            });\n          }\n        });\n\n        // add new files\n        activeItems = getActiveItems(state.items);\n        files.forEach(function (file, index) {\n          // if file is already in list\n          if (activeItems.find(function (item) {\n            return item.source === file.source || item.file === file.source;\n          })) return;\n\n          // not in list, add\n          dispatch('ADD_ITEM', Object.assign({}, file, {\n            interactionMethod: InteractionMethod.NONE,\n            index: index\n          }));\n        });\n      },\n      DID_UPDATE_ITEM_METADATA: function DID_UPDATE_ITEM_METADATA(_ref3) {\n        var id = _ref3.id,\n          action = _ref3.action,\n          change = _ref3.change;\n        // don't do anything\n        if (change.silent) return;\n\n        // if is called multiple times in close succession we combined all calls together to save resources\n        clearTimeout(state.itemUpdateTimeout);\n        state.itemUpdateTimeout = setTimeout(function () {\n          var item = getItemById(state.items, id);\n\n          // only revert and attempt to upload when we're uploading to a server\n          if (!query('IS_ASYNC')) {\n            // should we update the output data\n            applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n              item: item,\n              query: query,\n              action: action,\n              change: change\n            }).then(function (shouldPrepareOutput) {\n              // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n              var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n              if (beforePrepareFile) shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n              if (!shouldPrepareOutput) return;\n              dispatch('REQUEST_PREPARE_OUTPUT', {\n                query: id,\n                item: item,\n                success: function success(file) {\n                  dispatch('DID_PREPARE_OUTPUT', {\n                    id: id,\n                    file: file\n                  });\n                }\n              }, true);\n            });\n            return;\n          }\n\n          // if is local item we need to enable upload button so change can be propagated to server\n          if (item.origin === FileOrigin.LOCAL) {\n            dispatch('DID_LOAD_ITEM', {\n              id: item.id,\n              error: null,\n              serverFileReference: item.source\n            });\n          }\n\n          // for async scenarios\n          var upload = function upload() {\n            // we push this forward a bit so the interface is updated correctly\n            setTimeout(function () {\n              dispatch('REQUEST_ITEM_PROCESSING', {\n                query: id\n              });\n            }, 32);\n          };\n          var revert = function revert(doUpload) {\n            item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), query('GET_FORCE_REVERT')).then(doUpload ? upload : function () {}).catch(function () {});\n          };\n          var abort = function abort(doUpload) {\n            item.abortProcessing().then(doUpload ? upload : function () {});\n          };\n\n          // if we should re-upload the file immediately\n          if (item.status === ItemStatus.PROCESSING_COMPLETE) {\n            return revert(state.options.instantUpload);\n          }\n\n          // if currently uploading, cancel upload\n          if (item.status === ItemStatus.PROCESSING) {\n            return abort(state.options.instantUpload);\n          }\n          if (state.options.instantUpload) {\n            upload();\n          }\n        }, 0);\n      },\n      MOVE_ITEM: function MOVE_ITEM(_ref4) {\n        var query = _ref4.query,\n          index = _ref4.index;\n        var item = getItemByQuery(state.items, query);\n        if (!item) return;\n        var currentIndex = state.items.indexOf(item);\n        index = limit(index, 0, state.items.length - 1);\n        if (currentIndex === index) return;\n        state.items.splice(index, 0, state.items.splice(currentIndex, 1)[0]);\n      },\n      SORT: function SORT(_ref5) {\n        var compare = _ref5.compare;\n        sortItems(state, compare);\n        dispatch('DID_SORT_ITEMS', {\n          items: query('GET_ACTIVE_ITEMS')\n        });\n      },\n      ADD_ITEMS: function ADD_ITEMS(_ref6) {\n        var items = _ref6.items,\n          index = _ref6.index,\n          interactionMethod = _ref6.interactionMethod,\n          _ref6$success = _ref6.success,\n          success = _ref6$success === void 0 ? function () {} : _ref6$success,\n          _ref6$failure = _ref6.failure,\n          failure = _ref6$failure === void 0 ? function () {} : _ref6$failure;\n        var currentIndex = index;\n        if (index === -1 || typeof index === 'undefined') {\n          var insertLocation = query('GET_ITEM_INSERT_LOCATION');\n          var totalItems = query('GET_TOTAL_ITEMS');\n          currentIndex = insertLocation === 'before' ? 0 : totalItems;\n        }\n        var ignoredFiles = query('GET_IGNORED_FILES');\n        var isValidFile = function isValidFile(source) {\n          return isFile(source) ? !ignoredFiles.includes(source.name.toLowerCase()) : !isEmpty(source);\n        };\n        var validItems = items.filter(isValidFile);\n        var promises = validItems.map(function (source) {\n          return new Promise(function (resolve, reject) {\n            dispatch('ADD_ITEM', {\n              interactionMethod: interactionMethod,\n              source: source.source || source,\n              success: resolve,\n              failure: reject,\n              index: currentIndex++,\n              options: source.options || {}\n            });\n          });\n        });\n        Promise.all(promises).then(success).catch(failure);\n      },\n      /**\n       * @param source\n       * @param index\n       * @param interactionMethod\n       */\n      ADD_ITEM: function ADD_ITEM(_ref7) {\n        var source = _ref7.source,\n          _ref7$index = _ref7.index,\n          index = _ref7$index === void 0 ? -1 : _ref7$index,\n          interactionMethod = _ref7.interactionMethod,\n          _ref7$success = _ref7.success,\n          success = _ref7$success === void 0 ? function () {} : _ref7$success,\n          _ref7$failure = _ref7.failure,\n          failure = _ref7$failure === void 0 ? function () {} : _ref7$failure,\n          _ref7$options = _ref7.options,\n          options = _ref7$options === void 0 ? {} : _ref7$options;\n        // if no source supplied\n        if (isEmpty(source)) {\n          failure({\n            error: createResponse('error', 0, 'No source'),\n            file: null\n          });\n          return;\n        }\n\n        // filter out invalid file items, used to filter dropped directory contents\n        if (isFile(source) && state.options.ignoredFiles.includes(source.name.toLowerCase())) {\n          // fail silently\n          return;\n        }\n\n        // test if there's still room in the list of files\n        if (!hasRoomForItem(state)) {\n          // if multiple allowed, we can't replace\n          // or if only a single item is allowed but we're not allowed to replace it we exit\n          if (state.options.allowMultiple || !state.options.allowMultiple && !state.options.allowReplace) {\n            var error = createResponse('warning', 0, 'Max files');\n            dispatch('DID_THROW_MAX_FILES', {\n              source: source,\n              error: error\n            });\n            failure({\n              error: error,\n              file: null\n            });\n            return;\n          }\n\n          // let's replace the item\n          // id of first item we're about to remove\n          var _item = getActiveItems(state.items)[0];\n\n          // if has been processed remove it from the server as well\n          if (_item.status === ItemStatus.PROCESSING_COMPLETE || _item.status === ItemStatus.PROCESSING_REVERT_ERROR) {\n            var forceRevert = query('GET_FORCE_REVERT');\n            _item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), forceRevert).then(function () {\n              if (!forceRevert) return;\n\n              // try to add now\n              dispatch('ADD_ITEM', {\n                source: source,\n                index: index,\n                interactionMethod: interactionMethod,\n                success: success,\n                failure: failure,\n                options: options\n              });\n            }).catch(function () {}); // no need to handle this catch state for now\n\n            if (forceRevert) return;\n          }\n\n          // remove first item as it will be replaced by this item\n          dispatch('REMOVE_ITEM', {\n            query: _item.id\n          });\n        }\n\n        // where did the file originate\n        var origin = options.type === 'local' ? FileOrigin.LOCAL : options.type === 'limbo' ? FileOrigin.LIMBO : FileOrigin.INPUT;\n\n        // create a new blank item\n        var item = createItem(\n        // where did this file come from\n        origin,\n        // an input file never has a server file reference\n        origin === FileOrigin.INPUT ? null : source,\n        // file mock data, if defined\n        options.file);\n\n        // set initial meta data\n        Object.keys(options.metadata || {}).forEach(function (key) {\n          item.setMetadata(key, options.metadata[key]);\n        });\n\n        // created the item, let plugins add methods\n        applyFilters('DID_CREATE_ITEM', item, {\n          query: query,\n          dispatch: dispatch\n        });\n\n        // where to insert new items\n        var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n\n        // adjust index if is not allowed to pick location\n        if (!state.options.itemInsertLocationFreedom) {\n          index = itemInsertLocation === 'before' ? -1 : state.items.length;\n        }\n\n        // add item to list\n        insertItem(state.items, item, index);\n\n        // sort items in list\n        if (isFunction(itemInsertLocation) && source) {\n          sortItems(state, itemInsertLocation);\n        }\n\n        // get a quick reference to the item id\n        var id = item.id;\n\n        // observe item events\n        item.on('init', function () {\n          dispatch('DID_INIT_ITEM', {\n            id: id\n          });\n        });\n        item.on('load-init', function () {\n          dispatch('DID_START_ITEM_LOAD', {\n            id: id\n          });\n        });\n        item.on('load-meta', function () {\n          dispatch('DID_UPDATE_ITEM_META', {\n            id: id\n          });\n        });\n        item.on('load-progress', function (progress) {\n          dispatch('DID_UPDATE_ITEM_LOAD_PROGRESS', {\n            id: id,\n            progress: progress\n          });\n        });\n        item.on('load-request-error', function (error) {\n          var mainStatus = dynamicLabel(state.options.labelFileLoadError)(error);\n\n          // is client error, no way to recover\n          if (error.code >= 400 && error.code < 500) {\n            dispatch('DID_THROW_ITEM_INVALID', {\n              id: id,\n              error: error,\n              status: {\n                main: mainStatus,\n                sub: error.code + ' (' + error.body + ')'\n              }\n            });\n\n            // reject the file so can be dealt with through API\n            failure({\n              error: error,\n              file: createItemAPI(item)\n            });\n            return;\n          }\n\n          // is possible server error, so might be possible to retry\n          dispatch('DID_THROW_ITEM_LOAD_ERROR', {\n            id: id,\n            error: error,\n            status: {\n              main: mainStatus,\n              sub: state.options.labelTapToRetry\n            }\n          });\n        });\n        item.on('load-file-error', function (error) {\n          dispatch('DID_THROW_ITEM_INVALID', {\n            id: id,\n            error: error.status,\n            status: error.status\n          });\n          failure({\n            error: error.status,\n            file: createItemAPI(item)\n          });\n        });\n        item.on('load-abort', function () {\n          dispatch('REMOVE_ITEM', {\n            query: id\n          });\n        });\n        item.on('load-skip', function () {\n          dispatch('COMPLETE_LOAD_ITEM', {\n            query: id,\n            item: item,\n            data: {\n              source: source,\n              success: success\n            }\n          });\n        });\n        item.on('load', function () {\n          var handleAdd = function handleAdd(shouldAdd) {\n            // no should not add this file\n            if (!shouldAdd) {\n              dispatch('REMOVE_ITEM', {\n                query: id\n              });\n              return;\n            }\n\n            // now interested in metadata updates\n            item.on('metadata-update', function (change) {\n              dispatch('DID_UPDATE_ITEM_METADATA', {\n                id: id,\n                change: change\n              });\n            });\n\n            // let plugins decide if the output data should be prepared at this point\n            // means we'll do this and wait for idle state\n            applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n              item: item,\n              query: query\n            }).then(function (shouldPrepareOutput) {\n              // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n              var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n              if (beforePrepareFile) shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n              var loadComplete = function loadComplete() {\n                dispatch('COMPLETE_LOAD_ITEM', {\n                  query: id,\n                  item: item,\n                  data: {\n                    source: source,\n                    success: success\n                  }\n                });\n                listUpdated(dispatch, state);\n              };\n\n              // exit\n              if (shouldPrepareOutput) {\n                // wait for idle state and then run PREPARE_OUTPUT\n                dispatch('REQUEST_PREPARE_OUTPUT', {\n                  query: id,\n                  item: item,\n                  success: function success(file) {\n                    dispatch('DID_PREPARE_OUTPUT', {\n                      id: id,\n                      file: file\n                    });\n                    loadComplete();\n                  }\n                }, true);\n                return;\n              }\n              loadComplete();\n            });\n          };\n\n          // item loaded, allow plugins to\n          // - read data (quickly)\n          // - add metadata\n          applyFilterChain('DID_LOAD_ITEM', item, {\n            query: query,\n            dispatch: dispatch\n          }).then(function () {\n            optionalPromise(query('GET_BEFORE_ADD_FILE'), createItemAPI(item)).then(handleAdd);\n          }).catch(function (e) {\n            if (!e || !e.error || !e.status) return handleAdd(false);\n            dispatch('DID_THROW_ITEM_INVALID', {\n              id: id,\n              error: e.error,\n              status: e.status\n            });\n          });\n        });\n        item.on('process-start', function () {\n          dispatch('DID_START_ITEM_PROCESSING', {\n            id: id\n          });\n        });\n        item.on('process-progress', function (progress) {\n          dispatch('DID_UPDATE_ITEM_PROCESS_PROGRESS', {\n            id: id,\n            progress: progress\n          });\n        });\n        item.on('process-error', function (error) {\n          dispatch('DID_THROW_ITEM_PROCESSING_ERROR', {\n            id: id,\n            error: error,\n            status: {\n              main: dynamicLabel(state.options.labelFileProcessingError)(error),\n              sub: state.options.labelTapToRetry\n            }\n          });\n        });\n        item.on('process-revert-error', function (error) {\n          dispatch('DID_THROW_ITEM_PROCESSING_REVERT_ERROR', {\n            id: id,\n            error: error,\n            status: {\n              main: dynamicLabel(state.options.labelFileProcessingRevertError)(error),\n              sub: state.options.labelTapToRetry\n            }\n          });\n        });\n        item.on('process-complete', function (serverFileReference) {\n          dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n            id: id,\n            error: null,\n            serverFileReference: serverFileReference\n          });\n          dispatch('DID_DEFINE_VALUE', {\n            id: id,\n            value: serverFileReference\n          });\n        });\n        item.on('process-abort', function () {\n          dispatch('DID_ABORT_ITEM_PROCESSING', {\n            id: id\n          });\n        });\n        item.on('process-revert', function () {\n          dispatch('DID_REVERT_ITEM_PROCESSING', {\n            id: id\n          });\n          dispatch('DID_DEFINE_VALUE', {\n            id: id,\n            value: null\n          });\n        });\n\n        // let view know the item has been inserted\n        dispatch('DID_ADD_ITEM', {\n          id: id,\n          index: index,\n          interactionMethod: interactionMethod\n        });\n        listUpdated(dispatch, state);\n\n        // start loading the source\n        var _ref8 = state.options.server || {},\n          url = _ref8.url,\n          load = _ref8.load,\n          restore = _ref8.restore,\n          fetch = _ref8.fetch;\n        item.load(source,\n        // this creates a function that loads the file based on the type of file (string, base64, blob, file) and location of file (local, remote, limbo)\n        createFileLoader(origin === FileOrigin.INPUT ?\n        // input, if is remote, see if should use custom fetch, else use default fetchBlob\n        isString(source) && isExternalURL(source) ? fetch ? createFetchFunction(url, fetch) : fetchBlob // remote url\n        : fetchBlob // try to fetch url\n        :\n        // limbo or local\n        origin === FileOrigin.LIMBO ? createFetchFunction(url, restore) // limbo\n        : createFetchFunction(url, load) // local\n        ),\n        // called when the file is loaded so it can be piped through the filters\n        function (file, success, error) {\n          // let's process the file\n          applyFilterChain('LOAD_FILE', file, {\n            query: query\n          }).then(success).catch(error);\n        });\n      },\n      REQUEST_PREPARE_OUTPUT: function REQUEST_PREPARE_OUTPUT(_ref9) {\n        var item = _ref9.item,\n          success = _ref9.success,\n          _ref9$failure = _ref9.failure,\n          failure = _ref9$failure === void 0 ? function () {} : _ref9$failure;\n        // error response if item archived\n        var err = {\n          error: createResponse('error', 0, 'Item not found'),\n          file: null\n        };\n\n        // don't handle archived items, an item could have been archived (load aborted) while waiting to be prepared\n        if (item.archived) return failure(err);\n\n        // allow plugins to alter the file data\n        applyFilterChain('PREPARE_OUTPUT', item.file, {\n          query: query,\n          item: item\n        }).then(function (result) {\n          applyFilterChain('COMPLETE_PREPARE_OUTPUT', result, {\n            query: query,\n            item: item\n          }).then(function (result) {\n            // don't handle archived items, an item could have been archived (load aborted) while being prepared\n            if (item.archived) return failure(err);\n\n            // we done!\n            success(result);\n          });\n        });\n      },\n      COMPLETE_LOAD_ITEM: function COMPLETE_LOAD_ITEM(_ref10) {\n        var item = _ref10.item,\n          data = _ref10.data;\n        var success = data.success,\n          source = data.source;\n\n        // sort items in list\n        var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n        if (isFunction(itemInsertLocation) && source) {\n          sortItems(state, itemInsertLocation);\n        }\n\n        // let interface know the item has loaded\n        dispatch('DID_LOAD_ITEM', {\n          id: item.id,\n          error: null,\n          serverFileReference: item.origin === FileOrigin.INPUT ? null : source\n        });\n\n        // item has been successfully loaded and added to the\n        // list of items so can now be safely returned for use\n        success(createItemAPI(item));\n\n        // if this is a local server file we need to show a different state\n        if (item.origin === FileOrigin.LOCAL) {\n          dispatch('DID_LOAD_LOCAL_ITEM', {\n            id: item.id\n          });\n          return;\n        }\n\n        // if is a temp server file we prevent async upload call here (as the file is already on the server)\n        if (item.origin === FileOrigin.LIMBO) {\n          dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n            id: item.id,\n            error: null,\n            serverFileReference: source\n          });\n          dispatch('DID_DEFINE_VALUE', {\n            id: item.id,\n            value: item.serverId || source\n          });\n          return;\n        }\n\n        // id we are allowed to upload the file immediately, lets do it\n        if (query('IS_ASYNC') && state.options.instantUpload) {\n          dispatch('REQUEST_ITEM_PROCESSING', {\n            query: item.id\n          });\n        }\n      },\n      RETRY_ITEM_LOAD: getItemByQueryFromState(state, function (item) {\n        // try loading the source one more time\n        item.retryLoad();\n      }),\n      REQUEST_ITEM_PREPARE: getItemByQueryFromState(state, function (item, _success, failure) {\n        dispatch('REQUEST_PREPARE_OUTPUT', {\n          query: item.id,\n          item: item,\n          success: function success(file) {\n            dispatch('DID_PREPARE_OUTPUT', {\n              id: item.id,\n              file: file\n            });\n            _success({\n              file: item,\n              output: file\n            });\n          },\n          failure: failure\n        }, true);\n      }),\n      REQUEST_ITEM_PROCESSING: getItemByQueryFromState(state, function (item, success, failure) {\n        // cannot be queued (or is already queued)\n        var itemCanBeQueuedForProcessing =\n        // waiting for something\n        item.status === ItemStatus.IDLE ||\n        // processing went wrong earlier\n        item.status === ItemStatus.PROCESSING_ERROR;\n\n        // not ready to be processed\n        if (!itemCanBeQueuedForProcessing) {\n          var processNow = function processNow() {\n            return dispatch('REQUEST_ITEM_PROCESSING', {\n              query: item,\n              success: success,\n              failure: failure\n            });\n          };\n          var process = function process() {\n            return document.hidden ? processNow() : setTimeout(processNow, 32);\n          };\n\n          // if already done processing or tried to revert but didn't work, try again\n          if (item.status === ItemStatus.PROCESSING_COMPLETE || item.status === ItemStatus.PROCESSING_REVERT_ERROR) {\n            item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), query('GET_FORCE_REVERT')).then(process).catch(function () {}); // don't continue with processing if something went wrong\n          } else if (item.status === ItemStatus.PROCESSING) {\n            item.abortProcessing().then(process);\n          }\n          return;\n        }\n\n        // already queued for processing\n        if (item.status === ItemStatus.PROCESSING_QUEUED) return;\n        item.requestProcessing();\n        dispatch('DID_REQUEST_ITEM_PROCESSING', {\n          id: item.id\n        });\n        dispatch('PROCESS_ITEM', {\n          query: item,\n          success: success,\n          failure: failure\n        }, true);\n      }),\n      PROCESS_ITEM: getItemByQueryFromState(state, function (item, success, failure) {\n        var maxParallelUploads = query('GET_MAX_PARALLEL_UPLOADS');\n        var totalCurrentUploads = query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING).length;\n\n        // queue and wait till queue is freed up\n        if (totalCurrentUploads === maxParallelUploads) {\n          // queue for later processing\n          state.processingQueue.push({\n            id: item.id,\n            success: success,\n            failure: failure\n          });\n\n          // stop it!\n          return;\n        }\n\n        // if was not queued or is already processing exit here\n        if (item.status === ItemStatus.PROCESSING) return;\n        var processNext = function processNext() {\n          // process queueud items\n          var queueEntry = state.processingQueue.shift();\n\n          // no items left\n          if (!queueEntry) return;\n\n          // get item reference\n          var id = queueEntry.id,\n            success = queueEntry.success,\n            failure = queueEntry.failure;\n          var itemReference = getItemByQuery(state.items, id);\n\n          // if item was archived while in queue, jump to next\n          if (!itemReference || itemReference.archived) {\n            processNext();\n            return;\n          }\n\n          // process queued item\n          dispatch('PROCESS_ITEM', {\n            query: id,\n            success: success,\n            failure: failure\n          }, true);\n        };\n\n        // we done function\n        item.onOnce('process-complete', function () {\n          success(createItemAPI(item));\n          processNext();\n\n          // if origin is local, and we're instant uploading, trigger remove of original\n          // as revert will remove file from list\n          var server = state.options.server;\n          var instantUpload = state.options.instantUpload;\n          if (instantUpload && item.origin === FileOrigin.LOCAL && isFunction(server.remove)) {\n            var noop = function noop() {};\n            item.origin = FileOrigin.LIMBO;\n            state.options.server.remove(item.source, noop, noop);\n          }\n\n          // All items processed? No errors?\n          var allItemsProcessed = query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING_COMPLETE).length === state.items.length;\n          if (allItemsProcessed) {\n            dispatch('DID_COMPLETE_ITEM_PROCESSING_ALL');\n          }\n        });\n\n        // we error function\n        item.onOnce('process-error', function (error) {\n          failure({\n            error: error,\n            file: createItemAPI(item)\n          });\n          processNext();\n        });\n\n        // start file processing\n        var options = state.options;\n        item.process(createFileProcessor(createProcessorFunction(options.server.url, options.server.process, options.name, {\n          chunkTransferId: item.transferId,\n          chunkServer: options.server.patch,\n          chunkUploads: options.chunkUploads,\n          chunkForce: options.chunkForce,\n          chunkSize: options.chunkSize,\n          chunkRetryDelays: options.chunkRetryDelays\n        }), {\n          allowMinimumUploadDuration: query('GET_ALLOW_MINIMUM_UPLOAD_DURATION')\n        }),\n        // called when the file is about to be processed so it can be piped through the transform filters\n        function (file, success, error) {\n          // allow plugins to alter the file data\n          applyFilterChain('PREPARE_OUTPUT', file, {\n            query: query,\n            item: item\n          }).then(function (file) {\n            dispatch('DID_PREPARE_OUTPUT', {\n              id: item.id,\n              file: file\n            });\n            success(file);\n          }).catch(error);\n        });\n      }),\n      RETRY_ITEM_PROCESSING: getItemByQueryFromState(state, function (item) {\n        dispatch('REQUEST_ITEM_PROCESSING', {\n          query: item\n        });\n      }),\n      REQUEST_REMOVE_ITEM: getItemByQueryFromState(state, function (item) {\n        optionalPromise(query('GET_BEFORE_REMOVE_FILE'), createItemAPI(item)).then(function (shouldRemove) {\n          if (!shouldRemove) {\n            return;\n          }\n          dispatch('REMOVE_ITEM', {\n            query: item\n          });\n        });\n      }),\n      RELEASE_ITEM: getItemByQueryFromState(state, function (item) {\n        item.release();\n      }),\n      REMOVE_ITEM: getItemByQueryFromState(state, function (item, success, failure, options) {\n        var removeFromView = function removeFromView() {\n          // get id reference\n          var id = item.id;\n\n          // archive the item, this does not remove it from the list\n          getItemById(state.items, id).archive();\n\n          // tell the view the item has been removed\n          dispatch('DID_REMOVE_ITEM', {\n            error: null,\n            id: id,\n            item: item\n          });\n\n          // now the list has been modified\n          listUpdated(dispatch, state);\n\n          // correctly removed\n          success(createItemAPI(item));\n        };\n\n        // if this is a local file and the `server.remove` function has been configured,\n        // send source there so dev can remove file from server\n        var server = state.options.server;\n        if (item.origin === FileOrigin.LOCAL && server && isFunction(server.remove) && options.remove !== false) {\n          dispatch('DID_START_ITEM_REMOVE', {\n            id: item.id\n          });\n          server.remove(item.source, function () {\n            return removeFromView();\n          }, function (status) {\n            dispatch('DID_THROW_ITEM_REMOVE_ERROR', {\n              id: item.id,\n              error: createResponse('error', 0, status, null),\n              status: {\n                main: dynamicLabel(state.options.labelFileRemoveError)(status),\n                sub: state.options.labelTapToRetry\n              }\n            });\n          });\n        } else {\n          // if is requesting revert and can revert need to call revert handler (not calling request_ because that would also trigger beforeRemoveHook)\n          if (options.revert && item.origin !== FileOrigin.LOCAL && item.serverId !== null ||\n          // if chunked uploads are enabled and we're uploading in chunks for this specific file\n          // or if the file isn't big enough for chunked uploads but chunkForce is set then call\n          // revert before removing from the view...\n          state.options.chunkUploads && item.file.size > state.options.chunkSize || state.options.chunkUploads && state.options.chunkForce) {\n            item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), query('GET_FORCE_REVERT'));\n          }\n\n          // can now safely remove from view\n          removeFromView();\n        }\n      }),\n      ABORT_ITEM_LOAD: getItemByQueryFromState(state, function (item) {\n        item.abortLoad();\n      }),\n      ABORT_ITEM_PROCESSING: getItemByQueryFromState(state, function (item) {\n        // test if is already processed\n        if (item.serverId) {\n          dispatch('REVERT_ITEM_PROCESSING', {\n            id: item.id\n          });\n          return;\n        }\n\n        // abort\n        item.abortProcessing().then(function () {\n          var shouldRemove = state.options.instantUpload;\n          if (shouldRemove) {\n            dispatch('REMOVE_ITEM', {\n              query: item.id\n            });\n          }\n        });\n      }),\n      REQUEST_REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function (item) {\n        // not instant uploading, revert immediately\n        if (!state.options.instantUpload) {\n          dispatch('REVERT_ITEM_PROCESSING', {\n            query: item\n          });\n          return;\n        }\n\n        // if we're instant uploading the file will also be removed if we revert,\n        // so if a before remove file hook is defined we need to run it now\n        var handleRevert = function handleRevert(shouldRevert) {\n          if (!shouldRevert) return;\n          dispatch('REVERT_ITEM_PROCESSING', {\n            query: item\n          });\n        };\n        var fn = query('GET_BEFORE_REMOVE_FILE');\n        if (!fn) {\n          return handleRevert(true);\n        }\n        var requestRemoveResult = fn(createItemAPI(item));\n        if (requestRemoveResult == null) {\n          // undefined or null\n          return handleRevert(true);\n        }\n        if (typeof requestRemoveResult === 'boolean') {\n          return handleRevert(requestRemoveResult);\n        }\n        if (typeof requestRemoveResult.then === 'function') {\n          requestRemoveResult.then(handleRevert);\n        }\n      }),\n      REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function (item) {\n        item.revert(createRevertFunction(state.options.server.url, state.options.server.revert), query('GET_FORCE_REVERT')).then(function () {\n          var shouldRemove = state.options.instantUpload || isMockItem(item);\n          if (shouldRemove) {\n            dispatch('REMOVE_ITEM', {\n              query: item.id\n            });\n          }\n        }).catch(function () {});\n      }),\n      SET_OPTIONS: function SET_OPTIONS(_ref11) {\n        var options = _ref11.options;\n        // get all keys passed\n        var optionKeys = Object.keys(options);\n\n        // get prioritized keyed to include (remove once not in options object)\n        var prioritizedOptionKeys = PrioritizedOptions.filter(function (key) {\n          return optionKeys.includes(key);\n        });\n\n        // order the keys, prioritized first, then rest\n        var orderedOptionKeys = [].concat(_toConsumableArray(prioritizedOptionKeys), _toConsumableArray(Object.keys(options).filter(function (key) {\n          return !prioritizedOptionKeys.includes(key);\n        })));\n\n        // dispatch set event for each option\n        orderedOptionKeys.forEach(function (key) {\n          dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n            value: options[key]\n          });\n        });\n      }\n    };\n  };\n  var PrioritizedOptions = ['server'];\n  var formatFilename = function formatFilename(name) {\n    return name;\n  };\n  var createElement$1 = function createElement(tagName) {\n    return document.createElement(tagName);\n  };\n  var text = function text(node, value) {\n    var textNode = node.childNodes[0];\n    if (!textNode) {\n      textNode = document.createTextNode(value);\n      node.appendChild(textNode);\n    } else if (value !== textNode.nodeValue) {\n      textNode.nodeValue = value;\n    }\n  };\n  var polarToCartesian = function polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n    var angleInRadians = (angleInDegrees % 360 - 90) * Math.PI / 180.0;\n    return {\n      x: centerX + radius * Math.cos(angleInRadians),\n      y: centerY + radius * Math.sin(angleInRadians)\n    };\n  };\n  var describeArc = function describeArc(x, y, radius, startAngle, endAngle, arcSweep) {\n    var start = polarToCartesian(x, y, radius, endAngle);\n    var end = polarToCartesian(x, y, radius, startAngle);\n    return ['M', start.x, start.y, 'A', radius, radius, 0, arcSweep, 0, end.x, end.y].join(' ');\n  };\n  var percentageArc = function percentageArc(x, y, radius, from, to) {\n    var arcSweep = 1;\n    if (to > from && to - from <= 0.5) {\n      arcSweep = 0;\n    }\n    if (from > to && from - to >= 0.5) {\n      arcSweep = 0;\n    }\n    return describeArc(x, y, radius, Math.min(0.9999, from) * 360, Math.min(0.9999, to) * 360, arcSweep);\n  };\n  var create = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n    // start at 0\n    props.spin = false;\n    props.progress = 0;\n    props.opacity = 0;\n\n    // svg\n    var svg = createElement('svg');\n    root.ref.path = createElement('path', {\n      'stroke-width': 2,\n      'stroke-linecap': 'round'\n    });\n    svg.appendChild(root.ref.path);\n    root.ref.svg = svg;\n    root.appendChild(svg);\n  };\n  var write = function write(_ref2) {\n    var root = _ref2.root,\n      props = _ref2.props;\n    if (props.opacity === 0) {\n      return;\n    }\n    if (props.align) {\n      root.element.dataset.align = props.align;\n    }\n\n    // get width of stroke\n    var ringStrokeWidth = parseInt(attr(root.ref.path, 'stroke-width'), 10);\n\n    // calculate size of ring\n    var size = root.rect.element.width * 0.5;\n\n    // ring state\n    var ringFrom = 0;\n    var ringTo = 0;\n\n    // now in busy mode\n    if (props.spin) {\n      ringFrom = 0;\n      ringTo = 0.5;\n    } else {\n      ringFrom = 0;\n      ringTo = props.progress;\n    }\n\n    // get arc path\n    var coordinates = percentageArc(size, size, size - ringStrokeWidth, ringFrom, ringTo);\n\n    // update progress bar\n    attr(root.ref.path, 'd', coordinates);\n\n    // hide while contains 0 value\n    attr(root.ref.path, 'stroke-opacity', props.spin || props.progress > 0 ? 1 : 0);\n  };\n  var progressIndicator = createView({\n    tag: 'div',\n    name: 'progress-indicator',\n    ignoreRectUpdate: true,\n    ignoreRect: true,\n    create: create,\n    write: write,\n    mixins: {\n      apis: ['progress', 'spin', 'align'],\n      styles: ['opacity'],\n      animations: {\n        opacity: {\n          type: 'tween',\n          duration: 500\n        },\n        progress: {\n          type: 'spring',\n          stiffness: 0.95,\n          damping: 0.65,\n          mass: 10\n        }\n      }\n    }\n  });\n  var create$1 = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n    root.element.innerHTML = (props.icon || '') + ('<span>' + props.label + '</span>');\n    props.isDisabled = false;\n  };\n  var write$1 = function write(_ref2) {\n    var root = _ref2.root,\n      props = _ref2.props;\n    var isDisabled = props.isDisabled;\n    var shouldDisable = root.query('GET_DISABLED') || props.opacity === 0;\n    if (shouldDisable && !isDisabled) {\n      props.isDisabled = true;\n      attr(root.element, 'disabled', 'disabled');\n    } else if (!shouldDisable && isDisabled) {\n      props.isDisabled = false;\n      root.element.removeAttribute('disabled');\n    }\n  };\n  var fileActionButton = createView({\n    tag: 'button',\n    attributes: {\n      type: 'button'\n    },\n    ignoreRect: true,\n    ignoreRectUpdate: true,\n    name: 'file-action-button',\n    mixins: {\n      apis: ['label'],\n      styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n      animations: {\n        scaleX: 'spring',\n        scaleY: 'spring',\n        translateX: 'spring',\n        translateY: 'spring',\n        opacity: {\n          type: 'tween',\n          duration: 250\n        }\n      },\n      listeners: true\n    },\n    create: create$1,\n    write: write$1\n  });\n  var toNaturalFileSize = function toNaturalFileSize(bytes) {\n    var decimalSeparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';\n    var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var _options$labelBytes = options.labelBytes,\n      labelBytes = _options$labelBytes === void 0 ? 'bytes' : _options$labelBytes,\n      _options$labelKilobyt = options.labelKilobytes,\n      labelKilobytes = _options$labelKilobyt === void 0 ? 'KB' : _options$labelKilobyt,\n      _options$labelMegabyt = options.labelMegabytes,\n      labelMegabytes = _options$labelMegabyt === void 0 ? 'MB' : _options$labelMegabyt,\n      _options$labelGigabyt = options.labelGigabytes,\n      labelGigabytes = _options$labelGigabyt === void 0 ? 'GB' : _options$labelGigabyt;\n\n    // no negative byte sizes\n    bytes = Math.round(Math.abs(bytes));\n    var KB = base;\n    var MB = base * base;\n    var GB = base * base * base;\n\n    // just bytes\n    if (bytes < KB) {\n      return bytes + ' ' + labelBytes;\n    }\n\n    // kilobytes\n    if (bytes < MB) {\n      return Math.floor(bytes / KB) + ' ' + labelKilobytes;\n    }\n\n    // megabytes\n    if (bytes < GB) {\n      return removeDecimalsWhenZero(bytes / MB, 1, decimalSeparator) + ' ' + labelMegabytes;\n    }\n\n    // gigabytes\n    return removeDecimalsWhenZero(bytes / GB, 2, decimalSeparator) + ' ' + labelGigabytes;\n  };\n  var removeDecimalsWhenZero = function removeDecimalsWhenZero(value, decimalCount, separator) {\n    return value.toFixed(decimalCount).split('.').filter(function (part) {\n      return part !== '0';\n    }).join(separator);\n  };\n  var create$2 = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n    // filename\n    var fileName = createElement$1('span');\n    fileName.className = 'filepond--file-info-main';\n    // hide for screenreaders\n    // the file is contained in a fieldset with legend that contains the filename\n    // no need to read it twice\n    attr(fileName, 'aria-hidden', 'true');\n    root.appendChild(fileName);\n    root.ref.fileName = fileName;\n\n    // filesize\n    var fileSize = createElement$1('span');\n    fileSize.className = 'filepond--file-info-sub';\n    root.appendChild(fileSize);\n    root.ref.fileSize = fileSize;\n\n    // set initial values\n    text(fileSize, root.query('GET_LABEL_FILE_WAITING_FOR_SIZE'));\n    text(fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n  };\n  var updateFile = function updateFile(_ref2) {\n    var root = _ref2.root,\n      props = _ref2.props;\n    text(root.ref.fileSize, toNaturalFileSize(root.query('GET_ITEM_SIZE', props.id), '.', root.query('GET_FILE_SIZE_BASE'), root.query('GET_FILE_SIZE_LABELS', root.query)));\n    text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n  };\n  var updateFileSizeOnError = function updateFileSizeOnError(_ref3) {\n    var root = _ref3.root,\n      props = _ref3.props;\n    // if size is available don't fallback to unknown size message\n    if (isInt(root.query('GET_ITEM_SIZE', props.id))) {\n      updateFile({\n        root: root,\n        props: props\n      });\n      return;\n    }\n    text(root.ref.fileSize, root.query('GET_LABEL_FILE_SIZE_NOT_AVAILABLE'));\n  };\n  var fileInfo = createView({\n    name: 'file-info',\n    ignoreRect: true,\n    ignoreRectUpdate: true,\n    write: createRoute({\n      DID_LOAD_ITEM: updateFile,\n      DID_UPDATE_ITEM_META: updateFile,\n      DID_THROW_ITEM_LOAD_ERROR: updateFileSizeOnError,\n      DID_THROW_ITEM_INVALID: updateFileSizeOnError\n    }),\n    didCreateView: function didCreateView(root) {\n      applyFilters('CREATE_VIEW', Object.assign({}, root, {\n        view: root\n      }));\n    },\n    create: create$2,\n    mixins: {\n      styles: ['translateX', 'translateY'],\n      animations: {\n        translateX: 'spring',\n        translateY: 'spring'\n      }\n    }\n  });\n  var toPercentage = function toPercentage(value) {\n    return Math.round(value * 100);\n  };\n  var create$3 = function create(_ref) {\n    var root = _ref.root;\n\n    // main status\n    var main = createElement$1('span');\n    main.className = 'filepond--file-status-main';\n    root.appendChild(main);\n    root.ref.main = main;\n\n    // sub status\n    var sub = createElement$1('span');\n    sub.className = 'filepond--file-status-sub';\n    root.appendChild(sub);\n    root.ref.sub = sub;\n    didSetItemLoadProgress({\n      root: root,\n      action: {\n        progress: null\n      }\n    });\n  };\n  var didSetItemLoadProgress = function didSetItemLoadProgress(_ref2) {\n    var root = _ref2.root,\n      action = _ref2.action;\n    var title = action.progress === null ? root.query('GET_LABEL_FILE_LOADING') : root.query('GET_LABEL_FILE_LOADING') + ' ' + toPercentage(action.progress) + '%';\n    text(root.ref.main, title);\n    text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n  };\n  var didSetItemProcessProgress = function didSetItemProcessProgress(_ref3) {\n    var root = _ref3.root,\n      action = _ref3.action;\n    var title = action.progress === null ? root.query('GET_LABEL_FILE_PROCESSING') : root.query('GET_LABEL_FILE_PROCESSING') + ' ' + toPercentage(action.progress) + '%';\n    text(root.ref.main, title);\n    text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n  };\n  var didRequestItemProcessing = function didRequestItemProcessing(_ref4) {\n    var root = _ref4.root;\n    text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING'));\n    text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n  };\n  var didAbortItemProcessing = function didAbortItemProcessing(_ref5) {\n    var root = _ref5.root;\n    text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_ABORTED'));\n    text(root.ref.sub, root.query('GET_LABEL_TAP_TO_RETRY'));\n  };\n  var didCompleteItemProcessing = function didCompleteItemProcessing(_ref6) {\n    var root = _ref6.root;\n    text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_COMPLETE'));\n    text(root.ref.sub, root.query('GET_LABEL_TAP_TO_UNDO'));\n  };\n  var clear = function clear(_ref7) {\n    var root = _ref7.root;\n    text(root.ref.main, '');\n    text(root.ref.sub, '');\n  };\n  var error = function error(_ref8) {\n    var root = _ref8.root,\n      action = _ref8.action;\n    text(root.ref.main, action.status.main);\n    text(root.ref.sub, action.status.sub);\n  };\n  var fileStatus = createView({\n    name: 'file-status',\n    ignoreRect: true,\n    ignoreRectUpdate: true,\n    write: createRoute({\n      DID_LOAD_ITEM: clear,\n      DID_REVERT_ITEM_PROCESSING: clear,\n      DID_REQUEST_ITEM_PROCESSING: didRequestItemProcessing,\n      DID_ABORT_ITEM_PROCESSING: didAbortItemProcessing,\n      DID_COMPLETE_ITEM_PROCESSING: didCompleteItemProcessing,\n      DID_UPDATE_ITEM_PROCESS_PROGRESS: didSetItemProcessProgress,\n      DID_UPDATE_ITEM_LOAD_PROGRESS: didSetItemLoadProgress,\n      DID_THROW_ITEM_LOAD_ERROR: error,\n      DID_THROW_ITEM_INVALID: error,\n      DID_THROW_ITEM_PROCESSING_ERROR: error,\n      DID_THROW_ITEM_PROCESSING_REVERT_ERROR: error,\n      DID_THROW_ITEM_REMOVE_ERROR: error\n    }),\n    didCreateView: function didCreateView(root) {\n      applyFilters('CREATE_VIEW', Object.assign({}, root, {\n        view: root\n      }));\n    },\n    create: create$3,\n    mixins: {\n      styles: ['translateX', 'translateY', 'opacity'],\n      animations: {\n        opacity: {\n          type: 'tween',\n          duration: 250\n        },\n        translateX: 'spring',\n        translateY: 'spring'\n      }\n    }\n  });\n\n  /**\n   * Button definitions for the file view\n   */\n\n  var Buttons = {\n    AbortItemLoad: {\n      label: 'GET_LABEL_BUTTON_ABORT_ITEM_LOAD',\n      action: 'ABORT_ITEM_LOAD',\n      className: 'filepond--action-abort-item-load',\n      align: 'LOAD_INDICATOR_POSITION' // right\n    },\n\n    RetryItemLoad: {\n      label: 'GET_LABEL_BUTTON_RETRY_ITEM_LOAD',\n      action: 'RETRY_ITEM_LOAD',\n      icon: 'GET_ICON_RETRY',\n      className: 'filepond--action-retry-item-load',\n      align: 'BUTTON_PROCESS_ITEM_POSITION' // right\n    },\n\n    RemoveItem: {\n      label: 'GET_LABEL_BUTTON_REMOVE_ITEM',\n      action: 'REQUEST_REMOVE_ITEM',\n      icon: 'GET_ICON_REMOVE',\n      className: 'filepond--action-remove-item',\n      align: 'BUTTON_REMOVE_ITEM_POSITION' // left\n    },\n\n    ProcessItem: {\n      label: 'GET_LABEL_BUTTON_PROCESS_ITEM',\n      action: 'REQUEST_ITEM_PROCESSING',\n      icon: 'GET_ICON_PROCESS',\n      className: 'filepond--action-process-item',\n      align: 'BUTTON_PROCESS_ITEM_POSITION' // right\n    },\n\n    AbortItemProcessing: {\n      label: 'GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING',\n      action: 'ABORT_ITEM_PROCESSING',\n      className: 'filepond--action-abort-item-processing',\n      align: 'BUTTON_PROCESS_ITEM_POSITION' // right\n    },\n\n    RetryItemProcessing: {\n      label: 'GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING',\n      action: 'RETRY_ITEM_PROCESSING',\n      icon: 'GET_ICON_RETRY',\n      className: 'filepond--action-retry-item-processing',\n      align: 'BUTTON_PROCESS_ITEM_POSITION' // right\n    },\n\n    RevertItemProcessing: {\n      label: 'GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING',\n      action: 'REQUEST_REVERT_ITEM_PROCESSING',\n      icon: 'GET_ICON_UNDO',\n      className: 'filepond--action-revert-item-processing',\n      align: 'BUTTON_PROCESS_ITEM_POSITION' // right\n    }\n  };\n\n  // make a list of buttons, we can then remove buttons from this list if they're disabled\n  var ButtonKeys = [];\n  forin(Buttons, function (key) {\n    ButtonKeys.push(key);\n  });\n  var calculateFileInfoOffset = function calculateFileInfoOffset(root) {\n    if (getRemoveIndicatorAligment(root) === 'right') return 0;\n    var buttonRect = root.ref.buttonRemoveItem.rect.element;\n    return buttonRect.hidden ? null : buttonRect.width + buttonRect.left;\n  };\n  var calculateButtonWidth = function calculateButtonWidth(root) {\n    var buttonRect = root.ref.buttonAbortItemLoad.rect.element;\n    return buttonRect.width;\n  };\n\n  // Force on full pixels so text stays crips\n  var calculateFileVerticalCenterOffset = function calculateFileVerticalCenterOffset(root) {\n    return Math.floor(root.ref.buttonRemoveItem.rect.element.height / 4);\n  };\n  var calculateFileHorizontalCenterOffset = function calculateFileHorizontalCenterOffset(root) {\n    return Math.floor(root.ref.buttonRemoveItem.rect.element.left / 2);\n  };\n  var getLoadIndicatorAlignment = function getLoadIndicatorAlignment(root) {\n    return root.query('GET_STYLE_LOAD_INDICATOR_POSITION');\n  };\n  var getProcessIndicatorAlignment = function getProcessIndicatorAlignment(root) {\n    return root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION');\n  };\n  var getRemoveIndicatorAligment = function getRemoveIndicatorAligment(root) {\n    return root.query('GET_STYLE_BUTTON_REMOVE_ITEM_POSITION');\n  };\n  var DefaultStyle = {\n    buttonAbortItemLoad: {\n      opacity: 0\n    },\n    buttonRetryItemLoad: {\n      opacity: 0\n    },\n    buttonRemoveItem: {\n      opacity: 0\n    },\n    buttonProcessItem: {\n      opacity: 0\n    },\n    buttonAbortItemProcessing: {\n      opacity: 0\n    },\n    buttonRetryItemProcessing: {\n      opacity: 0\n    },\n    buttonRevertItemProcessing: {\n      opacity: 0\n    },\n    loadProgressIndicator: {\n      opacity: 0,\n      align: getLoadIndicatorAlignment\n    },\n    processProgressIndicator: {\n      opacity: 0,\n      align: getProcessIndicatorAlignment\n    },\n    processingCompleteIndicator: {\n      opacity: 0,\n      scaleX: 0.75,\n      scaleY: 0.75\n    },\n    info: {\n      translateX: 0,\n      translateY: 0,\n      opacity: 0\n    },\n    status: {\n      translateX: 0,\n      translateY: 0,\n      opacity: 0\n    }\n  };\n  var IdleStyle = {\n    buttonRemoveItem: {\n      opacity: 1\n    },\n    buttonProcessItem: {\n      opacity: 1\n    },\n    info: {\n      translateX: calculateFileInfoOffset\n    },\n    status: {\n      translateX: calculateFileInfoOffset\n    }\n  };\n  var ProcessingStyle = {\n    buttonAbortItemProcessing: {\n      opacity: 1\n    },\n    processProgressIndicator: {\n      opacity: 1\n    },\n    status: {\n      opacity: 1\n    }\n  };\n  var StyleMap = {\n    DID_THROW_ITEM_INVALID: {\n      buttonRemoveItem: {\n        opacity: 1\n      },\n      info: {\n        translateX: calculateFileInfoOffset\n      },\n      status: {\n        translateX: calculateFileInfoOffset,\n        opacity: 1\n      }\n    },\n    DID_START_ITEM_LOAD: {\n      buttonAbortItemLoad: {\n        opacity: 1\n      },\n      loadProgressIndicator: {\n        opacity: 1\n      },\n      status: {\n        opacity: 1\n      }\n    },\n    DID_THROW_ITEM_LOAD_ERROR: {\n      buttonRetryItemLoad: {\n        opacity: 1\n      },\n      buttonRemoveItem: {\n        opacity: 1\n      },\n      info: {\n        translateX: calculateFileInfoOffset\n      },\n      status: {\n        opacity: 1\n      }\n    },\n    DID_START_ITEM_REMOVE: {\n      processProgressIndicator: {\n        opacity: 1,\n        align: getRemoveIndicatorAligment\n      },\n      info: {\n        translateX: calculateFileInfoOffset\n      },\n      status: {\n        opacity: 0\n      }\n    },\n    DID_THROW_ITEM_REMOVE_ERROR: {\n      processProgressIndicator: {\n        opacity: 0,\n        align: getRemoveIndicatorAligment\n      },\n      buttonRemoveItem: {\n        opacity: 1\n      },\n      info: {\n        translateX: calculateFileInfoOffset\n      },\n      status: {\n        opacity: 1,\n        translateX: calculateFileInfoOffset\n      }\n    },\n    DID_LOAD_ITEM: IdleStyle,\n    DID_LOAD_LOCAL_ITEM: {\n      buttonRemoveItem: {\n        opacity: 1\n      },\n      info: {\n        translateX: calculateFileInfoOffset\n      },\n      status: {\n        translateX: calculateFileInfoOffset\n      }\n    },\n    DID_START_ITEM_PROCESSING: ProcessingStyle,\n    DID_REQUEST_ITEM_PROCESSING: ProcessingStyle,\n    DID_UPDATE_ITEM_PROCESS_PROGRESS: ProcessingStyle,\n    DID_COMPLETE_ITEM_PROCESSING: {\n      buttonRevertItemProcessing: {\n        opacity: 1\n      },\n      info: {\n        opacity: 1\n      },\n      status: {\n        opacity: 1\n      }\n    },\n    DID_THROW_ITEM_PROCESSING_ERROR: {\n      buttonRemoveItem: {\n        opacity: 1\n      },\n      buttonRetryItemProcessing: {\n        opacity: 1\n      },\n      status: {\n        opacity: 1\n      },\n      info: {\n        translateX: calculateFileInfoOffset\n      }\n    },\n    DID_THROW_ITEM_PROCESSING_REVERT_ERROR: {\n      buttonRevertItemProcessing: {\n        opacity: 1\n      },\n      status: {\n        opacity: 1\n      },\n      info: {\n        opacity: 1\n      }\n    },\n    DID_ABORT_ITEM_PROCESSING: {\n      buttonRemoveItem: {\n        opacity: 1\n      },\n      buttonProcessItem: {\n        opacity: 1\n      },\n      info: {\n        translateX: calculateFileInfoOffset\n      },\n      status: {\n        opacity: 1\n      }\n    },\n    DID_REVERT_ITEM_PROCESSING: IdleStyle\n  };\n\n  // complete indicator view\n  var processingCompleteIndicatorView = createView({\n    create: function create(_ref) {\n      var root = _ref.root;\n      root.element.innerHTML = root.query('GET_ICON_DONE');\n    },\n    name: 'processing-complete-indicator',\n    ignoreRect: true,\n    mixins: {\n      styles: ['scaleX', 'scaleY', 'opacity'],\n      animations: {\n        scaleX: 'spring',\n        scaleY: 'spring',\n        opacity: {\n          type: 'tween',\n          duration: 250\n        }\n      }\n    }\n  });\n\n  /**\n   * Creates the file view\n   */\n  var create$4 = function create(_ref2) {\n    var root = _ref2.root,\n      props = _ref2.props;\n    // copy Buttons object\n    var LocalButtons = Object.keys(Buttons).reduce(function (prev, curr) {\n      prev[curr] = Object.assign({}, Buttons[curr]);\n      return prev;\n    }, {});\n    var id = props.id;\n\n    // allow reverting upload\n    var allowRevert = root.query('GET_ALLOW_REVERT');\n\n    // allow remove file\n    var allowRemove = root.query('GET_ALLOW_REMOVE');\n\n    // allow processing upload\n    var allowProcess = root.query('GET_ALLOW_PROCESS');\n\n    // is instant uploading, need this to determine the icon of the undo button\n    var instantUpload = root.query('GET_INSTANT_UPLOAD');\n\n    // is async set up\n    var isAsync = root.query('IS_ASYNC');\n\n    // should align remove item buttons\n    var alignRemoveItemButton = root.query('GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN');\n\n    // enabled buttons array\n    var buttonFilter;\n    if (isAsync) {\n      if (allowProcess && !allowRevert) {\n        // only remove revert button\n        buttonFilter = function buttonFilter(key) {\n          return !/RevertItemProcessing/.test(key);\n        };\n      } else if (!allowProcess && allowRevert) {\n        // only remove process button\n        buttonFilter = function buttonFilter(key) {\n          return !/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(key);\n        };\n      } else if (!allowProcess && !allowRevert) {\n        // remove all process buttons\n        buttonFilter = function buttonFilter(key) {\n          return !/Process/.test(key);\n        };\n      }\n    } else {\n      // no process controls available\n      buttonFilter = function buttonFilter(key) {\n        return !/Process/.test(key);\n      };\n    }\n    var enabledButtons = buttonFilter ? ButtonKeys.filter(buttonFilter) : ButtonKeys.concat();\n\n    // update icon and label for revert button when instant uploading\n    if (instantUpload && allowRevert) {\n      LocalButtons['RevertItemProcessing'].label = 'GET_LABEL_BUTTON_REMOVE_ITEM';\n      LocalButtons['RevertItemProcessing'].icon = 'GET_ICON_REMOVE';\n    }\n\n    // remove last button (revert) if not allowed\n    if (isAsync && !allowRevert) {\n      var map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n      map.info.translateX = calculateFileHorizontalCenterOffset;\n      map.info.translateY = calculateFileVerticalCenterOffset;\n      map.status.translateY = calculateFileVerticalCenterOffset;\n      map.processingCompleteIndicator = {\n        opacity: 1,\n        scaleX: 1,\n        scaleY: 1\n      };\n    }\n\n    // should align center\n    if (isAsync && !allowProcess) {\n      ['DID_START_ITEM_PROCESSING', 'DID_REQUEST_ITEM_PROCESSING', 'DID_UPDATE_ITEM_PROCESS_PROGRESS', 'DID_THROW_ITEM_PROCESSING_ERROR'].forEach(function (key) {\n        StyleMap[key].status.translateY = calculateFileVerticalCenterOffset;\n      });\n      StyleMap['DID_THROW_ITEM_PROCESSING_ERROR'].status.translateX = calculateButtonWidth;\n    }\n\n    // move remove button to right\n    if (alignRemoveItemButton && allowRevert) {\n      LocalButtons['RevertItemProcessing'].align = 'BUTTON_REMOVE_ITEM_POSITION';\n      var _map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n      _map.info.translateX = calculateFileInfoOffset;\n      _map.status.translateY = calculateFileVerticalCenterOffset;\n      _map.processingCompleteIndicator = {\n        opacity: 1,\n        scaleX: 1,\n        scaleY: 1\n      };\n    }\n\n    // show/hide RemoveItem button\n    if (!allowRemove) {\n      LocalButtons['RemoveItem'].disabled = true;\n    }\n\n    // create the button views\n    forin(LocalButtons, function (key, definition) {\n      // create button\n      var buttonView = root.createChildView(fileActionButton, {\n        label: root.query(definition.label),\n        icon: root.query(definition.icon),\n        opacity: 0\n      });\n\n      // should be appended?\n      if (enabledButtons.includes(key)) {\n        root.appendChildView(buttonView);\n      }\n\n      // toggle\n      if (definition.disabled) {\n        buttonView.element.setAttribute('disabled', 'disabled');\n        buttonView.element.setAttribute('hidden', 'hidden');\n      }\n\n      // add position attribute\n      buttonView.element.dataset.align = root.query('GET_STYLE_' + definition.align);\n\n      // add class\n      buttonView.element.classList.add(definition.className);\n\n      // handle interactions\n      buttonView.on('click', function (e) {\n        e.stopPropagation();\n        if (definition.disabled) return;\n        root.dispatch(definition.action, {\n          query: id\n        });\n      });\n\n      // set reference\n      root.ref['button' + key] = buttonView;\n    });\n\n    // checkmark\n    root.ref.processingCompleteIndicator = root.appendChildView(root.createChildView(processingCompleteIndicatorView));\n    root.ref.processingCompleteIndicator.element.dataset.align = root.query('GET_STYLE_BUTTON_PROCESS_ITEM_POSITION');\n\n    // create file info view\n    root.ref.info = root.appendChildView(root.createChildView(fileInfo, {\n      id: id\n    }));\n\n    // create file status view\n    root.ref.status = root.appendChildView(root.createChildView(fileStatus, {\n      id: id\n    }));\n\n    // add progress indicators\n    var loadIndicatorView = root.appendChildView(root.createChildView(progressIndicator, {\n      opacity: 0,\n      align: root.query('GET_STYLE_LOAD_INDICATOR_POSITION')\n    }));\n    loadIndicatorView.element.classList.add('filepond--load-indicator');\n    root.ref.loadProgressIndicator = loadIndicatorView;\n    var progressIndicatorView = root.appendChildView(root.createChildView(progressIndicator, {\n      opacity: 0,\n      align: root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION')\n    }));\n    progressIndicatorView.element.classList.add('filepond--process-indicator');\n    root.ref.processProgressIndicator = progressIndicatorView;\n\n    // current active styles\n    root.ref.activeStyles = [];\n  };\n  var write$2 = function write(_ref3) {\n    var root = _ref3.root,\n      actions = _ref3.actions,\n      props = _ref3.props;\n    // route actions\n    route({\n      root: root,\n      actions: actions,\n      props: props\n    });\n\n    // select last state change action\n    var action = actions.concat().filter(function (action) {\n      return /^DID_/.test(action.type);\n    }).reverse().find(function (action) {\n      return StyleMap[action.type];\n    });\n\n    // a new action happened, let's get the matching styles\n    if (action) {\n      // define new active styles\n      root.ref.activeStyles = [];\n      var stylesToApply = StyleMap[action.type];\n      forin(DefaultStyle, function (name, defaultStyles) {\n        // get reference to control\n        var control = root.ref[name];\n\n        // loop over all styles for this control\n        forin(defaultStyles, function (key, defaultValue) {\n          var value = stylesToApply[name] && typeof stylesToApply[name][key] !== 'undefined' ? stylesToApply[name][key] : defaultValue;\n          root.ref.activeStyles.push({\n            control: control,\n            key: key,\n            value: value\n          });\n        });\n      });\n    }\n\n    // apply active styles to element\n    root.ref.activeStyles.forEach(function (_ref4) {\n      var control = _ref4.control,\n        key = _ref4.key,\n        value = _ref4.value;\n      control[key] = typeof value === 'function' ? value(root) : value;\n    });\n  };\n  var route = createRoute({\n    DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING: function DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING(_ref5) {\n      var root = _ref5.root,\n        action = _ref5.action;\n      root.ref.buttonAbortItemProcessing.label = action.value;\n    },\n    DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD: function DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD(_ref6) {\n      var root = _ref6.root,\n        action = _ref6.action;\n      root.ref.buttonAbortItemLoad.label = action.value;\n    },\n    DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL: function DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL(_ref7) {\n      var root = _ref7.root,\n        action = _ref7.action;\n      root.ref.buttonAbortItemRemoval.label = action.value;\n    },\n    DID_REQUEST_ITEM_PROCESSING: function DID_REQUEST_ITEM_PROCESSING(_ref8) {\n      var root = _ref8.root;\n      root.ref.processProgressIndicator.spin = true;\n      root.ref.processProgressIndicator.progress = 0;\n    },\n    DID_START_ITEM_LOAD: function DID_START_ITEM_LOAD(_ref9) {\n      var root = _ref9.root;\n      root.ref.loadProgressIndicator.spin = true;\n      root.ref.loadProgressIndicator.progress = 0;\n    },\n    DID_START_ITEM_REMOVE: function DID_START_ITEM_REMOVE(_ref10) {\n      var root = _ref10.root;\n      root.ref.processProgressIndicator.spin = true;\n      root.ref.processProgressIndicator.progress = 0;\n    },\n    DID_UPDATE_ITEM_LOAD_PROGRESS: function DID_UPDATE_ITEM_LOAD_PROGRESS(_ref11) {\n      var root = _ref11.root,\n        action = _ref11.action;\n      root.ref.loadProgressIndicator.spin = false;\n      root.ref.loadProgressIndicator.progress = action.progress;\n    },\n    DID_UPDATE_ITEM_PROCESS_PROGRESS: function DID_UPDATE_ITEM_PROCESS_PROGRESS(_ref12) {\n      var root = _ref12.root,\n        action = _ref12.action;\n      root.ref.processProgressIndicator.spin = false;\n      root.ref.processProgressIndicator.progress = action.progress;\n    }\n  });\n  var file = createView({\n    create: create$4,\n    write: write$2,\n    didCreateView: function didCreateView(root) {\n      applyFilters('CREATE_VIEW', Object.assign({}, root, {\n        view: root\n      }));\n    },\n    name: 'file'\n  });\n\n  /**\n   * Creates the file view\n   */\n  var create$5 = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n\n    // filename\n    root.ref.fileName = createElement$1('legend');\n    root.appendChild(root.ref.fileName);\n\n    // file appended\n    root.ref.file = root.appendChildView(root.createChildView(file, {\n      id: props.id\n    }));\n\n    // data has moved to data.js\n    root.ref.data = false;\n  };\n\n  /**\n   * Data storage\n   */\n  var didLoadItem = function didLoadItem(_ref2) {\n    var root = _ref2.root,\n      props = _ref2.props;\n    // updates the legend of the fieldset so screenreaders can better group buttons\n    text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n  };\n  var fileWrapper = createView({\n    create: create$5,\n    ignoreRect: true,\n    write: createRoute({\n      DID_LOAD_ITEM: didLoadItem\n    }),\n    didCreateView: function didCreateView(root) {\n      applyFilters('CREATE_VIEW', Object.assign({}, root, {\n        view: root\n      }));\n    },\n    tag: 'fieldset',\n    name: 'file-wrapper'\n  });\n  var PANEL_SPRING_PROPS = {\n    type: 'spring',\n    damping: 0.6,\n    mass: 7\n  };\n  var create$6 = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n    [{\n      name: 'top'\n    }, {\n      name: 'center',\n      props: {\n        translateY: null,\n        scaleY: null\n      },\n      mixins: {\n        animations: {\n          scaleY: PANEL_SPRING_PROPS\n        },\n        styles: ['translateY', 'scaleY']\n      }\n    }, {\n      name: 'bottom',\n      props: {\n        translateY: null\n      },\n      mixins: {\n        animations: {\n          translateY: PANEL_SPRING_PROPS\n        },\n        styles: ['translateY']\n      }\n    }].forEach(function (section) {\n      createSection(root, section, props.name);\n    });\n    root.element.classList.add('filepond--' + props.name);\n    root.ref.scalable = null;\n  };\n  var createSection = function createSection(root, section, className) {\n    var viewConstructor = createView({\n      name: 'panel-' + section.name + ' filepond--' + className,\n      mixins: section.mixins,\n      ignoreRectUpdate: true\n    });\n    var view = root.createChildView(viewConstructor, section.props);\n    root.ref[section.name] = root.appendChildView(view);\n  };\n  var write$3 = function write(_ref2) {\n    var root = _ref2.root,\n      props = _ref2.props;\n\n    // update scalable state\n    if (root.ref.scalable === null || props.scalable !== root.ref.scalable) {\n      root.ref.scalable = isBoolean(props.scalable) ? props.scalable : true;\n      root.element.dataset.scalable = root.ref.scalable;\n    }\n\n    // no height, can't set\n    if (!props.height) return;\n\n    // get child rects\n    var topRect = root.ref.top.rect.element;\n    var bottomRect = root.ref.bottom.rect.element;\n\n    // make sure height never is smaller than bottom and top seciton heights combined (will probably never happen, but who knows)\n    var height = Math.max(topRect.height + bottomRect.height, props.height);\n\n    // offset center part\n    root.ref.center.translateY = topRect.height;\n\n    // scale center part\n    // use math ceil to prevent transparent lines because of rounding errors\n    root.ref.center.scaleY = (height - topRect.height - bottomRect.height) / 100;\n\n    // offset bottom part\n    root.ref.bottom.translateY = height - bottomRect.height;\n  };\n  var panel = createView({\n    name: 'panel',\n    read: function read(_ref3) {\n      var root = _ref3.root,\n        props = _ref3.props;\n      return props.heightCurrent = root.ref.bottom.translateY;\n    },\n    write: write$3,\n    create: create$6,\n    ignoreRect: true,\n    mixins: {\n      apis: ['height', 'heightCurrent', 'scalable']\n    }\n  });\n  var createDragHelper = function createDragHelper(items) {\n    var itemIds = items.map(function (item) {\n      return item.id;\n    });\n    var prevIndex = undefined;\n    return {\n      setIndex: function setIndex(index) {\n        prevIndex = index;\n      },\n      getIndex: function getIndex() {\n        return prevIndex;\n      },\n      getItemIndex: function getItemIndex(item) {\n        return itemIds.indexOf(item.id);\n      }\n    };\n  };\n  var ITEM_TRANSLATE_SPRING = {\n    type: 'spring',\n    stiffness: 0.75,\n    damping: 0.45,\n    mass: 10\n  };\n  var ITEM_SCALE_SPRING = 'spring';\n  var StateMap = {\n    DID_START_ITEM_LOAD: 'busy',\n    DID_UPDATE_ITEM_LOAD_PROGRESS: 'loading',\n    DID_THROW_ITEM_INVALID: 'load-invalid',\n    DID_THROW_ITEM_LOAD_ERROR: 'load-error',\n    DID_LOAD_ITEM: 'idle',\n    DID_THROW_ITEM_REMOVE_ERROR: 'remove-error',\n    DID_START_ITEM_REMOVE: 'busy',\n    DID_START_ITEM_PROCESSING: 'busy processing',\n    DID_REQUEST_ITEM_PROCESSING: 'busy processing',\n    DID_UPDATE_ITEM_PROCESS_PROGRESS: 'processing',\n    DID_COMPLETE_ITEM_PROCESSING: 'processing-complete',\n    DID_THROW_ITEM_PROCESSING_ERROR: 'processing-error',\n    DID_THROW_ITEM_PROCESSING_REVERT_ERROR: 'processing-revert-error',\n    DID_ABORT_ITEM_PROCESSING: 'cancelled',\n    DID_REVERT_ITEM_PROCESSING: 'idle'\n  };\n\n  /**\n   * Creates the file view\n   */\n  var create$7 = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n\n    // select\n    root.ref.handleClick = function (e) {\n      return root.dispatch('DID_ACTIVATE_ITEM', {\n        id: props.id\n      });\n    };\n\n    // set id\n    root.element.id = 'filepond--item-' + props.id;\n    root.element.addEventListener('click', root.ref.handleClick);\n\n    // file view\n    root.ref.container = root.appendChildView(root.createChildView(fileWrapper, {\n      id: props.id\n    }));\n\n    // file panel\n    root.ref.panel = root.appendChildView(root.createChildView(panel, {\n      name: 'item-panel'\n    }));\n\n    // default start height\n    root.ref.panel.height = null;\n\n    // by default not marked for removal\n    props.markedForRemoval = false;\n\n    // if not allowed to reorder file items, exit here\n    if (!root.query('GET_ALLOW_REORDER')) return;\n\n    // set to idle so shows grab cursor\n    root.element.dataset.dragState = 'idle';\n    var grab = function grab(e) {\n      if (!e.isPrimary) return;\n      var removedActivateListener = false;\n      var origin = {\n        x: e.pageX,\n        y: e.pageY\n      };\n      props.dragOrigin = {\n        x: root.translateX,\n        y: root.translateY\n      };\n      props.dragCenter = {\n        x: e.offsetX,\n        y: e.offsetY\n      };\n      var dragState = createDragHelper(root.query('GET_ACTIVE_ITEMS'));\n      root.dispatch('DID_GRAB_ITEM', {\n        id: props.id,\n        dragState: dragState\n      });\n      var drag = function drag(e) {\n        if (!e.isPrimary) return;\n        e.stopPropagation();\n        e.preventDefault();\n        props.dragOffset = {\n          x: e.pageX - origin.x,\n          y: e.pageY - origin.y\n        };\n\n        // if dragged stop listening to clicks, will re-add when done dragging\n        var dist = props.dragOffset.x * props.dragOffset.x + props.dragOffset.y * props.dragOffset.y;\n        if (dist > 16 && !removedActivateListener) {\n          removedActivateListener = true;\n          root.element.removeEventListener('click', root.ref.handleClick);\n        }\n        root.dispatch('DID_DRAG_ITEM', {\n          id: props.id,\n          dragState: dragState\n        });\n      };\n      var drop = function drop(e) {\n        if (!e.isPrimary) return;\n        document.removeEventListener('pointermove', drag);\n        document.removeEventListener('pointerup', drop);\n        props.dragOffset = {\n          x: e.pageX - origin.x,\n          y: e.pageY - origin.y\n        };\n        root.dispatch('DID_DROP_ITEM', {\n          id: props.id,\n          dragState: dragState\n        });\n\n        // start listening to clicks again\n        if (removedActivateListener) {\n          setTimeout(function () {\n            return root.element.addEventListener('click', root.ref.handleClick);\n          }, 0);\n        }\n      };\n      document.addEventListener('pointermove', drag);\n      document.addEventListener('pointerup', drop);\n    };\n    root.element.addEventListener('pointerdown', grab);\n  };\n  var route$1 = createRoute({\n    DID_UPDATE_PANEL_HEIGHT: function DID_UPDATE_PANEL_HEIGHT(_ref2) {\n      var root = _ref2.root,\n        action = _ref2.action;\n      root.height = action.height;\n    }\n  });\n  var write$4 = createRoute({\n    DID_GRAB_ITEM: function DID_GRAB_ITEM(_ref3) {\n      var root = _ref3.root,\n        props = _ref3.props;\n      props.dragOrigin = {\n        x: root.translateX,\n        y: root.translateY\n      };\n    },\n    DID_DRAG_ITEM: function DID_DRAG_ITEM(_ref4) {\n      var root = _ref4.root;\n      root.element.dataset.dragState = 'drag';\n    },\n    DID_DROP_ITEM: function DID_DROP_ITEM(_ref5) {\n      var root = _ref5.root,\n        props = _ref5.props;\n      props.dragOffset = null;\n      props.dragOrigin = null;\n      root.element.dataset.dragState = 'drop';\n    }\n  }, function (_ref6) {\n    var root = _ref6.root,\n      actions = _ref6.actions,\n      props = _ref6.props,\n      shouldOptimize = _ref6.shouldOptimize;\n    if (root.element.dataset.dragState === 'drop') {\n      if (root.scaleX <= 1) {\n        root.element.dataset.dragState = 'idle';\n      }\n    }\n\n    // select last state change action\n    var action = actions.concat().filter(function (action) {\n      return /^DID_/.test(action.type);\n    }).reverse().find(function (action) {\n      return StateMap[action.type];\n    });\n\n    // no need to set same state twice\n    if (action && action.type !== props.currentState) {\n      // set current state\n      props.currentState = action.type;\n\n      // set state\n      root.element.dataset.filepondItemState = StateMap[props.currentState] || '';\n    }\n\n    // route actions\n    var aspectRatio = root.query('GET_ITEM_PANEL_ASPECT_RATIO') || root.query('GET_PANEL_ASPECT_RATIO');\n    if (!aspectRatio) {\n      route$1({\n        root: root,\n        actions: actions,\n        props: props\n      });\n      if (!root.height && root.ref.container.rect.element.height > 0) {\n        root.height = root.ref.container.rect.element.height;\n      }\n    } else if (!shouldOptimize) {\n      root.height = root.rect.element.width * aspectRatio;\n    }\n\n    // sync panel height with item height\n    if (shouldOptimize) {\n      root.ref.panel.height = null;\n    }\n    root.ref.panel.height = root.height;\n  });\n  var item = createView({\n    create: create$7,\n    write: write$4,\n    destroy: function destroy(_ref7) {\n      var root = _ref7.root,\n        props = _ref7.props;\n      root.element.removeEventListener('click', root.ref.handleClick);\n      root.dispatch('RELEASE_ITEM', {\n        query: props.id\n      });\n    },\n    tag: 'li',\n    name: 'item',\n    mixins: {\n      apis: ['id', 'interactionMethod', 'markedForRemoval', 'spawnDate', 'dragCenter', 'dragOrigin', 'dragOffset'],\n      styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity', 'height'],\n      animations: {\n        scaleX: ITEM_SCALE_SPRING,\n        scaleY: ITEM_SCALE_SPRING,\n        translateX: ITEM_TRANSLATE_SPRING,\n        translateY: ITEM_TRANSLATE_SPRING,\n        opacity: {\n          type: 'tween',\n          duration: 150\n        }\n      }\n    }\n  });\n  var getItemsPerRow = function (horizontalSpace, itemWidth) {\n    // add one pixel leeway, when using percentages for item width total items can be 1.99 per row\n\n    return Math.max(1, Math.floor((horizontalSpace + 1) / itemWidth));\n  };\n  var getItemIndexByPosition = function getItemIndexByPosition(view, children, positionInView) {\n    if (!positionInView) return;\n    var horizontalSpace = view.rect.element.width;\n    // const children = view.childViews;\n    var l = children.length;\n    var last = null;\n\n    // -1, don't move items to accomodate (either add to top or bottom)\n    if (l === 0 || positionInView.top < children[0].rect.element.top) return -1;\n\n    // let's get the item width\n    var item = children[0];\n    var itemRect = item.rect.element;\n    var itemHorizontalMargin = itemRect.marginLeft + itemRect.marginRight;\n    var itemWidth = itemRect.width + itemHorizontalMargin;\n    var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n    // stack\n    if (itemsPerRow === 1) {\n      for (var index = 0; index < l; index++) {\n        var child = children[index];\n        var childMid = child.rect.outer.top + child.rect.element.height * 0.5;\n        if (positionInView.top < childMid) {\n          return index;\n        }\n      }\n      return l;\n    }\n\n    // grid\n    var itemVerticalMargin = itemRect.marginTop + itemRect.marginBottom;\n    var itemHeight = itemRect.height + itemVerticalMargin;\n    for (var _index = 0; _index < l; _index++) {\n      var indexX = _index % itemsPerRow;\n      var indexY = Math.floor(_index / itemsPerRow);\n      var offsetX = indexX * itemWidth;\n      var offsetY = indexY * itemHeight;\n      var itemTop = offsetY - itemRect.marginTop;\n      var itemRight = offsetX + itemWidth;\n      var itemBottom = offsetY + itemHeight + itemRect.marginBottom;\n      if (positionInView.top < itemBottom && positionInView.top > itemTop) {\n        if (positionInView.left < itemRight) {\n          return _index;\n        } else if (_index !== l - 1) {\n          last = _index;\n        } else {\n          last = null;\n        }\n      }\n    }\n    if (last !== null) {\n      return last;\n    }\n    return l;\n  };\n  var dropAreaDimensions = {\n    height: 0,\n    width: 0,\n    get getHeight() {\n      return this.height;\n    },\n    set setHeight(val) {\n      if (this.height === 0 || val === 0) this.height = val;\n    },\n    get getWidth() {\n      return this.width;\n    },\n    set setWidth(val) {\n      if (this.width === 0 || val === 0) this.width = val;\n    },\n    setDimensions: function setDimensions(height, width) {\n      if (this.height === 0 || height === 0) this.height = height;\n      if (this.width === 0 || width === 0) this.width = width;\n    }\n  };\n  var create$8 = function create(_ref) {\n    var root = _ref.root;\n    // need to set role to list as otherwise it won't be read as a list by VoiceOver\n    attr(root.element, 'role', 'list');\n    root.ref.lastItemSpanwDate = Date.now();\n  };\n\n  /**\n   * Inserts a new item\n   * @param root\n   * @param action\n   */\n  var addItemView = function addItemView(_ref2) {\n    var root = _ref2.root,\n      action = _ref2.action;\n    var id = action.id,\n      index = action.index,\n      interactionMethod = action.interactionMethod;\n    root.ref.addIndex = index;\n    var now = Date.now();\n    var spawnDate = now;\n    var opacity = 1;\n    if (interactionMethod !== InteractionMethod.NONE) {\n      opacity = 0;\n      var cooldown = root.query('GET_ITEM_INSERT_INTERVAL');\n      var dist = now - root.ref.lastItemSpanwDate;\n      spawnDate = dist < cooldown ? now + (cooldown - dist) : now;\n    }\n    root.ref.lastItemSpanwDate = spawnDate;\n    root.appendChildView(root.createChildView(\n    // view type\n    item,\n    // props\n    {\n      spawnDate: spawnDate,\n      id: id,\n      opacity: opacity,\n      interactionMethod: interactionMethod\n    }), index);\n  };\n  var moveItem = function moveItem(item, x, y) {\n    var vx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n    var vy = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n    // set to null to remove animation while dragging\n    if (item.dragOffset) {\n      item.translateX = null;\n      item.translateY = null;\n      item.translateX = item.dragOrigin.x + item.dragOffset.x;\n      item.translateY = item.dragOrigin.y + item.dragOffset.y;\n      item.scaleX = 1.025;\n      item.scaleY = 1.025;\n    } else {\n      item.translateX = x;\n      item.translateY = y;\n      if (Date.now() > item.spawnDate) {\n        // reveal element\n        if (item.opacity === 0) {\n          introItemView(item, x, y, vx, vy);\n        }\n\n        // make sure is default scale every frame\n        item.scaleX = 1;\n        item.scaleY = 1;\n        item.opacity = 1;\n      }\n    }\n  };\n  var introItemView = function introItemView(item, x, y, vx, vy) {\n    if (item.interactionMethod === InteractionMethod.NONE) {\n      item.translateX = null;\n      item.translateX = x;\n      item.translateY = null;\n      item.translateY = y;\n    } else if (item.interactionMethod === InteractionMethod.DROP) {\n      item.translateX = null;\n      item.translateX = x - vx * 20;\n      item.translateY = null;\n      item.translateY = y - vy * 10;\n      item.scaleX = 0.8;\n      item.scaleY = 0.8;\n    } else if (item.interactionMethod === InteractionMethod.BROWSE) {\n      item.translateY = null;\n      item.translateY = y - 30;\n    } else if (item.interactionMethod === InteractionMethod.API) {\n      item.translateX = null;\n      item.translateX = x - 30;\n      item.translateY = null;\n    }\n  };\n\n  /**\n   * Removes an existing item\n   * @param root\n   * @param action\n   */\n  var removeItemView = function removeItemView(_ref3) {\n    var root = _ref3.root,\n      action = _ref3.action;\n    var id = action.id;\n\n    // get the view matching the given id\n    var view = root.childViews.find(function (child) {\n      return child.id === id;\n    });\n\n    // if no view found, exit\n    if (!view) {\n      return;\n    }\n\n    // animate view out of view\n    view.scaleX = 0.9;\n    view.scaleY = 0.9;\n    view.opacity = 0;\n\n    // mark for removal\n    view.markedForRemoval = true;\n  };\n  var getItemHeight = function getItemHeight(child) {\n    return child.rect.element.height + child.rect.element.marginBottom * 0.5 + child.rect.element.marginTop * 0.5;\n  };\n  var getItemWidth = function getItemWidth(child) {\n    return child.rect.element.width + child.rect.element.marginLeft * 0.5 + child.rect.element.marginRight * 0.5;\n  };\n  var dragItem = function dragItem(_ref4) {\n    var root = _ref4.root,\n      action = _ref4.action;\n    var id = action.id,\n      dragState = action.dragState;\n\n    // reference to item\n    var item = root.query('GET_ITEM', {\n      id: id\n    });\n\n    // get the view matching the given id\n    var view = root.childViews.find(function (child) {\n      return child.id === id;\n    });\n    var numItems = root.childViews.length;\n    var oldIndex = dragState.getItemIndex(item);\n\n    // if no view found, exit\n    if (!view) return;\n    var dragPosition = {\n      x: view.dragOrigin.x + view.dragOffset.x + view.dragCenter.x,\n      y: view.dragOrigin.y + view.dragOffset.y + view.dragCenter.y\n    };\n\n    // get drag area dimensions\n    var dragHeight = getItemHeight(view);\n    var dragWidth = getItemWidth(view);\n\n    // get rows and columns (There will always be at least one row and one column if a file is present)\n    var cols = Math.floor(root.rect.outer.width / dragWidth);\n    if (cols > numItems) cols = numItems;\n\n    // rows are used to find when we have left the preview area bounding box\n    var rows = Math.floor(numItems / cols + 1);\n    dropAreaDimensions.setHeight = dragHeight * rows;\n    dropAreaDimensions.setWidth = dragWidth * cols;\n\n    // get new index of dragged item\n    var location = {\n      y: Math.floor(dragPosition.y / dragHeight),\n      x: Math.floor(dragPosition.x / dragWidth),\n      getGridIndex: function getGridIndex() {\n        if (dragPosition.y > dropAreaDimensions.getHeight || dragPosition.y < 0 || dragPosition.x > dropAreaDimensions.getWidth || dragPosition.x < 0) return oldIndex;\n        return this.y * cols + this.x;\n      },\n      getColIndex: function getColIndex() {\n        var items = root.query('GET_ACTIVE_ITEMS');\n        var visibleChildren = root.childViews.filter(function (child) {\n          return child.rect.element.height;\n        });\n        var children = items.map(function (item) {\n          return visibleChildren.find(function (childView) {\n            return childView.id === item.id;\n          });\n        });\n        var currentIndex = children.findIndex(function (child) {\n          return child === view;\n        });\n        var dragHeight = getItemHeight(view);\n        var l = children.length;\n        var idx = l;\n        var childHeight = 0;\n        var childBottom = 0;\n        var childTop = 0;\n        for (var i = 0; i < l; i++) {\n          childHeight = getItemHeight(children[i]);\n          childTop = childBottom;\n          childBottom = childTop + childHeight;\n          if (dragPosition.y < childBottom) {\n            if (currentIndex > i) {\n              if (dragPosition.y < childTop + dragHeight) {\n                idx = i;\n                break;\n              }\n              continue;\n            }\n            idx = i;\n            break;\n          }\n        }\n        return idx;\n      }\n    };\n\n    // get new index\n    var index = cols > 1 ? location.getGridIndex() : location.getColIndex();\n    root.dispatch('MOVE_ITEM', {\n      query: view,\n      index: index\n    });\n\n    // if the index of the item changed, dispatch reorder action\n    var currentIndex = dragState.getIndex();\n    if (currentIndex === undefined || currentIndex !== index) {\n      dragState.setIndex(index);\n      if (currentIndex === undefined) return;\n      root.dispatch('DID_REORDER_ITEMS', {\n        items: root.query('GET_ACTIVE_ITEMS'),\n        origin: oldIndex,\n        target: index\n      });\n    }\n  };\n\n  /**\n   * Setup action routes\n   */\n  var route$2 = createRoute({\n    DID_ADD_ITEM: addItemView,\n    DID_REMOVE_ITEM: removeItemView,\n    DID_DRAG_ITEM: dragItem\n  });\n\n  /**\n   * Write to view\n   * @param root\n   * @param actions\n   * @param props\n   */\n  var write$5 = function write(_ref5) {\n    var root = _ref5.root,\n      props = _ref5.props,\n      actions = _ref5.actions,\n      shouldOptimize = _ref5.shouldOptimize;\n    // route actions\n    route$2({\n      root: root,\n      props: props,\n      actions: actions\n    });\n    var dragCoordinates = props.dragCoordinates;\n\n    // available space on horizontal axis\n    var horizontalSpace = root.rect.element.width;\n\n    // only draw children that have dimensions\n    var visibleChildren = root.childViews.filter(function (child) {\n      return child.rect.element.height;\n    });\n\n    // sort based on current active items\n    var children = root.query('GET_ACTIVE_ITEMS').map(function (item) {\n      return visibleChildren.find(function (child) {\n        return child.id === item.id;\n      });\n    }).filter(function (item) {\n      return item;\n    });\n\n    // get index\n    var dragIndex = dragCoordinates ? getItemIndexByPosition(root, children, dragCoordinates) : null;\n\n    // add index is used to reserve the dropped/added item index till the actual item is rendered\n    var addIndex = root.ref.addIndex || null;\n\n    // add index no longer needed till possibly next draw\n    root.ref.addIndex = null;\n    var dragIndexOffset = 0;\n    var removeIndexOffset = 0;\n    var addIndexOffset = 0;\n    if (children.length === 0) return;\n    var childRect = children[0].rect.element;\n    var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n    var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n    var itemWidth = childRect.width + itemHorizontalMargin;\n    var itemHeight = childRect.height + itemVerticalMargin;\n    var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n    // stack\n    if (itemsPerRow === 1) {\n      var offsetY = 0;\n      var dragOffset = 0;\n      children.forEach(function (child, index) {\n        if (dragIndex) {\n          var dist = index - dragIndex;\n          if (dist === -2) {\n            dragOffset = -itemVerticalMargin * 0.25;\n          } else if (dist === -1) {\n            dragOffset = -itemVerticalMargin * 0.75;\n          } else if (dist === 0) {\n            dragOffset = itemVerticalMargin * 0.75;\n          } else if (dist === 1) {\n            dragOffset = itemVerticalMargin * 0.25;\n          } else {\n            dragOffset = 0;\n          }\n        }\n        if (shouldOptimize) {\n          child.translateX = null;\n          child.translateY = null;\n        }\n        if (!child.markedForRemoval) {\n          moveItem(child, 0, offsetY + dragOffset);\n        }\n        var itemHeight = child.rect.element.height + itemVerticalMargin;\n        var visualHeight = itemHeight * (child.markedForRemoval ? child.opacity : 1);\n        offsetY += visualHeight;\n      });\n    }\n    // grid\n    else {\n      var prevX = 0;\n      var prevY = 0;\n      children.forEach(function (child, index) {\n        if (index === dragIndex) {\n          dragIndexOffset = 1;\n        }\n        if (index === addIndex) {\n          addIndexOffset += 1;\n        }\n        if (child.markedForRemoval && child.opacity < 0.5) {\n          removeIndexOffset -= 1;\n        }\n        var visualIndex = index + addIndexOffset + dragIndexOffset + removeIndexOffset;\n        var indexX = visualIndex % itemsPerRow;\n        var indexY = Math.floor(visualIndex / itemsPerRow);\n        var offsetX = indexX * itemWidth;\n        var offsetY = indexY * itemHeight;\n        var vectorX = Math.sign(offsetX - prevX);\n        var vectorY = Math.sign(offsetY - prevY);\n        prevX = offsetX;\n        prevY = offsetY;\n        if (child.markedForRemoval) return;\n        if (shouldOptimize) {\n          child.translateX = null;\n          child.translateY = null;\n        }\n        moveItem(child, offsetX, offsetY, vectorX, vectorY);\n      });\n    }\n  };\n\n  /**\n   * Filters actions that are meant specifically for a certain child of the list\n   * @param child\n   * @param actions\n   */\n  var filterSetItemActions = function filterSetItemActions(child, actions) {\n    return actions.filter(function (action) {\n      // if action has an id, filter out actions that don't have this child id\n      if (action.data && action.data.id) {\n        return child.id === action.data.id;\n      }\n\n      // allow all other actions\n      return true;\n    });\n  };\n  var list = createView({\n    create: create$8,\n    write: write$5,\n    tag: 'ul',\n    name: 'list',\n    didWriteView: function didWriteView(_ref6) {\n      var root = _ref6.root;\n      root.childViews.filter(function (view) {\n        return view.markedForRemoval && view.opacity === 0 && view.resting;\n      }).forEach(function (view) {\n        view._destroy();\n        root.removeChildView(view);\n      });\n    },\n    filterFrameActionsForChild: filterSetItemActions,\n    mixins: {\n      apis: ['dragCoordinates']\n    }\n  });\n  var create$9 = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n    root.ref.list = root.appendChildView(root.createChildView(list));\n    props.dragCoordinates = null;\n    props.overflowing = false;\n  };\n  var storeDragCoordinates = function storeDragCoordinates(_ref2) {\n    var root = _ref2.root,\n      props = _ref2.props,\n      action = _ref2.action;\n    if (!root.query('GET_ITEM_INSERT_LOCATION_FREEDOM')) return;\n    props.dragCoordinates = {\n      left: action.position.scopeLeft - root.ref.list.rect.element.left,\n      top: action.position.scopeTop - (root.rect.outer.top + root.rect.element.marginTop + root.rect.element.scrollTop)\n    };\n  };\n  var clearDragCoordinates = function clearDragCoordinates(_ref3) {\n    var props = _ref3.props;\n    props.dragCoordinates = null;\n  };\n  var route$3 = createRoute({\n    DID_DRAG: storeDragCoordinates,\n    DID_END_DRAG: clearDragCoordinates\n  });\n  var write$6 = function write(_ref4) {\n    var root = _ref4.root,\n      props = _ref4.props,\n      actions = _ref4.actions;\n\n    // route actions\n    route$3({\n      root: root,\n      props: props,\n      actions: actions\n    });\n\n    // current drag position\n    root.ref.list.dragCoordinates = props.dragCoordinates;\n\n    // if currently overflowing but no longer received overflow\n    if (props.overflowing && !props.overflow) {\n      props.overflowing = false;\n\n      // reset overflow state\n      root.element.dataset.state = '';\n      root.height = null;\n    }\n\n    // if is not overflowing currently but does receive overflow value\n    if (props.overflow) {\n      var newHeight = Math.round(props.overflow);\n      if (newHeight !== root.height) {\n        props.overflowing = true;\n        root.element.dataset.state = 'overflow';\n        root.height = newHeight;\n      }\n    }\n  };\n  var listScroller = createView({\n    create: create$9,\n    write: write$6,\n    name: 'list-scroller',\n    mixins: {\n      apis: ['overflow', 'dragCoordinates'],\n      styles: ['height', 'translateY'],\n      animations: {\n        translateY: 'spring'\n      }\n    }\n  });\n  var attrToggle = function attrToggle(element, name, state) {\n    var enabledValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n    if (state) {\n      attr(element, name, enabledValue);\n    } else {\n      element.removeAttribute(name);\n    }\n  };\n  var resetFileInput = function resetFileInput(input) {\n    // no value, no need to reset\n    if (!input || input.value === '') {\n      return;\n    }\n    try {\n      // for modern browsers\n      input.value = '';\n    } catch (err) {}\n\n    // for IE10\n    if (input.value) {\n      // quickly append input to temp form and reset form\n      var form = createElement$1('form');\n      var parentNode = input.parentNode;\n      var ref = input.nextSibling;\n      form.appendChild(input);\n      form.reset();\n\n      // re-inject input where it originally was\n      if (ref) {\n        parentNode.insertBefore(input, ref);\n      } else {\n        parentNode.appendChild(input);\n      }\n    }\n  };\n  var create$a = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n\n    // set id so can be referenced from outside labels\n    root.element.id = 'filepond--browser-' + props.id;\n\n    // set name of element (is removed when a value is set)\n    attr(root.element, 'name', root.query('GET_NAME'));\n\n    // we have to link this element to the status element\n    attr(root.element, 'aria-controls', 'filepond--assistant-' + props.id);\n\n    // set label, we use labelled by as otherwise the screenreader does not read the \"browse\" text in the label (as it has tabindex: 0)\n    attr(root.element, 'aria-labelledby', 'filepond--drop-label-' + props.id);\n\n    // set configurable props\n    setAcceptedFileTypes({\n      root: root,\n      action: {\n        value: root.query('GET_ACCEPTED_FILE_TYPES')\n      }\n    });\n    toggleAllowMultiple({\n      root: root,\n      action: {\n        value: root.query('GET_ALLOW_MULTIPLE')\n      }\n    });\n    toggleDirectoryFilter({\n      root: root,\n      action: {\n        value: root.query('GET_ALLOW_DIRECTORIES_ONLY')\n      }\n    });\n    toggleDisabled({\n      root: root\n    });\n    toggleRequired({\n      root: root,\n      action: {\n        value: root.query('GET_REQUIRED')\n      }\n    });\n    setCaptureMethod({\n      root: root,\n      action: {\n        value: root.query('GET_CAPTURE_METHOD')\n      }\n    });\n\n    // handle changes to the input field\n    root.ref.handleChange = function (e) {\n      if (!root.element.value) {\n        return;\n      }\n\n      // extract files and move value of webkitRelativePath path to _relativePath\n      var files = Array.from(root.element.files).map(function (file) {\n        file._relativePath = file.webkitRelativePath;\n        return file;\n      });\n\n      // we add a little delay so the OS file select window can move out of the way before we add our file\n      setTimeout(function () {\n        // load files\n        props.onload(files);\n\n        // reset input, it's just for exposing a method to drop files, should not retain any state\n        resetFileInput(root.element);\n      }, 250);\n    };\n    root.element.addEventListener('change', root.ref.handleChange);\n  };\n  var setAcceptedFileTypes = function setAcceptedFileTypes(_ref2) {\n    var root = _ref2.root,\n      action = _ref2.action;\n    if (!root.query('GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE')) return;\n    attrToggle(root.element, 'accept', !!action.value, action.value ? action.value.join(',') : '');\n  };\n  var toggleAllowMultiple = function toggleAllowMultiple(_ref3) {\n    var root = _ref3.root,\n      action = _ref3.action;\n    attrToggle(root.element, 'multiple', action.value);\n  };\n  var toggleDirectoryFilter = function toggleDirectoryFilter(_ref4) {\n    var root = _ref4.root,\n      action = _ref4.action;\n    attrToggle(root.element, 'webkitdirectory', action.value);\n  };\n  var toggleDisabled = function toggleDisabled(_ref5) {\n    var root = _ref5.root;\n    var isDisabled = root.query('GET_DISABLED');\n    var doesAllowBrowse = root.query('GET_ALLOW_BROWSE');\n    var disableField = isDisabled || !doesAllowBrowse;\n    attrToggle(root.element, 'disabled', disableField);\n  };\n  var toggleRequired = function toggleRequired(_ref6) {\n    var root = _ref6.root,\n      action = _ref6.action;\n    // want to remove required, always possible\n    if (!action.value) {\n      attrToggle(root.element, 'required', false);\n    }\n    // if want to make required, only possible when zero items\n    else if (root.query('GET_TOTAL_ITEMS') === 0) {\n      attrToggle(root.element, 'required', true);\n    }\n  };\n  var setCaptureMethod = function setCaptureMethod(_ref7) {\n    var root = _ref7.root,\n      action = _ref7.action;\n    attrToggle(root.element, 'capture', !!action.value, action.value === true ? '' : action.value);\n  };\n  var updateRequiredStatus = function updateRequiredStatus(_ref8) {\n    var root = _ref8.root;\n    var element = root.element;\n    // always remove the required attribute when more than zero items\n    if (root.query('GET_TOTAL_ITEMS') > 0) {\n      attrToggle(element, 'required', false);\n      attrToggle(element, 'name', false);\n    } else {\n      // add name attribute\n      attrToggle(element, 'name', true, root.query('GET_NAME'));\n\n      // remove any validation messages\n      var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n      if (shouldCheckValidity) {\n        element.setCustomValidity('');\n      }\n\n      // we only add required if the field has been deemed required\n      if (root.query('GET_REQUIRED')) {\n        attrToggle(element, 'required', true);\n      }\n    }\n  };\n  var updateFieldValidityStatus = function updateFieldValidityStatus(_ref9) {\n    var root = _ref9.root;\n    var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n    if (!shouldCheckValidity) return;\n    root.element.setCustomValidity(root.query('GET_LABEL_INVALID_FIELD'));\n  };\n  var browser = createView({\n    tag: 'input',\n    name: 'browser',\n    ignoreRect: true,\n    ignoreRectUpdate: true,\n    attributes: {\n      type: 'file'\n    },\n    create: create$a,\n    destroy: function destroy(_ref10) {\n      var root = _ref10.root;\n      root.element.removeEventListener('change', root.ref.handleChange);\n    },\n    write: createRoute({\n      DID_LOAD_ITEM: updateRequiredStatus,\n      DID_REMOVE_ITEM: updateRequiredStatus,\n      DID_THROW_ITEM_INVALID: updateFieldValidityStatus,\n      DID_SET_DISABLED: toggleDisabled,\n      DID_SET_ALLOW_BROWSE: toggleDisabled,\n      DID_SET_ALLOW_DIRECTORIES_ONLY: toggleDirectoryFilter,\n      DID_SET_ALLOW_MULTIPLE: toggleAllowMultiple,\n      DID_SET_ACCEPTED_FILE_TYPES: setAcceptedFileTypes,\n      DID_SET_CAPTURE_METHOD: setCaptureMethod,\n      DID_SET_REQUIRED: toggleRequired\n    })\n  });\n  var Key = {\n    ENTER: 13,\n    SPACE: 32\n  };\n  var create$b = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n\n    // create the label and link it to the file browser\n    var label = createElement$1('label');\n    attr(label, 'for', 'filepond--browser-' + props.id);\n\n    // use for labeling file input (aria-labelledby on file input)\n    attr(label, 'id', 'filepond--drop-label-' + props.id);\n\n    // hide the label for screenreaders, the input element will read the contents of the label when it's focussed. If we don't set aria-hidden the screenreader will also navigate the contents of the label separately from the input.\n    attr(label, 'aria-hidden', 'true');\n\n    // handle keys\n    root.ref.handleKeyDown = function (e) {\n      var isActivationKey = e.keyCode === Key.ENTER || e.keyCode === Key.SPACE;\n      if (!isActivationKey) return;\n      // stops from triggering the element a second time\n      e.preventDefault();\n\n      // click link (will then in turn activate file input)\n      root.ref.label.click();\n    };\n    root.ref.handleClick = function (e) {\n      var isLabelClick = e.target === label || label.contains(e.target);\n\n      // don't want to click twice\n      if (isLabelClick) return;\n\n      // click link (will then in turn activate file input)\n      root.ref.label.click();\n    };\n\n    // attach events\n    label.addEventListener('keydown', root.ref.handleKeyDown);\n    root.element.addEventListener('click', root.ref.handleClick);\n\n    // update\n    updateLabelValue(label, props.caption);\n\n    // add!\n    root.appendChild(label);\n    root.ref.label = label;\n  };\n  var updateLabelValue = function updateLabelValue(label, value) {\n    label.innerHTML = value;\n    var clickable = label.querySelector('.filepond--label-action');\n    if (clickable) {\n      attr(clickable, 'tabindex', '0');\n    }\n    return value;\n  };\n  var dropLabel = createView({\n    name: 'drop-label',\n    ignoreRect: true,\n    create: create$b,\n    destroy: function destroy(_ref2) {\n      var root = _ref2.root;\n      root.ref.label.addEventListener('keydown', root.ref.handleKeyDown);\n      root.element.removeEventListener('click', root.ref.handleClick);\n    },\n    write: createRoute({\n      DID_SET_LABEL_IDLE: function DID_SET_LABEL_IDLE(_ref3) {\n        var root = _ref3.root,\n          action = _ref3.action;\n        updateLabelValue(root.ref.label, action.value);\n      }\n    }),\n    mixins: {\n      styles: ['opacity', 'translateX', 'translateY'],\n      animations: {\n        opacity: {\n          type: 'tween',\n          duration: 150\n        },\n        translateX: 'spring',\n        translateY: 'spring'\n      }\n    }\n  });\n  var blob = createView({\n    name: 'drip-blob',\n    ignoreRect: true,\n    mixins: {\n      styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n      animations: {\n        scaleX: 'spring',\n        scaleY: 'spring',\n        translateX: 'spring',\n        translateY: 'spring',\n        opacity: {\n          type: 'tween',\n          duration: 250\n        }\n      }\n    }\n  });\n  var addBlob = function addBlob(_ref) {\n    var root = _ref.root;\n    var centerX = root.rect.element.width * 0.5;\n    var centerY = root.rect.element.height * 0.5;\n    root.ref.blob = root.appendChildView(root.createChildView(blob, {\n      opacity: 0,\n      scaleX: 2.5,\n      scaleY: 2.5,\n      translateX: centerX,\n      translateY: centerY\n    }));\n  };\n  var moveBlob = function moveBlob(_ref2) {\n    var root = _ref2.root,\n      action = _ref2.action;\n    if (!root.ref.blob) {\n      addBlob({\n        root: root\n      });\n      return;\n    }\n    root.ref.blob.translateX = action.position.scopeLeft;\n    root.ref.blob.translateY = action.position.scopeTop;\n    root.ref.blob.scaleX = 1;\n    root.ref.blob.scaleY = 1;\n    root.ref.blob.opacity = 1;\n  };\n  var hideBlob = function hideBlob(_ref3) {\n    var root = _ref3.root;\n    if (!root.ref.blob) {\n      return;\n    }\n    root.ref.blob.opacity = 0;\n  };\n  var explodeBlob = function explodeBlob(_ref4) {\n    var root = _ref4.root;\n    if (!root.ref.blob) {\n      return;\n    }\n    root.ref.blob.scaleX = 2.5;\n    root.ref.blob.scaleY = 2.5;\n    root.ref.blob.opacity = 0;\n  };\n  var write$7 = function write(_ref5) {\n    var root = _ref5.root,\n      props = _ref5.props,\n      actions = _ref5.actions;\n    route$4({\n      root: root,\n      props: props,\n      actions: actions\n    });\n    var blob = root.ref.blob;\n    if (actions.length === 0 && blob && blob.opacity === 0) {\n      root.removeChildView(blob);\n      root.ref.blob = null;\n    }\n  };\n  var route$4 = createRoute({\n    DID_DRAG: moveBlob,\n    DID_DROP: explodeBlob,\n    DID_END_DRAG: hideBlob\n  });\n  var drip = createView({\n    ignoreRect: true,\n    ignoreRectUpdate: true,\n    name: 'drip',\n    write: write$7\n  });\n  var setInputFiles = function setInputFiles(element, files) {\n    try {\n      // Create a DataTransfer instance and add a newly created file\n      var dataTransfer = new DataTransfer();\n      files.forEach(function (file) {\n        if (file instanceof File) {\n          dataTransfer.items.add(file);\n        } else {\n          dataTransfer.items.add(new File([file], file.name, {\n            type: file.type\n          }));\n        }\n      });\n\n      // Assign the DataTransfer files list to the file input\n      element.files = dataTransfer.files;\n    } catch (err) {\n      return false;\n    }\n    return true;\n  };\n  var create$c = function create(_ref) {\n    var root = _ref.root;\n    return root.ref.fields = {};\n  };\n  var getField = function getField(root, id) {\n    return root.ref.fields[id];\n  };\n  var syncFieldPositionsWithItems = function syncFieldPositionsWithItems(root) {\n    root.query('GET_ACTIVE_ITEMS').forEach(function (item) {\n      if (!root.ref.fields[item.id]) return;\n      root.element.appendChild(root.ref.fields[item.id]);\n    });\n  };\n  var didReorderItems = function didReorderItems(_ref2) {\n    var root = _ref2.root;\n    return syncFieldPositionsWithItems(root);\n  };\n  var didAddItem = function didAddItem(_ref3) {\n    var root = _ref3.root,\n      action = _ref3.action;\n    var fileItem = root.query('GET_ITEM', action.id);\n    var isLocalFile = fileItem.origin === FileOrigin.LOCAL;\n    var shouldUseFileInput = !isLocalFile && root.query('SHOULD_UPDATE_FILE_INPUT');\n    var dataContainer = createElement$1('input');\n    dataContainer.type = shouldUseFileInput ? 'file' : 'hidden';\n    dataContainer.name = root.query('GET_NAME');\n    dataContainer.disabled = root.query('GET_DISABLED');\n    root.ref.fields[action.id] = dataContainer;\n    syncFieldPositionsWithItems(root);\n  };\n  var didLoadItem$1 = function didLoadItem(_ref4) {\n    var root = _ref4.root,\n      action = _ref4.action;\n    var field = getField(root, action.id);\n    if (!field) return;\n\n    // store server ref in hidden input\n    if (action.serverFileReference !== null) field.value = action.serverFileReference;\n\n    // store file item in file input\n    if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n    var fileItem = root.query('GET_ITEM', action.id);\n    setInputFiles(field, [fileItem.file]);\n  };\n  var didPrepareOutput = function didPrepareOutput(_ref5) {\n    var root = _ref5.root,\n      action = _ref5.action;\n    // this timeout pushes the handler after 'load'\n    if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n    setTimeout(function () {\n      var field = getField(root, action.id);\n      if (!field) return;\n      setInputFiles(field, [action.file]);\n    }, 0);\n  };\n  var didSetDisabled = function didSetDisabled(_ref6) {\n    var root = _ref6.root;\n    root.element.disabled = root.query('GET_DISABLED');\n  };\n  var didRemoveItem = function didRemoveItem(_ref7) {\n    var root = _ref7.root,\n      action = _ref7.action;\n    var field = getField(root, action.id);\n    if (!field) return;\n    if (field.parentNode) field.parentNode.removeChild(field);\n    delete root.ref.fields[action.id];\n  };\n\n  // only runs for server files (so doesn't deal with file input)\n  var didDefineValue = function didDefineValue(_ref8) {\n    var root = _ref8.root,\n      action = _ref8.action;\n    var field = getField(root, action.id);\n    if (!field) return;\n    if (action.value === null) {\n      // clear field value\n      field.removeAttribute('value');\n    } else {\n      // set field value\n      field.value = action.value;\n    }\n    syncFieldPositionsWithItems(root);\n  };\n  var write$8 = createRoute({\n    DID_SET_DISABLED: didSetDisabled,\n    DID_ADD_ITEM: didAddItem,\n    DID_LOAD_ITEM: didLoadItem$1,\n    DID_REMOVE_ITEM: didRemoveItem,\n    DID_DEFINE_VALUE: didDefineValue,\n    DID_PREPARE_OUTPUT: didPrepareOutput,\n    DID_REORDER_ITEMS: didReorderItems,\n    DID_SORT_ITEMS: didReorderItems\n  });\n  var data = createView({\n    tag: 'fieldset',\n    name: 'data',\n    create: create$c,\n    write: write$8,\n    ignoreRect: true\n  });\n  var getRootNode = function getRootNode(element) {\n    return 'getRootNode' in element ? element.getRootNode() : document;\n  };\n  var images = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff'];\n  var text$1 = ['css', 'csv', 'html', 'txt'];\n  var map = {\n    zip: 'zip|compressed',\n    epub: 'application/epub+zip'\n  };\n  var guesstimateMimeType = function guesstimateMimeType() {\n    var extension = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    extension = extension.toLowerCase();\n    if (images.includes(extension)) {\n      return 'image/' + (extension === 'jpg' ? 'jpeg' : extension === 'svg' ? 'svg+xml' : extension);\n    }\n    if (text$1.includes(extension)) {\n      return 'text/' + extension;\n    }\n    return map[extension] || '';\n  };\n  var requestDataTransferItems = function requestDataTransferItems(dataTransfer) {\n    return new Promise(function (resolve, reject) {\n      // try to get links from transfer, if found we'll exit immediately (unless a file is in the dataTransfer as well, this is because Firefox could represent the file as a URL and a file object at the same time)\n      var links = getLinks(dataTransfer);\n      if (links.length && !hasFiles(dataTransfer)) {\n        return resolve(links);\n      }\n      // try to get files from the transfer\n      getFiles(dataTransfer).then(resolve);\n    });\n  };\n\n  /**\n   * Test if datatransfer has files\n   */\n  var hasFiles = function hasFiles(dataTransfer) {\n    if (dataTransfer.files) return dataTransfer.files.length > 0;\n    return false;\n  };\n\n  /**\n   * Extracts files from a DataTransfer object\n   */\n  var getFiles = function getFiles(dataTransfer) {\n    return new Promise(function (resolve, reject) {\n      // get the transfer items as promises\n      var promisedFiles = (dataTransfer.items ? Array.from(dataTransfer.items) : []\n      // only keep file system items (files and directories)\n      ).filter(function (item) {\n        return isFileSystemItem(item);\n      })\n\n      // map each item to promise\n      .map(function (item) {\n        return getFilesFromItem(item);\n      });\n\n      // if is empty, see if we can extract some info from the files property as a fallback\n      if (!promisedFiles.length) {\n        // TODO: test for directories (should not be allowed)\n        // Use FileReader, problem is that the files property gets lost in the process\n        resolve(dataTransfer.files ? Array.from(dataTransfer.files) : []);\n        return;\n      }\n\n      // done!\n      Promise.all(promisedFiles).then(function (returnedFileGroups) {\n        // flatten groups\n        var files = [];\n        returnedFileGroups.forEach(function (group) {\n          files.push.apply(files, group);\n        });\n\n        // done (filter out empty files)!\n        resolve(files.filter(function (file) {\n          return file;\n        }).map(function (file) {\n          if (!file._relativePath) file._relativePath = file.webkitRelativePath;\n          return file;\n        }));\n      }).catch(console.error);\n    });\n  };\n  var isFileSystemItem = function isFileSystemItem(item) {\n    if (isEntry(item)) {\n      var entry = getAsEntry(item);\n      if (entry) {\n        return entry.isFile || entry.isDirectory;\n      }\n    }\n    return item.kind === 'file';\n  };\n  var getFilesFromItem = function getFilesFromItem(item) {\n    return new Promise(function (resolve, reject) {\n      if (isDirectoryEntry(item)) {\n        getFilesInDirectory(getAsEntry(item)).then(resolve).catch(reject);\n        return;\n      }\n      resolve([item.getAsFile()]);\n    });\n  };\n  var getFilesInDirectory = function getFilesInDirectory(entry) {\n    return new Promise(function (resolve, reject) {\n      var files = [];\n\n      // the total entries to read\n      var dirCounter = 0;\n      var fileCounter = 0;\n      var resolveIfDone = function resolveIfDone() {\n        if (fileCounter === 0 && dirCounter === 0) {\n          resolve(files);\n        }\n      };\n\n      // the recursive function\n      var readEntries = function readEntries(dirEntry) {\n        dirCounter++;\n        var directoryReader = dirEntry.createReader();\n\n        // directories are returned in batches, we need to process all batches before we're done\n        var readBatch = function readBatch() {\n          directoryReader.readEntries(function (entries) {\n            if (entries.length === 0) {\n              dirCounter--;\n              resolveIfDone();\n              return;\n            }\n            entries.forEach(function (entry) {\n              // recursively read more directories\n              if (entry.isDirectory) {\n                readEntries(entry);\n              } else {\n                // read as file\n                fileCounter++;\n                entry.file(function (file) {\n                  var correctedFile = correctMissingFileType(file);\n                  if (entry.fullPath) correctedFile._relativePath = entry.fullPath;\n                  files.push(correctedFile);\n                  fileCounter--;\n                  resolveIfDone();\n                });\n              }\n            });\n\n            // try to get next batch of files\n            readBatch();\n          }, reject);\n        };\n\n        // read first batch of files\n        readBatch();\n      };\n\n      // go!\n      readEntries(entry);\n    });\n  };\n  var correctMissingFileType = function correctMissingFileType(file) {\n    if (file.type.length) return file;\n    var date = file.lastModifiedDate;\n    var name = file.name;\n    var type = guesstimateMimeType(getExtensionFromFilename(file.name));\n    if (!type.length) return file;\n    file = file.slice(0, file.size, type);\n    file.name = name;\n    file.lastModifiedDate = date;\n    return file;\n  };\n  var isDirectoryEntry = function isDirectoryEntry(item) {\n    return isEntry(item) && (getAsEntry(item) || {}).isDirectory;\n  };\n  var isEntry = function isEntry(item) {\n    return 'webkitGetAsEntry' in item;\n  };\n  var getAsEntry = function getAsEntry(item) {\n    return item.webkitGetAsEntry();\n  };\n\n  /**\n   * Extracts links from a DataTransfer object\n   */\n  var getLinks = function getLinks(dataTransfer) {\n    var links = [];\n    try {\n      // look in meta data property\n      links = getLinksFromTransferMetaData(dataTransfer);\n      if (links.length) {\n        return links;\n      }\n      links = getLinksFromTransferURLData(dataTransfer);\n    } catch (e) {\n      // nope nope nope (probably IE trouble)\n    }\n    return links;\n  };\n  var getLinksFromTransferURLData = function getLinksFromTransferURLData(dataTransfer) {\n    var data = dataTransfer.getData('url');\n    if (typeof data === 'string' && data.length) {\n      return [data];\n    }\n    return [];\n  };\n  var getLinksFromTransferMetaData = function getLinksFromTransferMetaData(dataTransfer) {\n    var data = dataTransfer.getData('text/html');\n    if (typeof data === 'string' && data.length) {\n      var matches = data.match(/src\\s*=\\s*\"(.+?)\"/);\n      if (matches) {\n        return [matches[1]];\n      }\n    }\n    return [];\n  };\n  var dragNDropObservers = [];\n  var eventPosition = function eventPosition(e) {\n    return {\n      pageLeft: e.pageX,\n      pageTop: e.pageY,\n      scopeLeft: e.offsetX || e.layerX,\n      scopeTop: e.offsetY || e.layerY\n    };\n  };\n  var createDragNDropClient = function createDragNDropClient(element, scopeToObserve, filterElement) {\n    var observer = getDragNDropObserver(scopeToObserve);\n    var client = {\n      element: element,\n      filterElement: filterElement,\n      state: null,\n      ondrop: function ondrop() {},\n      onenter: function onenter() {},\n      ondrag: function ondrag() {},\n      onexit: function onexit() {},\n      onload: function onload() {},\n      allowdrop: function allowdrop() {}\n    };\n    client.destroy = observer.addListener(client);\n    return client;\n  };\n  var getDragNDropObserver = function getDragNDropObserver(element) {\n    // see if already exists, if so, return\n    var observer = dragNDropObservers.find(function (item) {\n      return item.element === element;\n    });\n    if (observer) {\n      return observer;\n    }\n\n    // create new observer, does not yet exist for this element\n    var newObserver = createDragNDropObserver(element);\n    dragNDropObservers.push(newObserver);\n    return newObserver;\n  };\n  var createDragNDropObserver = function createDragNDropObserver(element) {\n    var clients = [];\n    var routes = {\n      dragenter: dragenter,\n      dragover: dragover,\n      dragleave: dragleave,\n      drop: drop\n    };\n    var handlers = {};\n    forin(routes, function (event, createHandler) {\n      handlers[event] = createHandler(element, clients);\n      element.addEventListener(event, handlers[event], false);\n    });\n    var observer = {\n      element: element,\n      addListener: function addListener(client) {\n        // add as client\n        clients.push(client);\n\n        // return removeListener function\n        return function () {\n          // remove client\n          clients.splice(clients.indexOf(client), 1);\n\n          // if no more clients, clean up observer\n          if (clients.length === 0) {\n            dragNDropObservers.splice(dragNDropObservers.indexOf(observer), 1);\n            forin(routes, function (event) {\n              element.removeEventListener(event, handlers[event], false);\n            });\n          }\n        };\n      }\n    };\n    return observer;\n  };\n  var elementFromPoint = function elementFromPoint(root, point) {\n    if (!('elementFromPoint' in root)) {\n      root = document;\n    }\n    return root.elementFromPoint(point.x, point.y);\n  };\n  var isEventTarget = function isEventTarget(e, target) {\n    // get root\n    var root = getRootNode(target);\n\n    // get element at position\n    // if root is not actual shadow DOM and does not have elementFromPoint method, use the one on document\n    var elementAtPosition = elementFromPoint(root, {\n      x: e.pageX - window.pageXOffset,\n      y: e.pageY - window.pageYOffset\n    });\n\n    // test if target is the element or if one of its children is\n    return elementAtPosition === target || target.contains(elementAtPosition);\n  };\n  var initialTarget = null;\n  var setDropEffect = function setDropEffect(dataTransfer, effect) {\n    // is in try catch as IE11 will throw error if not\n    try {\n      dataTransfer.dropEffect = effect;\n    } catch (e) {}\n  };\n  var dragenter = function dragenter(root, clients) {\n    return function (e) {\n      e.preventDefault();\n      initialTarget = e.target;\n      clients.forEach(function (client) {\n        var element = client.element,\n          onenter = client.onenter;\n        if (isEventTarget(e, element)) {\n          client.state = 'enter';\n\n          // fire enter event\n          onenter(eventPosition(e));\n        }\n      });\n    };\n  };\n  var dragover = function dragover(root, clients) {\n    return function (e) {\n      e.preventDefault();\n      var dataTransfer = e.dataTransfer;\n      requestDataTransferItems(dataTransfer).then(function (items) {\n        var overDropTarget = false;\n        clients.some(function (client) {\n          var filterElement = client.filterElement,\n            element = client.element,\n            onenter = client.onenter,\n            onexit = client.onexit,\n            ondrag = client.ondrag,\n            allowdrop = client.allowdrop;\n\n          // by default we can drop\n          setDropEffect(dataTransfer, 'copy');\n\n          // allow transfer of these items\n          var allowsTransfer = allowdrop(items);\n\n          // only used when can be dropped on page\n          if (!allowsTransfer) {\n            setDropEffect(dataTransfer, 'none');\n            return;\n          }\n\n          // targetting this client\n          if (isEventTarget(e, element)) {\n            overDropTarget = true;\n\n            // had no previous state, means we are entering this client\n            if (client.state === null) {\n              client.state = 'enter';\n              onenter(eventPosition(e));\n              return;\n            }\n\n            // now over element (no matter if it allows the drop or not)\n            client.state = 'over';\n\n            // needs to allow transfer\n            if (filterElement && !allowsTransfer) {\n              setDropEffect(dataTransfer, 'none');\n              return;\n            }\n\n            // dragging\n            ondrag(eventPosition(e));\n          } else {\n            // should be over an element to drop\n            if (filterElement && !overDropTarget) {\n              setDropEffect(dataTransfer, 'none');\n            }\n\n            // might have just left this client?\n            if (client.state) {\n              client.state = null;\n              onexit(eventPosition(e));\n            }\n          }\n        });\n      });\n    };\n  };\n  var drop = function drop(root, clients) {\n    return function (e) {\n      e.preventDefault();\n      var dataTransfer = e.dataTransfer;\n      requestDataTransferItems(dataTransfer).then(function (items) {\n        clients.forEach(function (client) {\n          var filterElement = client.filterElement,\n            element = client.element,\n            ondrop = client.ondrop,\n            onexit = client.onexit,\n            allowdrop = client.allowdrop;\n          client.state = null;\n\n          // if we're filtering on element we need to be over the element to drop\n          if (filterElement && !isEventTarget(e, element)) return;\n\n          // no transfer for this client\n          if (!allowdrop(items)) return onexit(eventPosition(e));\n\n          // we can drop these items on this client\n          ondrop(eventPosition(e), items);\n        });\n      });\n    };\n  };\n  var dragleave = function dragleave(root, clients) {\n    return function (e) {\n      if (initialTarget !== e.target) {\n        return;\n      }\n      clients.forEach(function (client) {\n        var onexit = client.onexit;\n        client.state = null;\n        onexit(eventPosition(e));\n      });\n    };\n  };\n  var createHopper = function createHopper(scope, validateItems, options) {\n    // is now hopper scope\n    scope.classList.add('filepond--hopper');\n\n    // shortcuts\n    var catchesDropsOnPage = options.catchesDropsOnPage,\n      requiresDropOnElement = options.requiresDropOnElement,\n      _options$filterItems = options.filterItems,\n      filterItems = _options$filterItems === void 0 ? function (items) {\n        return items;\n      } : _options$filterItems;\n\n    // create a dnd client\n    var client = createDragNDropClient(scope, catchesDropsOnPage ? document.documentElement : scope, requiresDropOnElement);\n\n    // current client state\n    var lastState = '';\n    var currentState = '';\n\n    // determines if a file may be dropped\n    client.allowdrop = function (items) {\n      // TODO: if we can, throw error to indicate the items cannot by dropped\n\n      return validateItems(filterItems(items));\n    };\n    client.ondrop = function (position, items) {\n      var filteredItems = filterItems(items);\n      if (!validateItems(filteredItems)) {\n        api.ondragend(position);\n        return;\n      }\n      currentState = 'drag-drop';\n      api.onload(filteredItems, position);\n    };\n    client.ondrag = function (position) {\n      api.ondrag(position);\n    };\n    client.onenter = function (position) {\n      currentState = 'drag-over';\n      api.ondragstart(position);\n    };\n    client.onexit = function (position) {\n      currentState = 'drag-exit';\n      api.ondragend(position);\n    };\n    var api = {\n      updateHopperState: function updateHopperState() {\n        if (lastState !== currentState) {\n          scope.dataset.hopperState = currentState;\n          lastState = currentState;\n        }\n      },\n      onload: function onload() {},\n      ondragstart: function ondragstart() {},\n      ondrag: function ondrag() {},\n      ondragend: function ondragend() {},\n      destroy: function destroy() {\n        // destroy client\n        client.destroy();\n      }\n    };\n    return api;\n  };\n  var listening = false;\n  var listeners$1 = [];\n  var handlePaste = function handlePaste(e) {\n    // if is pasting in input or textarea and the target is outside of a filepond scope, ignore\n    var activeEl = document.activeElement;\n    if (activeEl && /textarea|input/i.test(activeEl.nodeName)) {\n      // test textarea or input is contained in filepond root\n      var inScope = false;\n      var element = activeEl;\n      while (element !== document.body) {\n        if (element.classList.contains('filepond--root')) {\n          inScope = true;\n          break;\n        }\n        element = element.parentNode;\n      }\n      if (!inScope) return;\n    }\n    requestDataTransferItems(e.clipboardData).then(function (files) {\n      // no files received\n      if (!files.length) {\n        return;\n      }\n\n      // notify listeners of received files\n      listeners$1.forEach(function (listener) {\n        return listener(files);\n      });\n    });\n  };\n  var listen = function listen(cb) {\n    // can't add twice\n    if (listeners$1.includes(cb)) {\n      return;\n    }\n\n    // add initial listener\n    listeners$1.push(cb);\n\n    // setup paste listener for entire page\n    if (listening) {\n      return;\n    }\n    listening = true;\n    document.addEventListener('paste', handlePaste);\n  };\n  var unlisten = function unlisten(listener) {\n    arrayRemove(listeners$1, listeners$1.indexOf(listener));\n\n    // clean up\n    if (listeners$1.length === 0) {\n      document.removeEventListener('paste', handlePaste);\n      listening = false;\n    }\n  };\n  var createPaster = function createPaster() {\n    var cb = function cb(files) {\n      api.onload(files);\n    };\n    var api = {\n      destroy: function destroy() {\n        unlisten(cb);\n      },\n      onload: function onload() {}\n    };\n    listen(cb);\n    return api;\n  };\n\n  /**\n   * Creates the file view\n   */\n  var create$d = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n    root.element.id = 'filepond--assistant-' + props.id;\n    attr(root.element, 'role', 'status');\n    attr(root.element, 'aria-live', 'polite');\n    attr(root.element, 'aria-relevant', 'additions');\n  };\n  var addFilesNotificationTimeout = null;\n  var notificationClearTimeout = null;\n  var filenames = [];\n  var assist = function assist(root, message) {\n    root.element.textContent = message;\n  };\n  var clear$1 = function clear(root) {\n    root.element.textContent = '';\n  };\n  var listModified = function listModified(root, filename, label) {\n    var total = root.query('GET_TOTAL_ITEMS');\n    assist(root, label + ' ' + filename + ', ' + total + ' ' + (total === 1 ? root.query('GET_LABEL_FILE_COUNT_SINGULAR') : root.query('GET_LABEL_FILE_COUNT_PLURAL')));\n\n    // clear group after set amount of time so the status is not read twice\n    clearTimeout(notificationClearTimeout);\n    notificationClearTimeout = setTimeout(function () {\n      clear$1(root);\n    }, 1500);\n  };\n  var isUsingFilePond = function isUsingFilePond(root) {\n    return root.element.parentNode.contains(document.activeElement);\n  };\n  var itemAdded = function itemAdded(_ref2) {\n    var root = _ref2.root,\n      action = _ref2.action;\n    if (!isUsingFilePond(root)) {\n      return;\n    }\n    root.element.textContent = '';\n    var item = root.query('GET_ITEM', action.id);\n    filenames.push(item.filename);\n    clearTimeout(addFilesNotificationTimeout);\n    addFilesNotificationTimeout = setTimeout(function () {\n      listModified(root, filenames.join(', '), root.query('GET_LABEL_FILE_ADDED'));\n      filenames.length = 0;\n    }, 750);\n  };\n  var itemRemoved = function itemRemoved(_ref3) {\n    var root = _ref3.root,\n      action = _ref3.action;\n    if (!isUsingFilePond(root)) {\n      return;\n    }\n    var item = action.item;\n    listModified(root, item.filename, root.query('GET_LABEL_FILE_REMOVED'));\n  };\n  var itemProcessed = function itemProcessed(_ref4) {\n    var root = _ref4.root,\n      action = _ref4.action;\n    // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n    var item = root.query('GET_ITEM', action.id);\n    var filename = item.filename;\n    var label = root.query('GET_LABEL_FILE_PROCESSING_COMPLETE');\n    assist(root, filename + ' ' + label);\n  };\n  var itemProcessedUndo = function itemProcessedUndo(_ref5) {\n    var root = _ref5.root,\n      action = _ref5.action;\n    var item = root.query('GET_ITEM', action.id);\n    var filename = item.filename;\n    var label = root.query('GET_LABEL_FILE_PROCESSING_ABORTED');\n    assist(root, filename + ' ' + label);\n  };\n  var itemError = function itemError(_ref6) {\n    var root = _ref6.root,\n      action = _ref6.action;\n    var item = root.query('GET_ITEM', action.id);\n    var filename = item.filename;\n\n    // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n    assist(root, action.status.main + ' ' + filename + ' ' + action.status.sub);\n  };\n  var assistant = createView({\n    create: create$d,\n    ignoreRect: true,\n    ignoreRectUpdate: true,\n    write: createRoute({\n      DID_LOAD_ITEM: itemAdded,\n      DID_REMOVE_ITEM: itemRemoved,\n      DID_COMPLETE_ITEM_PROCESSING: itemProcessed,\n      DID_ABORT_ITEM_PROCESSING: itemProcessedUndo,\n      DID_REVERT_ITEM_PROCESSING: itemProcessedUndo,\n      DID_THROW_ITEM_REMOVE_ERROR: itemError,\n      DID_THROW_ITEM_LOAD_ERROR: itemError,\n      DID_THROW_ITEM_INVALID: itemError,\n      DID_THROW_ITEM_PROCESSING_ERROR: itemError\n    }),\n    tag: 'span',\n    name: 'assistant'\n  });\n  var toCamels = function toCamels(string) {\n    var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n    return string.replace(new RegExp(separator + '.', 'g'), function (sub) {\n      return sub.charAt(1).toUpperCase();\n    });\n  };\n  var debounce = function debounce(func) {\n    var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n    var immidiateOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    var last = Date.now();\n    var timeout = null;\n    return function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      clearTimeout(timeout);\n      var dist = Date.now() - last;\n      var fn = function fn() {\n        last = Date.now();\n        func.apply(void 0, args);\n      };\n      if (dist < interval) {\n        // we need to delay by the difference between interval and dist\n        // for example: if distance is 10 ms and interval is 16 ms,\n        // we need to wait an additional 6ms before calling the function)\n        if (!immidiateOnly) {\n          timeout = setTimeout(fn, interval - dist);\n        }\n      } else {\n        // go!\n        fn();\n      }\n    };\n  };\n  var MAX_FILES_LIMIT = 1000000;\n  var prevent = function prevent(e) {\n    return e.preventDefault();\n  };\n  var create$e = function create(_ref) {\n    var root = _ref.root,\n      props = _ref.props;\n    // Add id\n    var id = root.query('GET_ID');\n    if (id) {\n      root.element.id = id;\n    }\n\n    // Add className\n    var className = root.query('GET_CLASS_NAME');\n    if (className) {\n      className.split(' ').filter(function (name) {\n        return name.length;\n      }).forEach(function (name) {\n        root.element.classList.add(name);\n      });\n    }\n\n    // Field label\n    root.ref.label = root.appendChildView(root.createChildView(dropLabel, Object.assign({}, props, {\n      translateY: null,\n      caption: root.query('GET_LABEL_IDLE')\n    })));\n\n    // List of items\n    root.ref.list = root.appendChildView(root.createChildView(listScroller, {\n      translateY: null\n    }));\n\n    // Background panel\n    root.ref.panel = root.appendChildView(root.createChildView(panel, {\n      name: 'panel-root'\n    }));\n\n    // Assistant notifies assistive tech when content changes\n    root.ref.assistant = root.appendChildView(root.createChildView(assistant, Object.assign({}, props)));\n\n    // Data\n    root.ref.data = root.appendChildView(root.createChildView(data, Object.assign({}, props)));\n\n    // Measure (tests if fixed height was set)\n    // DOCTYPE needs to be set for this to work\n    root.ref.measure = createElement$1('div');\n    root.ref.measure.style.height = '100%';\n    root.element.appendChild(root.ref.measure);\n\n    // information on the root height or fixed height status\n    root.ref.bounds = null;\n\n    // apply initial style properties\n    root.query('GET_STYLES').filter(function (style) {\n      return !isEmpty(style.value);\n    }).map(function (_ref2) {\n      var name = _ref2.name,\n        value = _ref2.value;\n      root.element.dataset[name] = value;\n    });\n\n    // determine if width changed\n    root.ref.widthPrevious = null;\n    root.ref.widthUpdated = debounce(function () {\n      root.ref.updateHistory = [];\n      root.dispatch('DID_RESIZE_ROOT');\n    }, 250);\n\n    // history of updates\n    root.ref.previousAspectRatio = null;\n    root.ref.updateHistory = [];\n\n    // prevent scrolling and zooming on iOS (only if supports pointer events, for then we can enable reorder)\n    var canHover = window.matchMedia('(pointer: fine) and (hover: hover)').matches;\n    var hasPointerEvents = ('PointerEvent' in window);\n    if (root.query('GET_ALLOW_REORDER') && hasPointerEvents && !canHover) {\n      root.element.addEventListener('touchmove', prevent, {\n        passive: false\n      });\n      root.element.addEventListener('gesturestart', prevent);\n    }\n\n    // add credits\n    var credits = root.query('GET_CREDITS');\n    var hasCredits = credits.length === 2;\n    if (hasCredits) {\n      var frag = document.createElement('a');\n      frag.className = 'filepond--credits';\n      frag.setAttribute('aria-hidden', 'true');\n      frag.href = credits[0];\n      frag.tabindex = -1;\n      frag.target = '_blank';\n      frag.rel = 'noopener noreferrer';\n      frag.textContent = credits[1];\n      root.element.appendChild(frag);\n      root.ref.credits = frag;\n    }\n  };\n  var write$9 = function write(_ref3) {\n    var root = _ref3.root,\n      props = _ref3.props,\n      actions = _ref3.actions;\n    // route actions\n    route$5({\n      root: root,\n      props: props,\n      actions: actions\n    });\n\n    // apply style properties\n    actions.filter(function (action) {\n      return /^DID_SET_STYLE_/.test(action.type);\n    }).filter(function (action) {\n      return !isEmpty(action.data.value);\n    }).map(function (_ref4) {\n      var type = _ref4.type,\n        data = _ref4.data;\n      var name = toCamels(type.substring(8).toLowerCase(), '_');\n      root.element.dataset[name] = data.value;\n      root.invalidateLayout();\n    });\n    if (root.rect.element.hidden) return;\n    if (root.rect.element.width !== root.ref.widthPrevious) {\n      root.ref.widthPrevious = root.rect.element.width;\n      root.ref.widthUpdated();\n    }\n\n    // get box bounds, we do this only once\n    var bounds = root.ref.bounds;\n    if (!bounds) {\n      bounds = root.ref.bounds = calculateRootBoundingBoxHeight(root);\n\n      // destroy measure element\n      root.element.removeChild(root.ref.measure);\n      root.ref.measure = null;\n    }\n\n    // get quick references to various high level parts of the upload tool\n    var _root$ref = root.ref,\n      hopper = _root$ref.hopper,\n      label = _root$ref.label,\n      list = _root$ref.list,\n      panel = _root$ref.panel;\n\n    // sets correct state to hopper scope\n    if (hopper) {\n      hopper.updateHopperState();\n    }\n\n    // bool to indicate if we're full or not\n    var aspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n    var isMultiItem = root.query('GET_ALLOW_MULTIPLE');\n    var totalItems = root.query('GET_TOTAL_ITEMS');\n    var maxItems = isMultiItem ? root.query('GET_MAX_FILES') || MAX_FILES_LIMIT : 1;\n    var atMaxCapacity = totalItems === maxItems;\n\n    // action used to add item\n    var addAction = actions.find(function (action) {\n      return action.type === 'DID_ADD_ITEM';\n    });\n\n    // if reached max capacity and we've just reached it\n    if (atMaxCapacity && addAction) {\n      // get interaction type\n      var interactionMethod = addAction.data.interactionMethod;\n\n      // hide label\n      label.opacity = 0;\n      if (isMultiItem) {\n        label.translateY = -40;\n      } else {\n        if (interactionMethod === InteractionMethod.API) {\n          label.translateX = 40;\n        } else if (interactionMethod === InteractionMethod.BROWSE) {\n          label.translateY = 40;\n        } else {\n          label.translateY = 30;\n        }\n      }\n    } else if (!atMaxCapacity) {\n      label.opacity = 1;\n      label.translateX = 0;\n      label.translateY = 0;\n    }\n    var listItemMargin = calculateListItemMargin(root);\n    var listHeight = calculateListHeight(root);\n    var labelHeight = label.rect.element.height;\n    var currentLabelHeight = !isMultiItem || atMaxCapacity ? 0 : labelHeight;\n    var listMarginTop = atMaxCapacity ? list.rect.element.marginTop : 0;\n    var listMarginBottom = totalItems === 0 ? 0 : list.rect.element.marginBottom;\n    var visualHeight = currentLabelHeight + listMarginTop + listHeight.visual + listMarginBottom;\n    var boundsHeight = currentLabelHeight + listMarginTop + listHeight.bounds + listMarginBottom;\n\n    // link list to label bottom position\n    list.translateY = Math.max(0, currentLabelHeight - list.rect.element.marginTop) - listItemMargin.top;\n    if (aspectRatio) {\n      // fixed aspect ratio\n\n      // calculate height based on width\n      var width = root.rect.element.width;\n      var height = width * aspectRatio;\n\n      // clear history if aspect ratio has changed\n      if (aspectRatio !== root.ref.previousAspectRatio) {\n        root.ref.previousAspectRatio = aspectRatio;\n        root.ref.updateHistory = [];\n      }\n\n      // remember this width\n      var history = root.ref.updateHistory;\n      history.push(width);\n      var MAX_BOUNCES = 2;\n      if (history.length > MAX_BOUNCES * 2) {\n        var l = history.length;\n        var bottom = l - 10;\n        var bounces = 0;\n        for (var i = l; i >= bottom; i--) {\n          if (history[i] === history[i - 2]) {\n            bounces++;\n          }\n          if (bounces >= MAX_BOUNCES) {\n            // dont adjust height\n            return;\n          }\n        }\n      }\n\n      // fix height of panel so it adheres to aspect ratio\n      panel.scalable = false;\n      panel.height = height;\n\n      // available height for list\n      var listAvailableHeight =\n      // the height of the panel minus the label height\n      height - currentLabelHeight - (\n      // the room we leave open between the end of the list and the panel bottom\n      listMarginBottom - listItemMargin.bottom) - (\n      // if we're full we need to leave some room between the top of the panel and the list\n      atMaxCapacity ? listMarginTop : 0);\n      if (listHeight.visual > listAvailableHeight) {\n        list.overflow = listAvailableHeight;\n      } else {\n        list.overflow = null;\n      }\n\n      // set container bounds (so pushes siblings downwards)\n      root.height = height;\n    } else if (bounds.fixedHeight) {\n      // fixed height\n\n      // fix height of panel\n      panel.scalable = false;\n\n      // available height for list\n      var _listAvailableHeight =\n      // the height of the panel minus the label height\n      bounds.fixedHeight - currentLabelHeight - (\n      // the room we leave open between the end of the list and the panel bottom\n      listMarginBottom - listItemMargin.bottom) - (\n      // if we're full we need to leave some room between the top of the panel and the list\n      atMaxCapacity ? listMarginTop : 0);\n\n      // set list height\n      if (listHeight.visual > _listAvailableHeight) {\n        list.overflow = _listAvailableHeight;\n      } else {\n        list.overflow = null;\n      }\n\n      // no need to set container bounds as these are handles by CSS fixed height\n    } else if (bounds.cappedHeight) {\n      // max-height\n\n      // not a fixed height panel\n      var isCappedHeight = visualHeight >= bounds.cappedHeight;\n      var panelHeight = Math.min(bounds.cappedHeight, visualHeight);\n      panel.scalable = true;\n      panel.height = isCappedHeight ? panelHeight : panelHeight - listItemMargin.top - listItemMargin.bottom;\n\n      // available height for list\n      var _listAvailableHeight2 =\n      // the height of the panel minus the label height\n      panelHeight - currentLabelHeight - (\n      // the room we leave open between the end of the list and the panel bottom\n      listMarginBottom - listItemMargin.bottom) - (\n      // if we're full we need to leave some room between the top of the panel and the list\n      atMaxCapacity ? listMarginTop : 0);\n\n      // set list height (if is overflowing)\n      if (visualHeight > bounds.cappedHeight && listHeight.visual > _listAvailableHeight2) {\n        list.overflow = _listAvailableHeight2;\n      } else {\n        list.overflow = null;\n      }\n\n      // set container bounds (so pushes siblings downwards)\n      root.height = Math.min(bounds.cappedHeight, boundsHeight - listItemMargin.top - listItemMargin.bottom);\n    } else {\n      // flexible height\n\n      // not a fixed height panel\n      var itemMargin = totalItems > 0 ? listItemMargin.top + listItemMargin.bottom : 0;\n      panel.scalable = true;\n      panel.height = Math.max(labelHeight, visualHeight - itemMargin);\n\n      // set container bounds (so pushes siblings downwards)\n      root.height = Math.max(labelHeight, boundsHeight - itemMargin);\n    }\n\n    // move credits to bottom\n    if (root.ref.credits && panel.heightCurrent) root.ref.credits.style.transform = 'translateY(' + panel.heightCurrent + 'px)';\n  };\n  var calculateListItemMargin = function calculateListItemMargin(root) {\n    var item = root.ref.list.childViews[0].childViews[0];\n    return item ? {\n      top: item.rect.element.marginTop,\n      bottom: item.rect.element.marginBottom\n    } : {\n      top: 0,\n      bottom: 0\n    };\n  };\n  var calculateListHeight = function calculateListHeight(root) {\n    var visual = 0;\n    var bounds = 0;\n\n    // get file list reference\n    var scrollList = root.ref.list;\n    var itemList = scrollList.childViews[0];\n    var visibleChildren = itemList.childViews.filter(function (child) {\n      return child.rect.element.height;\n    });\n    var children = root.query('GET_ACTIVE_ITEMS').map(function (item) {\n      return visibleChildren.find(function (child) {\n        return child.id === item.id;\n      });\n    }).filter(function (item) {\n      return item;\n    });\n\n    // no children, done!\n    if (children.length === 0) return {\n      visual: visual,\n      bounds: bounds\n    };\n    var horizontalSpace = itemList.rect.element.width;\n    var dragIndex = getItemIndexByPosition(itemList, children, scrollList.dragCoordinates);\n    var childRect = children[0].rect.element;\n    var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n    var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n    var itemWidth = childRect.width + itemHorizontalMargin;\n    var itemHeight = childRect.height + itemVerticalMargin;\n    var newItem = typeof dragIndex !== 'undefined' && dragIndex >= 0 ? 1 : 0;\n    var removedItem = children.find(function (child) {\n      return child.markedForRemoval && child.opacity < 0.45;\n    }) ? -1 : 0;\n    var verticalItemCount = children.length + newItem + removedItem;\n    var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n    // stack\n    if (itemsPerRow === 1) {\n      children.forEach(function (item) {\n        var height = item.rect.element.height + itemVerticalMargin;\n        bounds += height;\n        visual += height * item.opacity;\n      });\n    }\n    // grid\n    else {\n      bounds = Math.ceil(verticalItemCount / itemsPerRow) * itemHeight;\n      visual = bounds;\n    }\n    return {\n      visual: visual,\n      bounds: bounds\n    };\n  };\n  var calculateRootBoundingBoxHeight = function calculateRootBoundingBoxHeight(root) {\n    var height = root.ref.measureHeight || null;\n    var cappedHeight = parseInt(root.style.maxHeight, 10) || null;\n    var fixedHeight = height === 0 ? null : height;\n    return {\n      cappedHeight: cappedHeight,\n      fixedHeight: fixedHeight\n    };\n  };\n  var exceedsMaxFiles = function exceedsMaxFiles(root, items) {\n    var allowReplace = root.query('GET_ALLOW_REPLACE');\n    var allowMultiple = root.query('GET_ALLOW_MULTIPLE');\n    var totalItems = root.query('GET_TOTAL_ITEMS');\n    var maxItems = root.query('GET_MAX_FILES');\n\n    // total amount of items being dragged\n    var totalBrowseItems = items.length;\n\n    // if does not allow multiple items and dragging more than one item\n    if (!allowMultiple && totalBrowseItems > 1) {\n      root.dispatch('DID_THROW_MAX_FILES', {\n        source: items,\n        error: createResponse('warning', 0, 'Max files')\n      });\n      return true;\n    }\n\n    // limit max items to one if not allowed to drop multiple items\n    maxItems = allowMultiple ? maxItems : 1;\n    if (!allowMultiple && allowReplace) {\n      // There is only one item, so there is room to replace or add an item\n      return false;\n    }\n\n    // no more room?\n    var hasMaxItems = isInt(maxItems);\n    if (hasMaxItems && totalItems + totalBrowseItems > maxItems) {\n      root.dispatch('DID_THROW_MAX_FILES', {\n        source: items,\n        error: createResponse('warning', 0, 'Max files')\n      });\n      return true;\n    }\n    return false;\n  };\n  var getDragIndex = function getDragIndex(list, children, position) {\n    var itemList = list.childViews[0];\n    return getItemIndexByPosition(itemList, children, {\n      left: position.scopeLeft - itemList.rect.element.left,\n      top: position.scopeTop - (list.rect.outer.top + list.rect.element.marginTop + list.rect.element.scrollTop)\n    });\n  };\n\n  /**\n   * Enable or disable file drop functionality\n   */\n  var toggleDrop = function toggleDrop(root) {\n    var isAllowed = root.query('GET_ALLOW_DROP');\n    var isDisabled = root.query('GET_DISABLED');\n    var enabled = isAllowed && !isDisabled;\n    if (enabled && !root.ref.hopper) {\n      var hopper = createHopper(root.element, function (items) {\n        // allow quick validation of dropped items\n        var beforeDropFile = root.query('GET_BEFORE_DROP_FILE') || function () {\n          return true;\n        };\n\n        // all items should be validated by all filters as valid\n        var dropValidation = root.query('GET_DROP_VALIDATION');\n        return dropValidation ? items.every(function (item) {\n          return applyFilters('ALLOW_HOPPER_ITEM', item, {\n            query: root.query\n          }).every(function (result) {\n            return result === true;\n          }) && beforeDropFile(item);\n        }) : true;\n      }, {\n        filterItems: function filterItems(items) {\n          var ignoredFiles = root.query('GET_IGNORED_FILES');\n          return items.filter(function (item) {\n            if (isFile(item)) {\n              return !ignoredFiles.includes(item.name.toLowerCase());\n            }\n            return true;\n          });\n        },\n        catchesDropsOnPage: root.query('GET_DROP_ON_PAGE'),\n        requiresDropOnElement: root.query('GET_DROP_ON_ELEMENT')\n      });\n      hopper.onload = function (items, position) {\n        // get item children elements and sort based on list sort\n        var list = root.ref.list.childViews[0];\n        var visibleChildren = list.childViews.filter(function (child) {\n          return child.rect.element.height;\n        });\n        var children = root.query('GET_ACTIVE_ITEMS').map(function (item) {\n          return visibleChildren.find(function (child) {\n            return child.id === item.id;\n          });\n        }).filter(function (item) {\n          return item;\n        });\n        applyFilterChain('ADD_ITEMS', items, {\n          dispatch: root.dispatch\n        }).then(function (queue) {\n          // these files don't fit so stop here\n          if (exceedsMaxFiles(root, queue)) return false;\n\n          // go\n          root.dispatch('ADD_ITEMS', {\n            items: queue,\n            index: getDragIndex(root.ref.list, children, position),\n            interactionMethod: InteractionMethod.DROP\n          });\n        });\n        root.dispatch('DID_DROP', {\n          position: position\n        });\n        root.dispatch('DID_END_DRAG', {\n          position: position\n        });\n      };\n      hopper.ondragstart = function (position) {\n        root.dispatch('DID_START_DRAG', {\n          position: position\n        });\n      };\n      hopper.ondrag = debounce(function (position) {\n        root.dispatch('DID_DRAG', {\n          position: position\n        });\n      });\n      hopper.ondragend = function (position) {\n        root.dispatch('DID_END_DRAG', {\n          position: position\n        });\n      };\n      root.ref.hopper = hopper;\n      root.ref.drip = root.appendChildView(root.createChildView(drip));\n    } else if (!enabled && root.ref.hopper) {\n      root.ref.hopper.destroy();\n      root.ref.hopper = null;\n      root.removeChildView(root.ref.drip);\n    }\n  };\n\n  /**\n   * Enable or disable browse functionality\n   */\n  var toggleBrowse = function toggleBrowse(root, props) {\n    var isAllowed = root.query('GET_ALLOW_BROWSE');\n    var isDisabled = root.query('GET_DISABLED');\n    var enabled = isAllowed && !isDisabled;\n    if (enabled && !root.ref.browser) {\n      root.ref.browser = root.appendChildView(root.createChildView(browser, Object.assign({}, props, {\n        onload: function onload(items) {\n          applyFilterChain('ADD_ITEMS', items, {\n            dispatch: root.dispatch\n          }).then(function (queue) {\n            // these files don't fit so stop here\n            if (exceedsMaxFiles(root, queue)) return false;\n\n            // add items!\n            root.dispatch('ADD_ITEMS', {\n              items: queue,\n              index: -1,\n              interactionMethod: InteractionMethod.BROWSE\n            });\n          });\n        }\n      })), 0);\n    } else if (!enabled && root.ref.browser) {\n      root.removeChildView(root.ref.browser);\n      root.ref.browser = null;\n    }\n  };\n\n  /**\n   * Enable or disable paste functionality\n   */\n  var togglePaste = function togglePaste(root) {\n    var isAllowed = root.query('GET_ALLOW_PASTE');\n    var isDisabled = root.query('GET_DISABLED');\n    var enabled = isAllowed && !isDisabled;\n    if (enabled && !root.ref.paster) {\n      root.ref.paster = createPaster();\n      root.ref.paster.onload = function (items) {\n        applyFilterChain('ADD_ITEMS', items, {\n          dispatch: root.dispatch\n        }).then(function (queue) {\n          // these files don't fit so stop here\n          if (exceedsMaxFiles(root, queue)) return false;\n\n          // add items!\n          root.dispatch('ADD_ITEMS', {\n            items: queue,\n            index: -1,\n            interactionMethod: InteractionMethod.PASTE\n          });\n        });\n      };\n    } else if (!enabled && root.ref.paster) {\n      root.ref.paster.destroy();\n      root.ref.paster = null;\n    }\n  };\n\n  /**\n   * Route actions\n   */\n  var route$5 = createRoute({\n    DID_SET_ALLOW_BROWSE: function DID_SET_ALLOW_BROWSE(_ref5) {\n      var root = _ref5.root,\n        props = _ref5.props;\n      toggleBrowse(root, props);\n    },\n    DID_SET_ALLOW_DROP: function DID_SET_ALLOW_DROP(_ref6) {\n      var root = _ref6.root;\n      toggleDrop(root);\n    },\n    DID_SET_ALLOW_PASTE: function DID_SET_ALLOW_PASTE(_ref7) {\n      var root = _ref7.root;\n      togglePaste(root);\n    },\n    DID_SET_DISABLED: function DID_SET_DISABLED(_ref8) {\n      var root = _ref8.root,\n        props = _ref8.props;\n      toggleDrop(root);\n      togglePaste(root);\n      toggleBrowse(root, props);\n      var isDisabled = root.query('GET_DISABLED');\n      if (isDisabled) {\n        root.element.dataset.disabled = 'disabled';\n      } else {\n        // delete root.element.dataset.disabled; <= this does not work on iOS 10\n        root.element.removeAttribute('data-disabled');\n      }\n    }\n  });\n  var root = createView({\n    name: 'root',\n    read: function read(_ref9) {\n      var root = _ref9.root;\n      if (root.ref.measure) {\n        root.ref.measureHeight = root.ref.measure.offsetHeight;\n      }\n    },\n    create: create$e,\n    write: write$9,\n    destroy: function destroy(_ref10) {\n      var root = _ref10.root;\n      if (root.ref.paster) {\n        root.ref.paster.destroy();\n      }\n      if (root.ref.hopper) {\n        root.ref.hopper.destroy();\n      }\n      root.element.removeEventListener('touchmove', prevent);\n      root.element.removeEventListener('gesturestart', prevent);\n    },\n    mixins: {\n      styles: ['height']\n    }\n  });\n\n  // creates the app\n  var createApp = function createApp() {\n    var initialOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // let element\n    var originalElement = null;\n\n    // get default options\n    var defaultOptions = getOptions();\n\n    // create the data store, this will contain all our app info\n    var store = createStore(\n    // initial state (should be serializable)\n    createInitialState(defaultOptions),\n    // queries\n    [queries, createOptionQueries(defaultOptions)],\n    // action handlers\n    [actions, createOptionActions(defaultOptions)]);\n\n    // set initial options\n    store.dispatch('SET_OPTIONS', {\n      options: initialOptions\n    });\n\n    // kick thread if visibility changes\n    var visibilityHandler = function visibilityHandler() {\n      if (document.hidden) return;\n      store.dispatch('KICK');\n    };\n    document.addEventListener('visibilitychange', visibilityHandler);\n\n    // re-render on window resize start and finish\n    var resizeDoneTimer = null;\n    var isResizing = false;\n    var isResizingHorizontally = false;\n    var initialWindowWidth = null;\n    var currentWindowWidth = null;\n    var resizeHandler = function resizeHandler() {\n      if (!isResizing) {\n        isResizing = true;\n      }\n      clearTimeout(resizeDoneTimer);\n      resizeDoneTimer = setTimeout(function () {\n        isResizing = false;\n        initialWindowWidth = null;\n        currentWindowWidth = null;\n        if (isResizingHorizontally) {\n          isResizingHorizontally = false;\n          store.dispatch('DID_STOP_RESIZE');\n        }\n      }, 500);\n    };\n    window.addEventListener('resize', resizeHandler);\n\n    // render initial view\n    var view = root(store, {\n      id: getUniqueId()\n    });\n\n    //\n    // PRIVATE API -------------------------------------------------------------------------------------\n    //\n    var isResting = false;\n    var isHidden = false;\n    var readWriteApi = {\n      // necessary for update loop\n\n      /**\n       * Reads from dom (never call manually)\n       * @private\n       */\n      _read: function _read() {\n        // test if we're resizing horizontally\n        // TODO: see if we can optimize this by measuring root rect\n        if (isResizing) {\n          currentWindowWidth = window.innerWidth;\n          if (!initialWindowWidth) {\n            initialWindowWidth = currentWindowWidth;\n          }\n          if (!isResizingHorizontally && currentWindowWidth !== initialWindowWidth) {\n            store.dispatch('DID_START_RESIZE');\n            isResizingHorizontally = true;\n          }\n        }\n        if (isHidden && isResting) {\n          // test if is no longer hidden\n          isResting = view.element.offsetParent === null;\n        }\n\n        // if resting, no need to read as numbers will still all be correct\n        if (isResting) return;\n\n        // read view data\n        view._read();\n\n        // if is hidden we need to know so we exit rest mode when revealed\n        isHidden = view.rect.element.hidden;\n      },\n      /**\n       * Writes to dom (never call manually)\n       * @private\n       */\n      _write: function _write(ts) {\n        // get all actions from store\n        var actions = store.processActionQueue()\n\n        // filter out set actions (these will automatically trigger DID_SET)\n        .filter(function (action) {\n          return !/^SET_/.test(action.type);\n        });\n\n        // if was idling and no actions stop here\n        if (isResting && !actions.length) return;\n\n        // some actions might trigger events\n        routeActionsToEvents(actions);\n\n        // update the view\n        isResting = view._write(ts, actions, isResizingHorizontally);\n\n        // will clean up all archived items\n        removeReleasedItems(store.query('GET_ITEMS'));\n\n        // now idling\n        if (isResting) {\n          store.processDispatchQueue();\n        }\n      }\n    };\n\n    //\n    // EXPOSE EVENTS -------------------------------------------------------------------------------------\n    //\n    var createEvent = function createEvent(name) {\n      return function (data) {\n        // create default event\n        var event = {\n          type: name\n        };\n\n        // no data to add\n        if (!data) {\n          return event;\n        }\n\n        // copy relevant props\n        if (data.hasOwnProperty('error')) {\n          event.error = data.error ? Object.assign({}, data.error) : null;\n        }\n        if (data.status) {\n          event.status = Object.assign({}, data.status);\n        }\n        if (data.file) {\n          event.output = data.file;\n        }\n\n        // only source is available, else add item if possible\n        if (data.source) {\n          event.file = data.source;\n        } else if (data.item || data.id) {\n          var item = data.item ? data.item : store.query('GET_ITEM', data.id);\n          event.file = item ? createItemAPI(item) : null;\n        }\n\n        // map all items in a possible items array\n        if (data.items) {\n          event.items = data.items.map(createItemAPI);\n        }\n\n        // if this is a progress event add the progress amount\n        if (/progress/.test(name)) {\n          event.progress = data.progress;\n        }\n\n        // copy relevant props\n        if (data.hasOwnProperty('origin') && data.hasOwnProperty('target')) {\n          event.origin = data.origin;\n          event.target = data.target;\n        }\n        return event;\n      };\n    };\n    var eventRoutes = {\n      DID_DESTROY: createEvent('destroy'),\n      DID_INIT: createEvent('init'),\n      DID_THROW_MAX_FILES: createEvent('warning'),\n      DID_INIT_ITEM: createEvent('initfile'),\n      DID_START_ITEM_LOAD: createEvent('addfilestart'),\n      DID_UPDATE_ITEM_LOAD_PROGRESS: createEvent('addfileprogress'),\n      DID_LOAD_ITEM: createEvent('addfile'),\n      DID_THROW_ITEM_INVALID: [createEvent('error'), createEvent('addfile')],\n      DID_THROW_ITEM_LOAD_ERROR: [createEvent('error'), createEvent('addfile')],\n      DID_THROW_ITEM_REMOVE_ERROR: [createEvent('error'), createEvent('removefile')],\n      DID_PREPARE_OUTPUT: createEvent('preparefile'),\n      DID_START_ITEM_PROCESSING: createEvent('processfilestart'),\n      DID_UPDATE_ITEM_PROCESS_PROGRESS: createEvent('processfileprogress'),\n      DID_ABORT_ITEM_PROCESSING: createEvent('processfileabort'),\n      DID_COMPLETE_ITEM_PROCESSING: createEvent('processfile'),\n      DID_COMPLETE_ITEM_PROCESSING_ALL: createEvent('processfiles'),\n      DID_REVERT_ITEM_PROCESSING: createEvent('processfilerevert'),\n      DID_THROW_ITEM_PROCESSING_ERROR: [createEvent('error'), createEvent('processfile')],\n      DID_REMOVE_ITEM: createEvent('removefile'),\n      DID_UPDATE_ITEMS: createEvent('updatefiles'),\n      DID_ACTIVATE_ITEM: createEvent('activatefile'),\n      DID_REORDER_ITEMS: createEvent('reorderfiles')\n    };\n    var exposeEvent = function exposeEvent(event) {\n      // create event object to be dispatched\n      var detail = Object.assign({\n        pond: exports\n      }, event);\n      delete detail.type;\n      view.element.dispatchEvent(new CustomEvent('FilePond:' + event.type, {\n        // event info\n        detail: detail,\n        // event behaviour\n        bubbles: true,\n        cancelable: true,\n        composed: true // triggers listeners outside of shadow root\n      }));\n\n      // event object to params used for `on()` event handlers and callbacks `oninit()`\n      var params = [];\n\n      // if is possible error event, make it the first param\n      if (event.hasOwnProperty('error')) {\n        params.push(event.error);\n      }\n\n      // file is always section\n      if (event.hasOwnProperty('file')) {\n        params.push(event.file);\n      }\n\n      // append other props\n      var filtered = ['type', 'error', 'file'];\n      Object.keys(event).filter(function (key) {\n        return !filtered.includes(key);\n      }).forEach(function (key) {\n        return params.push(event[key]);\n      });\n\n      // on(type, () => { })\n      exports.fire.apply(exports, [event.type].concat(params));\n\n      // oninit = () => {}\n      var handler = store.query('GET_ON' + event.type.toUpperCase());\n      if (handler) {\n        handler.apply(void 0, params);\n      }\n    };\n    var routeActionsToEvents = function routeActionsToEvents(actions) {\n      if (!actions.length) return;\n      actions.filter(function (action) {\n        return eventRoutes[action.type];\n      }).forEach(function (action) {\n        var routes = eventRoutes[action.type];\n        (Array.isArray(routes) ? routes : [routes]).forEach(function (route) {\n          // this isn't fantastic, but because of the stacking of settimeouts plugins can handle the did_load before the did_init\n          if (action.type === 'DID_INIT_ITEM') {\n            exposeEvent(route(action.data));\n          } else {\n            setTimeout(function () {\n              exposeEvent(route(action.data));\n            }, 0);\n          }\n        });\n      });\n    };\n\n    //\n    // PUBLIC API -------------------------------------------------------------------------------------\n    //\n    var setOptions = function setOptions(options) {\n      return store.dispatch('SET_OPTIONS', {\n        options: options\n      });\n    };\n    var getFile = function getFile(query) {\n      return store.query('GET_ACTIVE_ITEM', query);\n    };\n    var prepareFile = function prepareFile(query) {\n      return new Promise(function (resolve, reject) {\n        store.dispatch('REQUEST_ITEM_PREPARE', {\n          query: query,\n          success: function success(item) {\n            resolve(item);\n          },\n          failure: function failure(error) {\n            reject(error);\n          }\n        });\n      });\n    };\n    var addFile = function addFile(source) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return new Promise(function (resolve, reject) {\n        addFiles([{\n          source: source,\n          options: options\n        }], {\n          index: options.index\n        }).then(function (items) {\n          return resolve(items && items[0]);\n        }).catch(reject);\n      });\n    };\n    var isFilePondFile = function isFilePondFile(obj) {\n      return obj.file && obj.id;\n    };\n    var removeFile = function removeFile(query, options) {\n      // if only passed options\n      if (typeof query === 'object' && !isFilePondFile(query) && !options) {\n        options = query;\n        query = undefined;\n      }\n\n      // request item removal\n      store.dispatch('REMOVE_ITEM', Object.assign({}, options, {\n        query: query\n      }));\n\n      // see if item has been removed\n      return store.query('GET_ACTIVE_ITEM', query) === null;\n    };\n    var addFiles = function addFiles() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      return new Promise(function (resolve, reject) {\n        var sources = [];\n        var options = {};\n\n        // user passed a sources array\n        if (isArray(args[0])) {\n          sources.push.apply(sources, args[0]);\n          Object.assign(options, args[1] || {});\n        } else {\n          // user passed sources as arguments, last one might be options object\n          var lastArgument = args[args.length - 1];\n          if (typeof lastArgument === 'object' && !(lastArgument instanceof Blob)) {\n            Object.assign(options, args.pop());\n          }\n\n          // add rest to sources\n          sources.push.apply(sources, args);\n        }\n        store.dispatch('ADD_ITEMS', {\n          items: sources,\n          index: options.index,\n          interactionMethod: InteractionMethod.API,\n          success: resolve,\n          failure: reject\n        });\n      });\n    };\n    var getFiles = function getFiles() {\n      return store.query('GET_ACTIVE_ITEMS');\n    };\n    var processFile = function processFile(query) {\n      return new Promise(function (resolve, reject) {\n        store.dispatch('REQUEST_ITEM_PROCESSING', {\n          query: query,\n          success: function success(item) {\n            resolve(item);\n          },\n          failure: function failure(error) {\n            reject(error);\n          }\n        });\n      });\n    };\n    var prepareFiles = function prepareFiles() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n      var queries = Array.isArray(args[0]) ? args[0] : args;\n      var items = queries.length ? queries : getFiles();\n      return Promise.all(items.map(prepareFile));\n    };\n    var processFiles = function processFiles() {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n      var queries = Array.isArray(args[0]) ? args[0] : args;\n      if (!queries.length) {\n        var files = getFiles().filter(function (item) {\n          return !(item.status === ItemStatus.IDLE && item.origin === FileOrigin.LOCAL) && item.status !== ItemStatus.PROCESSING && item.status !== ItemStatus.PROCESSING_COMPLETE && item.status !== ItemStatus.PROCESSING_REVERT_ERROR;\n        });\n        return Promise.all(files.map(processFile));\n      }\n      return Promise.all(queries.map(processFile));\n    };\n    var removeFiles = function removeFiles() {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n      var queries = Array.isArray(args[0]) ? args[0] : args;\n      var options;\n      if (typeof queries[queries.length - 1] === 'object') {\n        options = queries.pop();\n      } else if (Array.isArray(args[0])) {\n        options = args[1];\n      }\n      var files = getFiles();\n      if (!queries.length) return Promise.all(files.map(function (file) {\n        return removeFile(file, options);\n      }));\n\n      // when removing by index the indexes shift after each file removal so we need to convert indexes to ids\n      var mappedQueries = queries.map(function (query) {\n        return isNumber(query) ? files[query] ? files[query].id : null : query;\n      }).filter(function (query) {\n        return query;\n      });\n      return mappedQueries.map(function (q) {\n        return removeFile(q, options);\n      });\n    };\n    var exports = Object.assign({}, on(), {}, readWriteApi, {}, createOptionAPI(store, defaultOptions), {\n      /**\n       * Override options defined in options object\n       * @param options\n       */\n      setOptions: setOptions,\n      /**\n       * Load the given file\n       * @param source - the source of the file (either a File, base64 data uri or url)\n       * @param options - object, { index: 0 }\n       */\n      addFile: addFile,\n      /**\n       * Load the given files\n       * @param sources - the sources of the files to load\n       * @param options - object, { index: 0 }\n       */\n      addFiles: addFiles,\n      /**\n       * Returns the file objects matching the given query\n       * @param query { string, number, null }\n       */\n      getFile: getFile,\n      /**\n       * Upload file with given name\n       * @param query { string, number, null  }\n       */\n      processFile: processFile,\n      /**\n       * Request prepare output for file with given name\n       * @param query { string, number, null  }\n       */\n      prepareFile: prepareFile,\n      /**\n       * Removes a file by its name\n       * @param query { string, number, null  }\n       */\n      removeFile: removeFile,\n      /**\n       * Moves a file to a new location in the files list\n       */\n      moveFile: function moveFile(query, index) {\n        return store.dispatch('MOVE_ITEM', {\n          query: query,\n          index: index\n        });\n      },\n      /**\n       * Returns all files (wrapped in public api)\n       */\n      getFiles: getFiles,\n      /**\n       * Starts uploading all files\n       */\n      processFiles: processFiles,\n      /**\n       * Clears all files from the files list\n       */\n      removeFiles: removeFiles,\n      /**\n       * Starts preparing output of all files\n       */\n      prepareFiles: prepareFiles,\n      /**\n       * Sort list of files\n       */\n      sort: function sort(compare) {\n        return store.dispatch('SORT', {\n          compare: compare\n        });\n      },\n      /**\n       * Browse the file system for a file\n       */\n      browse: function browse() {\n        // needs to be trigger directly as user action needs to be traceable (is not traceable in requestAnimationFrame)\n        var input = view.element.querySelector('input[type=file]');\n        if (input) {\n          input.click();\n        }\n      },\n      /**\n       * Destroys the app\n       */\n      destroy: function destroy() {\n        // request destruction\n        exports.fire('destroy', view.element);\n\n        // stop active processes (file uploads, fetches, stuff like that)\n        // loop over items and depending on states call abort for ongoing processes\n        store.dispatch('ABORT_ALL');\n\n        // destroy view\n        view._destroy();\n\n        // stop listening to resize\n        window.removeEventListener('resize', resizeHandler);\n\n        // stop listening to the visiblitychange event\n        document.removeEventListener('visibilitychange', visibilityHandler);\n\n        // dispatch destroy\n        store.dispatch('DID_DESTROY');\n      },\n      /**\n       * Inserts the plugin before the target element\n       */\n      insertBefore: function insertBefore$1(element) {\n        return insertBefore(view.element, element);\n      },\n      /**\n       * Inserts the plugin after the target element\n       */\n      insertAfter: function insertAfter$1(element) {\n        return insertAfter(view.element, element);\n      },\n      /**\n       * Appends the plugin to the target element\n       */\n      appendTo: function appendTo(element) {\n        return element.appendChild(view.element);\n      },\n      /**\n       * Replaces an element with the app\n       */\n      replaceElement: function replaceElement(element) {\n        // insert the app before the element\n        insertBefore(view.element, element);\n\n        // remove the original element\n        element.parentNode.removeChild(element);\n\n        // remember original element\n        originalElement = element;\n      },\n      /**\n       * Restores the original element\n       */\n      restoreElement: function restoreElement() {\n        if (!originalElement) {\n          return; // no element to restore\n        }\n\n        // restore original element\n        insertAfter(originalElement, view.element);\n\n        // remove our element\n        view.element.parentNode.removeChild(view.element);\n\n        // remove reference\n        originalElement = null;\n      },\n      /**\n       * Returns true if the app root is attached to given element\n       * @param element\n       */\n      isAttachedTo: function isAttachedTo(element) {\n        return view.element === element || originalElement === element;\n      },\n      /**\n       * Returns the root element\n       */\n      element: {\n        get: function get() {\n          return view.element;\n        }\n      },\n      /**\n       * Returns the current pond status\n       */\n      status: {\n        get: function get() {\n          return store.query('GET_STATUS');\n        }\n      }\n    });\n\n    // Done!\n    store.dispatch('DID_INIT');\n\n    // create actual api object\n    return createObject(exports);\n  };\n  var createAppObject = function createAppObject() {\n    var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // default options\n    var defaultOptions = {};\n    forin(getOptions(), function (key, value) {\n      defaultOptions[key] = value[0];\n    });\n\n    // set app options\n    var app = createApp(Object.assign({}, defaultOptions, {}, customOptions));\n\n    // return the plugin instance\n    return app;\n  };\n  var lowerCaseFirstLetter = function lowerCaseFirstLetter(string) {\n    return string.charAt(0).toLowerCase() + string.slice(1);\n  };\n  var attributeNameToPropertyName = function attributeNameToPropertyName(attributeName) {\n    return toCamels(attributeName.replace(/^data-/, ''));\n  };\n  var mapObject = function mapObject(object, propertyMap) {\n    // remove unwanted\n    forin(propertyMap, function (selector, mapping) {\n      forin(object, function (property, value) {\n        // create regexp shortcut\n        var selectorRegExp = new RegExp(selector);\n\n        // tests if\n        var matches = selectorRegExp.test(property);\n\n        // no match, skip\n        if (!matches) {\n          return;\n        }\n\n        // if there's a mapping, the original property is always removed\n        delete object[property];\n\n        // should only remove, we done!\n        if (mapping === false) {\n          return;\n        }\n\n        // move value to new property\n        if (isString(mapping)) {\n          object[mapping] = value;\n          return;\n        }\n\n        // move to group\n        var group = mapping.group;\n        if (isObject(mapping) && !object[group]) {\n          object[group] = {};\n        }\n        object[group][lowerCaseFirstLetter(property.replace(selectorRegExp, ''))] = value;\n      });\n\n      // do submapping\n      if (mapping.mapping) {\n        mapObject(object[mapping.group], mapping.mapping);\n      }\n    });\n  };\n  var getAttributesAsObject = function getAttributesAsObject(node) {\n    var attributeMapping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    // turn attributes into object\n    var attributes = [];\n    forin(node.attributes, function (index) {\n      attributes.push(node.attributes[index]);\n    });\n    var output = attributes.filter(function (attribute) {\n      return attribute.name;\n    }).reduce(function (obj, attribute) {\n      var value = attr(node, attribute.name);\n      obj[attributeNameToPropertyName(attribute.name)] = value === attribute.name ? true : value;\n      return obj;\n    }, {});\n\n    // do mapping of object properties\n    mapObject(output, attributeMapping);\n    return output;\n  };\n  var createAppAtElement = function createAppAtElement(element) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    // how attributes of the input element are mapped to the options for the plugin\n    var attributeMapping = {\n      // translate to other name\n      '^class$': 'className',\n      '^multiple$': 'allowMultiple',\n      '^capture$': 'captureMethod',\n      '^webkitdirectory$': 'allowDirectoriesOnly',\n      // group under single property\n      '^server': {\n        group: 'server',\n        mapping: {\n          '^process': {\n            group: 'process'\n          },\n          '^revert': {\n            group: 'revert'\n          },\n          '^fetch': {\n            group: 'fetch'\n          },\n          '^restore': {\n            group: 'restore'\n          },\n          '^load': {\n            group: 'load'\n          }\n        }\n      },\n      // don't include in object\n      '^type$': false,\n      '^files$': false\n    };\n\n    // add additional option translators\n    applyFilters('SET_ATTRIBUTE_TO_OPTION_MAP', attributeMapping);\n\n    // create final options object by setting options object and then overriding options supplied on element\n    var mergedOptions = Object.assign({}, options);\n    var attributeOptions = getAttributesAsObject(element.nodeName === 'FIELDSET' ? element.querySelector('input[type=file]') : element, attributeMapping);\n\n    // merge with options object\n    Object.keys(attributeOptions).forEach(function (key) {\n      if (isObject(attributeOptions[key])) {\n        if (!isObject(mergedOptions[key])) {\n          mergedOptions[key] = {};\n        }\n        Object.assign(mergedOptions[key], attributeOptions[key]);\n      } else {\n        mergedOptions[key] = attributeOptions[key];\n      }\n    });\n\n    // if parent is a fieldset, get files from parent by selecting all input fields that are not file upload fields\n    // these will then be automatically set to the initial files\n    mergedOptions.files = (options.files || []).concat(Array.from(element.querySelectorAll('input:not([type=file])')).map(function (input) {\n      return {\n        source: input.value,\n        options: {\n          type: input.dataset.type\n        }\n      };\n    }));\n\n    // build plugin\n    var app = createAppObject(mergedOptions);\n\n    // add already selected files\n    if (element.files) {\n      Array.from(element.files).forEach(function (file) {\n        app.addFile(file);\n      });\n    }\n\n    // replace the target element\n    app.replaceElement(element);\n\n    // expose\n    return app;\n  };\n\n  // if an element is passed, we create the instance at that element, if not, we just create an up object\n  var createApp$1 = function createApp() {\n    return isNode(arguments.length <= 0 ? undefined : arguments[0]) ? createAppAtElement.apply(void 0, arguments) : createAppObject.apply(void 0, arguments);\n  };\n  var PRIVATE_METHODS = ['fire', '_read', '_write'];\n  var createAppAPI = function createAppAPI(app) {\n    var api = {};\n    copyObjectPropertiesToObject(app, api, PRIVATE_METHODS);\n    return api;\n  };\n\n  /**\n   * Replaces placeholders in given string with replacements\n   * @param string - \"Foo {bar}\"\"\n   * @param replacements - { \"bar\": 10 }\n   */\n  var replaceInString = function replaceInString(string, replacements) {\n    return string.replace(/(?:{([a-zA-Z]+)})/g, function (match, group) {\n      return replacements[group];\n    });\n  };\n  var createWorker = function createWorker(fn) {\n    var workerBlob = new Blob(['(', fn.toString(), ')()'], {\n      type: 'application/javascript'\n    });\n    var workerURL = URL.createObjectURL(workerBlob);\n    var worker = new Worker(workerURL);\n    return {\n      transfer: function transfer(message, cb) {},\n      post: function post(message, cb, transferList) {\n        var id = getUniqueId();\n        worker.onmessage = function (e) {\n          if (e.data.id === id) {\n            cb(e.data.message);\n          }\n        };\n        worker.postMessage({\n          id: id,\n          message: message\n        }, transferList);\n      },\n      terminate: function terminate() {\n        worker.terminate();\n        URL.revokeObjectURL(workerURL);\n      }\n    };\n  };\n  var loadImage = function loadImage(url) {\n    return new Promise(function (resolve, reject) {\n      var img = new Image();\n      img.onload = function () {\n        resolve(img);\n      };\n      img.onerror = function (e) {\n        reject(e);\n      };\n      img.src = url;\n    });\n  };\n  var renameFile = function renameFile(file, name) {\n    var renamedFile = file.slice(0, file.size, file.type);\n    renamedFile.lastModifiedDate = file.lastModifiedDate;\n    renamedFile.name = name;\n    return renamedFile;\n  };\n  var copyFile = function copyFile(file) {\n    return renameFile(file, file.name);\n  };\n\n  // already registered plugins (can't register twice)\n  var registeredPlugins = [];\n\n  // pass utils to plugin\n  var createAppPlugin = function createAppPlugin(plugin) {\n    // already registered\n    if (registeredPlugins.includes(plugin)) {\n      return;\n    }\n\n    // remember this plugin\n    registeredPlugins.push(plugin);\n\n    // setup!\n    var pluginOutline = plugin({\n      addFilter: addFilter,\n      utils: {\n        Type: Type,\n        forin: forin,\n        isString: isString,\n        isFile: isFile,\n        toNaturalFileSize: toNaturalFileSize,\n        replaceInString: replaceInString,\n        getExtensionFromFilename: getExtensionFromFilename,\n        getFilenameWithoutExtension: getFilenameWithoutExtension,\n        guesstimateMimeType: guesstimateMimeType,\n        getFileFromBlob: getFileFromBlob,\n        getFilenameFromURL: getFilenameFromURL,\n        createRoute: createRoute,\n        createWorker: createWorker,\n        createView: createView,\n        createItemAPI: createItemAPI,\n        loadImage: loadImage,\n        copyFile: copyFile,\n        renameFile: renameFile,\n        createBlob: createBlob,\n        applyFilterChain: applyFilterChain,\n        text: text,\n        getNumericAspectRatioFromString: getNumericAspectRatioFromString\n      },\n      views: {\n        fileActionButton: fileActionButton\n      }\n    });\n\n    // add plugin options to default options\n    extendDefaultOptions(pluginOutline.options);\n  };\n\n  // feature detection used by supported() method\n  var isOperaMini = function isOperaMini() {\n    return Object.prototype.toString.call(window.operamini) === '[object OperaMini]';\n  };\n  var hasPromises = function hasPromises() {\n    return 'Promise' in window;\n  };\n  var hasBlobSlice = function hasBlobSlice() {\n    return 'slice' in Blob.prototype;\n  };\n  var hasCreateObjectURL = function hasCreateObjectURL() {\n    return 'URL' in window && 'createObjectURL' in window.URL;\n  };\n  var hasVisibility = function hasVisibility() {\n    return 'visibilityState' in document;\n  };\n  var hasTiming = function hasTiming() {\n    return 'performance' in window;\n  }; // iOS 8.x\n  var hasCSSSupports = function hasCSSSupports() {\n    return 'supports' in (window.CSS || {});\n  }; // use to detect Safari 9+\n  var isIE11 = function isIE11() {\n    return /MSIE|Trident/.test(window.navigator.userAgent);\n  };\n  var supported = function () {\n    // Runs immediately and then remembers result for subsequent calls\n    var isSupported =\n    // Has to be a browser\n    isBrowser() &&\n    // Can't run on Opera Mini due to lack of everything\n    !isOperaMini() &&\n    // Require these APIs to feature detect a modern browser\n    hasVisibility() && hasPromises() && hasBlobSlice() && hasCreateObjectURL() && hasTiming() && (\n    // doesn't need CSSSupports but is a good way to detect Safari 9+ (we do want to support IE11 though)\n    hasCSSSupports() || isIE11());\n    return function () {\n      return isSupported;\n    };\n  }();\n\n  /**\n   * Plugin internal state (over all instances)\n   */\n  var state = {\n    // active app instances, used to redraw the apps and to find the later\n    apps: []\n  };\n\n  // plugin name\n  var name = 'filepond';\n\n  /**\n   * Public Plugin methods\n   */\n  var fn = function fn() {};\n  exports.Status = {};\n  exports.FileStatus = {};\n  exports.FileOrigin = {};\n  exports.OptionTypes = {};\n  exports.create = fn;\n  exports.destroy = fn;\n  exports.parse = fn;\n  exports.find = fn;\n  exports.registerPlugin = fn;\n  exports.getOptions = fn;\n  exports.setOptions = fn;\n\n  // if not supported, no API\n  if (supported()) {\n    // start painter and fire load event\n    createPainter(function () {\n      state.apps.forEach(function (app) {\n        return app._read();\n      });\n    }, function (ts) {\n      state.apps.forEach(function (app) {\n        return app._write(ts);\n      });\n    });\n\n    // fire loaded event so we know when FilePond is available\n    var dispatch = function dispatch() {\n      // let others know we have area ready\n      document.dispatchEvent(new CustomEvent('FilePond:loaded', {\n        detail: {\n          supported: supported,\n          create: exports.create,\n          destroy: exports.destroy,\n          parse: exports.parse,\n          find: exports.find,\n          registerPlugin: exports.registerPlugin,\n          setOptions: exports.setOptions\n        }\n      }));\n\n      // clean up event\n      document.removeEventListener('DOMContentLoaded', dispatch);\n    };\n    if (document.readyState !== 'loading') {\n      // move to back of execution queue, FilePond should have been exported by then\n      setTimeout(function () {\n        return dispatch();\n      }, 0);\n    } else {\n      document.addEventListener('DOMContentLoaded', dispatch);\n    }\n\n    // updates the OptionTypes object based on the current options\n    var updateOptionTypes = function updateOptionTypes() {\n      return forin(getOptions(), function (key, value) {\n        exports.OptionTypes[key] = value[1];\n      });\n    };\n    exports.Status = Object.assign({}, Status);\n    exports.FileOrigin = Object.assign({}, FileOrigin);\n    exports.FileStatus = Object.assign({}, ItemStatus);\n    exports.OptionTypes = {};\n    updateOptionTypes();\n\n    // create method, creates apps and adds them to the app array\n    exports.create = function create() {\n      var app = createApp$1.apply(void 0, arguments);\n      app.on('destroy', exports.destroy);\n      state.apps.push(app);\n      return createAppAPI(app);\n    };\n\n    // destroys apps and removes them from the app array\n    exports.destroy = function destroy(hook) {\n      // returns true if the app was destroyed successfully\n      var indexToRemove = state.apps.findIndex(function (app) {\n        return app.isAttachedTo(hook);\n      });\n      if (indexToRemove >= 0) {\n        // remove from apps\n        var app = state.apps.splice(indexToRemove, 1)[0];\n\n        // restore original dom element\n        app.restoreElement();\n        return true;\n      }\n      return false;\n    };\n\n    // parses the given context for plugins (does not include the context element itself)\n    exports.parse = function parse(context) {\n      // get all possible hooks\n      var matchedHooks = Array.from(context.querySelectorAll('.' + name));\n\n      // filter out already active hooks\n      var newHooks = matchedHooks.filter(function (newHook) {\n        return !state.apps.find(function (app) {\n          return app.isAttachedTo(newHook);\n        });\n      });\n\n      // create new instance for each hook\n      return newHooks.map(function (hook) {\n        return exports.create(hook);\n      });\n    };\n\n    // returns an app based on the given element hook\n    exports.find = function find(hook) {\n      var app = state.apps.find(function (app) {\n        return app.isAttachedTo(hook);\n      });\n      if (!app) {\n        return null;\n      }\n      return createAppAPI(app);\n    };\n\n    // adds a plugin extension\n    exports.registerPlugin = function registerPlugin() {\n      for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n        plugins[_key] = arguments[_key];\n      }\n\n      // register plugins\n      plugins.forEach(createAppPlugin);\n\n      // update OptionTypes, each plugin might have extended the default options\n      updateOptionTypes();\n    };\n    exports.getOptions = function getOptions$1() {\n      var opts = {};\n      forin(getOptions(), function (key, value) {\n        opts[key] = value[0];\n      });\n      return opts;\n    };\n    exports.setOptions = function setOptions$1(opts) {\n      if (isObject(opts)) {\n        // update existing plugins\n        state.apps.forEach(function (app) {\n          app.setOptions(opts);\n        });\n\n        // override defaults\n        setOptions(opts);\n      }\n\n      // return new options\n      return exports.getOptions();\n    };\n  }\n  exports.supported = supported;\n  Object.defineProperty(exports, '__esModule', {\n    value: true\n  });\n});","import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { a as elementParents, b as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard(_ref) {\n  let swiper = _ref.swiper,\n    extendParams = _ref.extendParams,\n    on = _ref.on,\n    emit = _ref.emit;\n  const document = getDocument();\n  const window = getWindow();\n  swiper.keyboard = {\n    enabled: false\n  };\n  extendParams({\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n      pageUpDown: true\n    }\n  });\n  function handle(event) {\n    if (!swiper.enabled) return;\n    const rtl = swiper.rtlTranslate;\n    let e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    const kc = e.keyCode || e.charCode;\n    const pageUpDown = swiper.params.keyboard.pageUpDown;\n    const isPageUp = pageUpDown && kc === 33;\n    const isPageDown = pageUpDown && kc === 34;\n    const isArrowLeft = kc === 37;\n    const isArrowRight = kc === 39;\n    const isArrowUp = kc === 38;\n    const isArrowDown = kc === 40;\n    // Directions locks\n    if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n      return false;\n    }\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n      return undefined;\n    }\n    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n      return undefined;\n    }\n    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n      let inView = false;\n      // Check that swiper should be inside of visible area of window\n      if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n        return undefined;\n      }\n      const el = swiper.el;\n      const swiperWidth = el.clientWidth;\n      const swiperHeight = el.clientHeight;\n      const windowWidth = window.innerWidth;\n      const windowHeight = window.innerHeight;\n      const swiperOffset = elementOffset(el);\n      if (rtl) swiperOffset.left -= el.scrollLeft;\n      const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n      for (let i = 0; i < swiperCoord.length; i += 1) {\n        const point = swiperCoord[i];\n        if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n          if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n          inView = true;\n        }\n      }\n      if (!inView) return undefined;\n    }\n    if (swiper.isHorizontal()) {\n      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n      if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n      if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n    } else {\n      if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n      if (isPageDown || isArrowDown) swiper.slideNext();\n      if (isPageUp || isArrowUp) swiper.slidePrev();\n    }\n    emit('keyPress', kc);\n    return undefined;\n  }\n  function enable() {\n    if (swiper.keyboard.enabled) return;\n    document.addEventListener('keydown', handle);\n    swiper.keyboard.enabled = true;\n  }\n  function disable() {\n    if (!swiper.keyboard.enabled) return;\n    document.removeEventListener('keydown', handle);\n    swiper.keyboard.enabled = false;\n  }\n  on('init', () => {\n    if (swiper.params.keyboard.enabled) {\n      enable();\n    }\n  });\n  on('destroy', () => {\n    if (swiper.keyboard.enabled) {\n      disable();\n    }\n  });\n  Object.assign(swiper.keyboard, {\n    enable,\n    disable\n  });\n}\nexport { Keyboard as default };","import { e as elementChildren, c as createElement } from './utils.mjs';\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n  if (swiper.params.createElements) {\n    Object.keys(checkProps).forEach(key => {\n      if (!params[key] && params.auto === true) {\n        let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n        if (!element) {\n          element = createElement('div', checkProps[key]);\n          element.className = checkProps[key];\n          swiper.el.append(element);\n        }\n        params[key] = element;\n        originalParams[key] = element;\n      }\n    });\n  }\n  return params;\n}\nexport { createElementIfNotDefined as c };","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nfunction Navigation(_ref) {\n  let swiper = _ref.swiper,\n    extendParams = _ref.extendParams,\n    on = _ref.on,\n    emit = _ref.emit;\n  extendParams({\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n      navigationDisabledClass: 'swiper-navigation-disabled'\n    }\n  });\n  swiper.navigation = {\n    nextEl: null,\n    prevEl: null\n  };\n  const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n  function getEl(el) {\n    let res;\n    if (el && typeof el === 'string' && swiper.isElement) {\n      res = swiper.el.querySelector(el);\n      if (res) return res;\n    }\n    if (el) {\n      if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n      if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n        res = swiper.el.querySelector(el);\n      }\n    }\n    if (el && !res) return el;\n    // if (Array.isArray(res) && res.length === 1) res = res[0];\n    return res;\n  }\n  function toggleEl(el, disabled) {\n    const params = swiper.params.navigation;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      if (subEl) {\n        subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n        if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n        if (swiper.params.watchOverflow && swiper.enabled) {\n          subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n        }\n      }\n    });\n  }\n  function update() {\n    // Update Navigation Buttons\n    const _swiper$navigation = swiper.navigation,\n      nextEl = _swiper$navigation.nextEl,\n      prevEl = _swiper$navigation.prevEl;\n    if (swiper.params.loop) {\n      toggleEl(prevEl, false);\n      toggleEl(nextEl, false);\n      return;\n    }\n    toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n    toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n  }\n  function onPrevClick(e) {\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slidePrev();\n    emit('navigationPrev');\n  }\n  function onNextClick(e) {\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slideNext();\n    emit('navigationNext');\n  }\n  function init() {\n    const params = swiper.params.navigation;\n    swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n      nextEl: 'swiper-button-next',\n      prevEl: 'swiper-button-prev'\n    });\n    if (!(params.nextEl || params.prevEl)) return;\n    let nextEl = getEl(params.nextEl);\n    let prevEl = getEl(params.prevEl);\n    Object.assign(swiper.navigation, {\n      nextEl,\n      prevEl\n    });\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const initButton = (el, dir) => {\n      if (el) {\n        el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      }\n      if (!swiper.enabled && el) {\n        el.classList.add(...params.lockClass.split(' '));\n      }\n    };\n    nextEl.forEach(el => initButton(el, 'next'));\n    prevEl.forEach(el => initButton(el, 'prev'));\n  }\n  function destroy() {\n    let _swiper$navigation2 = swiper.navigation,\n      nextEl = _swiper$navigation2.nextEl,\n      prevEl = _swiper$navigation2.prevEl;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const destroyButton = (el, dir) => {\n      el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n    };\n    nextEl.forEach(el => destroyButton(el, 'next'));\n    prevEl.forEach(el => destroyButton(el, 'prev'));\n  }\n  on('init', () => {\n    if (swiper.params.navigation.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      update();\n    }\n  });\n  on('toEdge fromEdge lock unlock', () => {\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    let _swiper$navigation3 = swiper.navigation,\n      nextEl = _swiper$navigation3.nextEl,\n      prevEl = _swiper$navigation3.prevEl;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    if (swiper.enabled) {\n      update();\n      return;\n    }\n    [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n  });\n  on('click', (_s, e) => {\n    let _swiper$navigation4 = swiper.navigation,\n      nextEl = _swiper$navigation4.nextEl,\n      prevEl = _swiper$navigation4.prevEl;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const targetEl = e.target;\n    if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n      if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n      let isHidden;\n      if (nextEl.length) {\n        isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      } else if (prevEl.length) {\n        isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      }\n      if (isHidden === true) {\n        emit('navigationShow');\n      } else {\n        emit('navigationHide');\n      }\n      [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n    }\n  });\n  const enable = () => {\n    swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    init();\n    update();\n  };\n  const disable = () => {\n    swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    destroy();\n  };\n  Object.assign(swiper.navigation, {\n    enable,\n    disable,\n    update,\n    init,\n    destroy\n  });\n}\nexport { Navigation as default };","function classesToSelector(classes) {\n  if (classes === void 0) {\n    classes = '';\n  }\n  return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n  .replace(/ /g, '.')}`;\n}\nexport { classesToSelector as c };","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { f as elementOuterSize, g as elementIndex, a as elementParents } from '../shared/utils.mjs';\nfunction Pagination(_ref) {\n  let swiper = _ref.swiper,\n    extendParams = _ref.extendParams,\n    on = _ref.on,\n    emit = _ref.emit;\n  const pfx = 'swiper-pagination';\n  extendParams({\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets',\n      // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: number => number,\n      formatFractionTotal: number => number,\n      bulletClass: `${pfx}-bullet`,\n      bulletActiveClass: `${pfx}-bullet-active`,\n      modifierClass: `${pfx}-`,\n      currentClass: `${pfx}-current`,\n      totalClass: `${pfx}-total`,\n      hiddenClass: `${pfx}-hidden`,\n      progressbarFillClass: `${pfx}-progressbar-fill`,\n      progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n      clickableClass: `${pfx}-clickable`,\n      lockClass: `${pfx}-lock`,\n      horizontalClass: `${pfx}-horizontal`,\n      verticalClass: `${pfx}-vertical`,\n      paginationDisabledClass: `${pfx}-disabled`\n    }\n  });\n  swiper.pagination = {\n    el: null,\n    bullets: []\n  };\n  let bulletSize;\n  let dynamicBulletIndex = 0;\n  const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n  function isPaginationDisabled() {\n    return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n  }\n  function setSideBullets(bulletEl, position) {\n    const bulletActiveClass = swiper.params.pagination.bulletActiveClass;\n    if (!bulletEl) return;\n    bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n    if (bulletEl) {\n      bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n      bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n      if (bulletEl) {\n        bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n      }\n    }\n  }\n  function onBulletClick(e) {\n    const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n    if (!bulletEl) {\n      return;\n    }\n    e.preventDefault();\n    const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n    if (swiper.params.loop) {\n      if (swiper.realIndex === index) return;\n      swiper.slideToLoop(index);\n    } else {\n      swiper.slideTo(index);\n    }\n  }\n  function update() {\n    // Render || Update Pagination bullets/items\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    let el = swiper.pagination.el;\n    el = makeElementsArray(el);\n    // Current/Total\n    let current;\n    let previousIndex;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n    if (swiper.params.loop) {\n      previousIndex = swiper.previousRealIndex || 0;\n      current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n      previousIndex = swiper.previousSnapIndex;\n    } else {\n      previousIndex = swiper.previousIndex || 0;\n      current = swiper.activeIndex || 0;\n    }\n    // Types\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      const bullets = swiper.pagination.bullets;\n      let firstIndex;\n      let lastIndex;\n      let midIndex;\n      if (params.dynamicBullets) {\n        bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n        el.forEach(subEl => {\n          subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n        });\n        if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n          dynamicBulletIndex += current - (previousIndex || 0);\n          if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n            dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (dynamicBulletIndex < 0) {\n            dynamicBulletIndex = 0;\n          }\n        }\n        firstIndex = Math.max(current - dynamicBulletIndex, 0);\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n      bullets.forEach(bulletEl => {\n        const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n        bulletEl.classList.remove(...classesToRemove);\n      });\n      if (el.length > 1) {\n        bullets.forEach(bullet => {\n          const bulletIndex = elementIndex(bullet);\n          if (bulletIndex === current) {\n            bullet.classList.add(...params.bulletActiveClass.split(' '));\n          } else if (swiper.isElement) {\n            bullet.setAttribute('part', 'bullet');\n          }\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n            }\n            if (bulletIndex === firstIndex) {\n              setSideBullets(bullet, 'prev');\n            }\n            if (bulletIndex === lastIndex) {\n              setSideBullets(bullet, 'next');\n            }\n          }\n        });\n      } else {\n        const bullet = bullets[current];\n        if (bullet) {\n          bullet.classList.add(...params.bulletActiveClass.split(' '));\n        }\n        if (swiper.isElement) {\n          bullets.forEach((bulletEl, bulletIndex) => {\n            bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n          });\n        }\n        if (params.dynamicBullets) {\n          const firstDisplayedBullet = bullets[firstIndex];\n          const lastDisplayedBullet = bullets[lastIndex];\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            if (bullets[i]) {\n              bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n            }\n          }\n          setSideBullets(firstDisplayedBullet, 'prev');\n          setSideBullets(lastDisplayedBullet, 'next');\n        }\n      }\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.forEach(bullet => {\n          bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n        });\n      }\n    }\n    el.forEach((subEl, subElIndex) => {\n      if (params.type === 'fraction') {\n        subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n          fractionEl.textContent = params.formatFractionCurrent(current + 1);\n        });\n        subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n          totalEl.textContent = params.formatFractionTotal(total);\n        });\n      }\n      if (params.type === 'progressbar') {\n        let progressbarDirection;\n        if (params.progressbarOpposite) {\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n        } else {\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n        }\n        const scale = (current + 1) / total;\n        let scaleX = 1;\n        let scaleY = 1;\n        if (progressbarDirection === 'horizontal') {\n          scaleX = scale;\n        } else {\n          scaleY = scale;\n        }\n        subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n          progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n          progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n        });\n      }\n      if (params.type === 'custom' && params.renderCustom) {\n        subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n        if (subElIndex === 0) emit('paginationRender', subEl);\n      } else {\n        if (subElIndex === 0) emit('paginationRender', subEl);\n        emit('paginationUpdate', subEl);\n      }\n      if (swiper.params.watchOverflow && swiper.enabled) {\n        subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n      }\n    });\n  }\n  function render() {\n    // Render Container\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n    let el = swiper.pagination.el;\n    el = makeElementsArray(el);\n    let paginationHTML = '';\n    if (params.type === 'bullets') {\n      let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n        numberOfBullets = slidesLength;\n      }\n      for (let i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          // prettier-ignore\n          paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n        }\n      }\n    }\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n      }\n    }\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n    }\n    swiper.pagination.bullets = [];\n    el.forEach(subEl => {\n      if (params.type !== 'custom') {\n        subEl.innerHTML = paginationHTML || '';\n      }\n      if (params.type === 'bullets') {\n        swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n      }\n    });\n    if (params.type !== 'custom') {\n      emit('paginationRender', el[0]);\n    }\n  }\n  function init() {\n    swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n      el: 'swiper-pagination'\n    });\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n    let el;\n    if (typeof params.el === 'string' && swiper.isElement) {\n      el = swiper.el.querySelector(params.el);\n    }\n    if (!el && typeof params.el === 'string') {\n      el = [...document.querySelectorAll(params.el)];\n    }\n    if (!el) {\n      el = params.el;\n    }\n    if (!el || el.length === 0) return;\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n      el = [...swiper.el.querySelectorAll(params.el)];\n      // check if it belongs to another nested Swiper\n      if (el.length > 1) {\n        el = el.filter(subEl => {\n          if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n          return true;\n        })[0];\n      }\n    }\n    if (Array.isArray(el) && el.length === 1) el = el[0];\n    Object.assign(swiper.pagination, {\n      el\n    });\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      if (params.type === 'bullets' && params.clickable) {\n        subEl.classList.add(...(params.clickableClass || '').split(' '));\n      }\n      subEl.classList.add(params.modifierClass + params.type);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n      if (params.type === 'bullets' && params.dynamicBullets) {\n        subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n        dynamicBulletIndex = 0;\n        if (params.dynamicMainBullets < 1) {\n          params.dynamicMainBullets = 1;\n        }\n      }\n      if (params.type === 'progressbar' && params.progressbarOpposite) {\n        subEl.classList.add(params.progressbarOppositeClass);\n      }\n      if (params.clickable) {\n        subEl.addEventListener('click', onBulletClick);\n      }\n      if (!swiper.enabled) {\n        subEl.classList.add(params.lockClass);\n      }\n    });\n  }\n  function destroy() {\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    let el = swiper.pagination.el;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => {\n        subEl.classList.remove(params.hiddenClass);\n        subEl.classList.remove(params.modifierClass + params.type);\n        subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        if (params.clickable) {\n          subEl.classList.remove(...(params.clickableClass || '').split(' '));\n          subEl.removeEventListener('click', onBulletClick);\n        }\n      });\n    }\n    if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n  }\n  on('changeDirection', () => {\n    if (!swiper.pagination || !swiper.pagination.el) return;\n    const params = swiper.params.pagination;\n    let el = swiper.pagination.el;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.classList.remove(params.horizontalClass, params.verticalClass);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n    });\n  });\n  on('init', () => {\n    if (swiper.params.pagination.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      render();\n      update();\n    }\n  });\n  on('activeIndexChange', () => {\n    if (typeof swiper.snapIndex === 'undefined') {\n      update();\n    }\n  });\n  on('snapIndexChange', () => {\n    update();\n  });\n  on('snapGridLengthChange', () => {\n    render();\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    let el = swiper.pagination.el;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n    }\n  });\n  on('lock unlock', () => {\n    update();\n  });\n  on('click', (_s, e) => {\n    const targetEl = e.target;\n    const el = makeElementsArray(swiper.pagination.el);\n    if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n      if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n      const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n      if (isHidden === true) {\n        emit('paginationShow');\n      } else {\n        emit('paginationHide');\n      }\n      el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n    }\n  });\n  const enable = () => {\n    swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n    let el = swiper.pagination.el;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n    }\n    init();\n    render();\n    update();\n  };\n  const disable = () => {\n    swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n    let el = swiper.pagination.el;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n    }\n    destroy();\n  };\n  Object.assign(swiper.pagination, {\n    enable,\n    disable,\n    render,\n    update,\n    init,\n    destroy\n  });\n}\nexport { Pagination as default };","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { k as isObject, e as elementChildren } from '../shared/utils.mjs';\nfunction Thumb(_ref) {\n  let swiper = _ref.swiper,\n    extendParams = _ref.extendParams,\n    on = _ref.on;\n  extendParams({\n    thumbs: {\n      swiper: null,\n      multipleActiveThumbs: true,\n      autoScrollOffset: 0,\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\n      thumbsContainerClass: 'swiper-thumbs'\n    }\n  });\n  let initialized = false;\n  let swiperCreated = false;\n  swiper.thumbs = {\n    swiper: null\n  };\n  function onThumbClick() {\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n    const clickedIndex = thumbsSwiper.clickedIndex;\n    const clickedSlide = thumbsSwiper.clickedSlide;\n    if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n    let slideToIndex;\n    if (thumbsSwiper.params.loop) {\n      slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n    } else {\n      slideToIndex = clickedIndex;\n    }\n    if (swiper.params.loop) {\n      swiper.slideToLoop(slideToIndex);\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  }\n  function init() {\n    const thumbsParams = swiper.params.thumbs;\n    if (initialized) return false;\n    initialized = true;\n    const SwiperClass = swiper.constructor;\n    if (thumbsParams.swiper instanceof SwiperClass) {\n      swiper.thumbs.swiper = thumbsParams.swiper;\n      Object.assign(swiper.thumbs.swiper.originalParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n      Object.assign(swiper.thumbs.swiper.params, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n      swiper.thumbs.swiper.update();\n    } else if (isObject(thumbsParams.swiper)) {\n      const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n      Object.assign(thumbsSwiperParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n      swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n      swiperCreated = true;\n    }\n    swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n    swiper.thumbs.swiper.on('tap', onThumbClick);\n    return true;\n  }\n  function update(initial) {\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n    // Activate thumbs\n    let thumbsToActivate = 1;\n    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n      thumbsToActivate = swiper.params.slidesPerView;\n    }\n    if (!swiper.params.thumbs.multipleActiveThumbs) {\n      thumbsToActivate = 1;\n    }\n    thumbsToActivate = Math.floor(thumbsToActivate);\n    thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n    if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n          slideEl.classList.add(thumbActiveClass);\n        });\n      }\n    } else {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        if (thumbsSwiper.slides[swiper.realIndex + i]) {\n          thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n        }\n      }\n    }\n    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n      const currentThumbsIndex = thumbsSwiper.activeIndex;\n      let newThumbsIndex;\n      let direction;\n      if (thumbsSwiper.params.loop) {\n        const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n        newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n      } else {\n        newThumbsIndex = swiper.realIndex;\n        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n      }\n      if (useOffset) {\n        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n      }\n      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n        if (thumbsSwiper.params.centeredSlides) {\n          if (newThumbsIndex > currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n          } else {\n            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n          }\n        } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n      }\n    }\n  }\n  on('beforeInit', () => {\n    const thumbs = swiper.params.thumbs;\n    if (!thumbs || !thumbs.swiper) return;\n    if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n      const document = getDocument();\n      const getThumbsElementAndInit = () => {\n        const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n        if (thumbsElement && thumbsElement.swiper) {\n          thumbs.swiper = thumbsElement.swiper;\n          init();\n          update(true);\n        } else if (thumbsElement) {\n          const onThumbsSwiper = e => {\n            thumbs.swiper = e.detail[0];\n            thumbsElement.removeEventListener('init', onThumbsSwiper);\n            init();\n            update(true);\n            thumbs.swiper.update();\n            swiper.update();\n          };\n          thumbsElement.addEventListener('init', onThumbsSwiper);\n        }\n        return thumbsElement;\n      };\n      const watchForThumbsToAppear = () => {\n        if (swiper.destroyed) return;\n        const thumbsElement = getThumbsElementAndInit();\n        if (!thumbsElement) {\n          requestAnimationFrame(watchForThumbsToAppear);\n        }\n      };\n      requestAnimationFrame(watchForThumbsToAppear);\n    } else {\n      init();\n      update(true);\n    }\n  });\n  on('slideChange update resize observerUpdate', () => {\n    update();\n  });\n  on('setTransition', (_s, duration) => {\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n    thumbsSwiper.setTransition(duration);\n  });\n  on('beforeDestroy', () => {\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n    if (swiperCreated) {\n      thumbsSwiper.destroy();\n    }\n  });\n  Object.assign(swiper.thumbs, {\n    init,\n    update\n  });\n}\nexport { Thumb as default };","import { displayFlashMessage } from '../../util/methods';\nimport { initializeBarRating } from './bar_rating';\nimport { initializeRatingsFormHandler } from './product_rating_form';\nimport { initializeRatingsPaginationHandler } from './product_ratings_pagination';\n\n$(document).on('turbolinks:load', function() {\n\n  if ($('.js-product-info').length) {\n    var $productTabs = $('.js-product-tabs a.nav-link');\n\n    $productTabs.each(function() {\n      $(this).on('click', function(e) {\n        e.preventDefault();\n        let $clickedTab = $(this);\n        let $targetElement = $($clickedTab.data('target'));\n        let targetURL = $clickedTab.attr('href');\n        let $prevActiveTab = $productTabs.filter('.active');\n        let $visibleElement = $($prevActiveTab.data('target'));\n\n        // deactivate previous tab and hide its target content\n        $prevActiveTab.removeClass('active');\n        $visibleElement.hide();\n\n        // activate clicked tab and show target element\n        $clickedTab.addClass('active');\n        $targetElement.show();\n\n        // retrieve view partial if contents have not been previously loaded\n        if (!$targetElement.hasClass('loaded')) {\n          loadSectionContent($targetElement, targetURL);\n        } \n      });\n    });\n  }\n});\n\nexport function loadSectionContent($targetElement, targetURL, scrollToTop = false) {\n  $targetElement.addClass('loading');\n\n  if (scrollToTop) {\n    $('html, body').animate({ scrollTop: $('.js-product-tabs').offset().top }, 500);\n  }\n\n  $.ajax({\n    method:'GET',\n    url: targetURL,\n    dataType: 'json',\n    success: function(response) {\n      // replace target element with returned view partial\n      let viewPartial = response['html'];\n      let $viewPartial = $(viewPartial)\n      $targetElement.replaceWith(viewPartial);\n\n      if ($viewPartial.is('#js-tab-content-ratings')) {\n        if ($viewPartial.find('.js-new-product-rating-form').length) {\n          initializeBarRating('.js-bar-rating');\n          initializeRatingsFormHandler();\n        }\n\n        if ($viewPartial.find('.js-pagyContainer').length) {\n          initializeRatingsPaginationHandler();\n        }\n      }\n    },\n    error: function(xhr, status, error) {\n      $targetElement.removeClass('loading').html('<p class=\"text-danger\">Failed to fetch and load section.</p>');\n      displayFlashMessage('danger', error);\n    }\n  });\n}\n","import * as FilePond from 'filepond';\n\n$(document).on('turbolinks:load', function () {\n\n  var $editForm = $('.edit_product');\n  if ($editForm.length > 0) {\n    checkProductFormCompletion();\n\n    $editForm.on('change', 'input', function(e){\n      checkProductFormCompletion();\n    });\n  }\n\n});\n\nexport function checkProductFormCompletion(){\n  // 1. PRIMARY INFO\n  updateFormCircle('.js-product-circle_primary', productFormPrimaryInfoComplete);\n\n  // 2. CATEGORIES\n  updateFormCircle('.js-product-circle_categories', productFormCategoriesComplete);\n\n  // 3. PRODUCT PAGE (CONTENT)\n  updateFormCircle('.js-product-circle_page', productFormPageComplete);\n\n  // 4. GALLERY\n  updateFormCircle('.js-product-circle_gallery', productFormGalleryComplete);\n\n  // 5. FILES\n  updateFormCircle('.js-product-circle_files', productFormFilesComplete);\n\n  // 6. VARIANTS\n  updateFormCircle('.js-product-circle_variations', productFormVariantsComplete);\n\n  // 7. DOCUMENTATION\n  updateFormCircle('.js-product-circle_documentation', productFormDocumentationComplete);\n\n  // 8. COLLABORATORS\n  updateFormCircle('.js-product-circle_collaborators', productFormCollaboratorsComplete);\n}\n\nfunction updateFormCircle(circleSelector, methodToCheck){\n  var $circle = $(circleSelector);\n  if (methodToCheck()){\n    $circle.removeClass('far').addClass('fas');\n  } else {\n    $circle.removeClass('fas').addClass('far');\n  }\n}\n\nfunction productFormPrimaryInfoComplete(){\n  var title = $.trim($('.js-product-title').val());\n  var slug = $.trim($('.js-product-slug').val());\n  var price = $('.js-product-price').val();\n\n  if (title && title.length > 0 && slug && slug.length > 0 && price && price >= 0) {\n    return true;\n  }\n  return false;\n}\n\nfunction productFormCategoriesComplete(){\n  var categoriesCount = $('.product_categories input:checked').length;\n  var tagsValue = $('#product_tags').val();\n  var versionsCount = $('.product_info_software_versions input:checked').length;\n  var licensesCount = $('.product_info_license input:checked').length;\n\n  if (categoriesCount > 0 && tagsValue && versionsCount > 0 && licensesCount > 0) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction productFormPageComplete(){\n  var contentText = $('.js-product-content').summernote('code');\n  if ($.trim(contentText).length > 0) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction productFormGalleryComplete(){\n  var $imageInputFeatured = $('.js-imageInputFeatured');\n  var $imageInputMulti = $('.js-imageInputMulti');\n  var pond = FilePond.find($imageInputFeatured[0]);\n\n  var dataFilesFeatured = $imageInputFeatured.data('files');\n  var dataFilesMulti = $imageInputMulti.data('files');\n\n  if (pond != null) {\n    var files = pond.getFiles();\n    if (files && files.length > 0) {\n      return true;\n    }\n  }\n  else if (pond == null && dataFilesFeatured && dataFilesMulti && dataFilesFeatured.length + dataFilesMulti.length > 4) {\n    // FP may not be initialized yet, so check the data we give to it\n    return true;\n  }\n\n  return false;\n}\n\nfunction productFormFilesComplete(){\n  // First check if we have previously uploaded files\n  var hasDownloads = $('.js-download-wrapper').length || $('.js-download-item').length;\n  if (hasDownloads) {\n    return true;\n  } else {\n    // check if we have recently uploaded files\n    var pond = FilePond.find($('.js-fileInputDownload')[0]);\n    if (pond != null) {\n      var files = pond.getFiles();\n      if (files && files.length > 0) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nfunction productFormVariantsComplete(){\n  var $variants = $('.product-variable-pricing .variant-nested-field');\n  if ($variants.length == 0) { return true; }\n\n  var validatedCount = 0;\n  for (var i=0; i<$variants.length; i++){\n    if (validateProductVariant($variants[i])){\n      validatedCount++;\n    }\n  }\n\n  if (validatedCount == $variants.length) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction validateProductVariant(container){\n  var $container = $(container);\n  var title = $container.find('.js-productVariant-title').val();\n  var price = parseFloat($container.find('.js-productVariant-price').val());\n\n  return (title != null && title.length > 0 && price >= 0);\n}\n\nfunction productFormDocumentationComplete(){\n  var docsText = $('.js-product-documentation').summernote('code');\n  if ($.trim(docsText).length > 0) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction productFormCollaboratorsComplete(){\n  // TODO not sure what to validate, maybe collaborator amounts but we have\n  // other handling for that on page load\n  return true;\n}\n","export function isTouchDevice() {\n  return (('ontouchstart' in window) ||\n     (navigator.maxTouchPoints > 0) ||\n     (navigator.msMaxTouchPoints > 0));\n}","var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n","var $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n  return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n  return typeof argument == 'function';\n};\n","$(document).on('turbolinks:load', function () {\n  if ($('.js-bar-rating').length) initializeBarRating('.js-bar-rating');\n});\n\nexport function initializeBarRating(elementSelector) {\n  $(elementSelector).barrating({\n  \tdeselectable: false,\n    theme: 'fontawesome-stars'\n  });\n}\n","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\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; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nimport { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, m as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, o as elementNextAll, p as elementPrevAll, i as getTranslate, q as animateCSSModeScroll, n as nextTick, r as showWarning, c as createElement, d as now, t as extend, g as elementIndex, u as deleteProps } from './utils.mjs';\nlet support;\nfunction calcSupport() {\n  const window = getWindow();\n  const document = getDocument();\n  return {\n    smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n  };\n}\nfunction getSupport() {\n  if (!support) {\n    support = calcSupport();\n  }\n  return support;\n}\nlet deviceCached;\nfunction calcDevice(_temp) {\n  let _ref3 = _temp === void 0 ? {} : _temp,\n    userAgent = _ref3.userAgent;\n  const support = getSupport();\n  const window = getWindow();\n  const platform = window.navigator.platform;\n  const ua = userAgent || window.navigator.userAgent;\n  const device = {\n    ios: false,\n    android: false\n  };\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const windows = platform === 'Win32';\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n  if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    if (!ipad) ipad = [0, 1, '13_0_0'];\n    macos = false;\n  }\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.android = true;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n\n  // Export object\n  return device;\n}\nfunction getDevice(overrides) {\n  if (overrides === void 0) {\n    overrides = {};\n  }\n  if (!deviceCached) {\n    deviceCached = calcDevice(overrides);\n  }\n  return deviceCached;\n}\nlet browser;\nfunction calcBrowser() {\n  const window = getWindow();\n  let needPerspectiveFix = false;\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n  }\n  if (isSafari()) {\n    const ua = String(window.navigator.userAgent);\n    if (ua.includes('Version/')) {\n      const _ua$split$1$split$0$s = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num)),\n        _ua$split$1$split$0$s2 = _slicedToArray(_ua$split$1$split$0$s, 2),\n        major = _ua$split$1$split$0$s2[0],\n        minor = _ua$split$1$split$0$s2[1];\n      needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n    }\n  }\n  return {\n    isSafari: needPerspectiveFix || isSafari(),\n    needPerspectiveFix,\n    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n  };\n}\nfunction getBrowser() {\n  if (!browser) {\n    browser = calcBrowser();\n  }\n  return browser;\n}\nfunction Resize(_ref) {\n  let swiper = _ref.swiper,\n    on = _ref.on,\n    emit = _ref.emit;\n  const window = getWindow();\n  let observer = null;\n  let animationFrame = null;\n  const resizeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('beforeResize');\n    emit('resize');\n  };\n  const createObserver = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    observer = new ResizeObserver(entries => {\n      animationFrame = window.requestAnimationFrame(() => {\n        const width = swiper.width,\n          height = swiper.height;\n        let newWidth = width;\n        let newHeight = height;\n        entries.forEach(_ref2 => {\n          let contentBoxSize = _ref2.contentBoxSize,\n            contentRect = _ref2.contentRect,\n            target = _ref2.target;\n          if (target && target !== swiper.el) return;\n          newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n          newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n        });\n        if (newWidth !== width || newHeight !== height) {\n          resizeHandler();\n        }\n      });\n    });\n    observer.observe(swiper.el);\n  };\n  const removeObserver = () => {\n    if (animationFrame) {\n      window.cancelAnimationFrame(animationFrame);\n    }\n    if (observer && observer.unobserve && swiper.el) {\n      observer.unobserve(swiper.el);\n      observer = null;\n    }\n  };\n  const orientationChangeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('orientationchange');\n  };\n  on('init', () => {\n    if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n      createObserver();\n      return;\n    }\n    window.addEventListener('resize', resizeHandler);\n    window.addEventListener('orientationchange', orientationChangeHandler);\n  });\n  on('destroy', () => {\n    removeObserver();\n    window.removeEventListener('resize', resizeHandler);\n    window.removeEventListener('orientationchange', orientationChangeHandler);\n  });\n}\nfunction Observer(_ref) {\n  let swiper = _ref.swiper,\n    extendParams = _ref.extendParams,\n    on = _ref.on,\n    emit = _ref.emit;\n  const observers = [];\n  const window = getWindow();\n  const attach = function (target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n    const observer = new ObserverFunc(mutations => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (swiper.__preventObserver__) return;\n      if (mutations.length === 1) {\n        emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        emit('observerUpdate', mutations[0]);\n      };\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n    });\n    observers.push(observer);\n  };\n  const init = () => {\n    if (!swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = elementParents(swiper.hostEl);\n      for (let i = 0; i < containerParents.length; i += 1) {\n        attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    attach(swiper.hostEl, {\n      childList: swiper.params.observeSlideChildren\n    });\n\n    // Observe wrapper\n    attach(swiper.wrapperEl, {\n      attributes: false\n    });\n  };\n  const destroy = () => {\n    observers.forEach(observer => {\n      observer.disconnect();\n    });\n    observers.splice(0, observers.length);\n  };\n  extendParams({\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false\n  });\n  on('init', init);\n  on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n  on(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(event => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  },\n  once(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    function onceHandler() {\n      self.off(events, onceHandler);\n      if (onceHandler.__emitterProxy) {\n        delete onceHandler.__emitterProxy;\n      }\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.__emitterProxy = handler;\n    return self.on(events, onceHandler, priority);\n  },\n  onAny(handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    if (self.eventsAnyListeners.indexOf(handler) < 0) {\n      self.eventsAnyListeners[method](handler);\n    }\n    return self;\n  },\n  offAny(handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsAnyListeners) return self;\n    const index = self.eventsAnyListeners.indexOf(handler);\n    if (index >= 0) {\n      self.eventsAnyListeners.splice(index, 1);\n    }\n    return self;\n  },\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach(event => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  },\n  emit() {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    data.unshift(context);\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(event => {\n      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n        self.eventsAnyListeners.forEach(eventHandler => {\n          eventHandler.apply(context, [event, ...data]);\n        });\n      }\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach(eventHandler => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n};\nfunction updateSize() {\n  const swiper = this;\n  let width;\n  let height;\n  const el = swiper.el;\n  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n    width = swiper.params.width;\n  } else {\n    width = el.clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n    height = swiper.params.height;\n  } else {\n    height = el.clientHeight;\n  }\n  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n  height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n  if (Number.isNaN(width)) width = 0;\n  if (Number.isNaN(height)) height = 0;\n  Object.assign(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height\n  });\n}\nfunction updateSlides() {\n  const swiper = this;\n  function getDirectionPropertyValue(node, label) {\n    return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n  }\n  const params = swiper.params;\n  const wrapperEl = swiper.wrapperEl,\n    slidesEl = swiper.slidesEl,\n    swiperSize = swiper.size,\n    rtl = swiper.rtlTranslate,\n    wrongRTL = swiper.wrongRTL;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.slidesGrid.length;\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  swiper.virtualSize = -spaceBetween;\n\n  // reset margins\n  slides.forEach(slideEl => {\n    if (rtl) {\n      slideEl.style.marginLeft = '';\n    } else {\n      slideEl.style.marginRight = '';\n    }\n    slideEl.style.marginBottom = '';\n    slideEl.style.marginTop = '';\n  });\n\n  // reset cssMode offsets\n  if (params.centeredSlides && params.cssMode) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n  }\n  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n  if (gridEnabled) {\n    swiper.grid.initSlides(slides);\n  } else if (swiper.grid) {\n    swiper.grid.unsetSlides();\n  }\n\n  // Calc slides\n  let slideSize;\n  const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n    return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n  }).length > 0;\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    let slide;\n    if (slides[i]) slide = slides[i];\n    if (gridEnabled) {\n      swiper.grid.updateSlide(i, slide, slides);\n    }\n    if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      if (shouldResetSlideSize) {\n        slides[i].style[swiper.getDirectionLabel('width')] = ``;\n      }\n      const slideStyles = getComputedStyle(slide);\n      const currentTransform = slide.style.transform;\n      const currentWebKitTransform = slide.style.webkitTransform;\n      if (currentTransform) {\n        slide.style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n      } else {\n        // eslint-disable-next-line\n        const width = getDirectionPropertyValue(slideStyles, 'width');\n        const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n        const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n        const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n        const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n        const boxSizing = slideStyles.getPropertyValue('box-sizing');\n        if (boxSizing && boxSizing === 'border-box') {\n          slideSize = width + marginLeft + marginRight;\n        } else {\n          const _slide = slide,\n            clientWidth = _slide.clientWidth,\n            offsetWidth = _slide.offsetWidth;\n          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n        }\n      }\n      if (currentTransform) {\n        slide.style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n      if (slides[i]) {\n        slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n      }\n    }\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n    swiper.virtualSize += slideSize + spaceBetween;\n    prevSlideSize = slideSize;\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (params.setWrapperSize) {\n    wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (gridEnabled) {\n    swiper.grid.updateWrapperSize(slideSize, snapGrid);\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    const newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (isVirtual && params.loop) {\n    const size = slidesSizesGrid[0] + spaceBetween;\n    if (params.slidesPerGroup > 1) {\n      const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n      const groupSize = size * params.slidesPerGroup;\n      for (let i = 0; i < groups; i += 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n      }\n    }\n    for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n      if (params.slidesPerGroup === 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n      }\n      slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n      swiper.virtualSize += size;\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n  if (spaceBetween !== 0) {\n    const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n    slides.filter((_, slideIndex) => {\n      if (!params.cssMode || params.loop) return true;\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n      return true;\n    }).forEach(slideEl => {\n      slideEl.style[key] = `${spaceBetween}px`;\n    });\n  }\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    const maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map(snap => {\n      if (snap <= 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    if (allSlidesSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n  Object.assign(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid\n  });\n  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n    const addToSnapGrid = -swiper.snapGrid[0];\n    const addToSlidesGrid = -swiper.slidesGrid[0];\n    swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n    swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n  }\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n    const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n    const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n    if (slidesLength <= params.maxBackfaceHiddenSlides) {\n      if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n    } else if (hasClassBackfaceClassAdded) {\n      swiper.el.classList.remove(backFaceHiddenClass);\n    }\n  }\n}\nfunction updateAutoHeight(speed) {\n  const swiper = this;\n  const activeSlides = [];\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  const getSlideByIndex = index => {\n    if (isVirtual) {\n      return swiper.slides[swiper.getSlideIndexByData(index)];\n    }\n    return swiper.slides[index];\n  };\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      (swiper.visibleSlides || []).forEach(slide => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length && !isVirtual) break;\n        activeSlides.push(getSlideByIndex(index));\n      }\n    }\n  } else {\n    activeSlides.push(getSlideByIndex(swiper.activeIndex));\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\nfunction updateSlidesOffset() {\n  const swiper = this;\n  const slides = swiper.slides;\n  // eslint-disable-next-line\n  const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n  }\n}\nfunction updateSlidesProgress(translate) {\n  if (translate === void 0) {\n    translate = this && this.translate || 0;\n  }\n  const swiper = this;\n  const params = swiper.params;\n  const slides = swiper.slides,\n    rtl = swiper.rtlTranslate,\n    snapGrid = swiper.snapGrid;\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n\n  // Visible Slides\n  slides.forEach(slideEl => {\n    slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass);\n  });\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n  let spaceBetween = params.spaceBetween;\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    let slideOffset = slide.swiperSlideOffset;\n    if (params.cssMode && params.centeredSlides) {\n      slideOffset -= slides[0].swiperSlideOffset;\n    }\n    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const slideBefore = -(offsetCenter - slideOffset);\n    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n    const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n    if (isVisible) {\n      swiper.visibleSlides.push(slide);\n      swiper.visibleSlidesIndexes.push(i);\n      slides[i].classList.add(params.slideVisibleClass);\n    }\n    if (isFullyVisible) {\n      slides[i].classList.add(params.slideFullyVisibleClass);\n    }\n    slide.progress = rtl ? -slideProgress : slideProgress;\n    slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n  }\n}\nfunction updateProgress(translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let progress = swiper.progress,\n    isBeginning = swiper.isBeginning,\n    isEnd = swiper.isEnd,\n    progressLoop = swiper.progressLoop;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / translatesDiff;\n    const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n    const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n    isBeginning = isBeginningRounded || progress <= 0;\n    isEnd = isEndRounded || progress >= 1;\n    if (isBeginningRounded) progress = 0;\n    if (isEndRounded) progress = 1;\n  }\n  if (params.loop) {\n    const firstSlideIndex = swiper.getSlideIndexByData(0);\n    const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n    const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n    const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n    const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n    const translateAbs = Math.abs(translate);\n    if (translateAbs >= firstSlideTranslate) {\n      progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n    } else {\n      progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n    }\n    if (progressLoop > 1) progressLoop -= 1;\n  }\n  Object.assign(swiper, {\n    progress,\n    progressLoop,\n    isBeginning,\n    isEnd\n  });\n  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n    swiper.emit('fromEdge');\n  }\n  swiper.emit('progress', progress);\n}\nfunction updateSlidesClasses() {\n  const swiper = this;\n  const slides = swiper.slides,\n    params = swiper.params,\n    slidesEl = swiper.slidesEl,\n    activeIndex = swiper.activeIndex;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  const getFilteredSlide = selector => {\n    return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n  };\n  slides.forEach(slideEl => {\n    slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n  });\n  let activeSlide;\n  let prevSlide;\n  let nextSlide;\n  if (isVirtual) {\n    if (params.loop) {\n      let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n      if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n      if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n    } else {\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n    }\n  } else {\n    if (gridEnabled) {\n      activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n      nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n      prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n    } else {\n      activeSlide = slides[activeIndex];\n    }\n  }\n  if (activeSlide) {\n    // Active classes\n    activeSlide.classList.add(params.slideActiveClass);\n    if (gridEnabled) {\n      if (nextSlide) {\n        nextSlide.classList.add(params.slideNextClass);\n      }\n      if (prevSlide) {\n        prevSlide.classList.add(params.slidePrevClass);\n      }\n    } else {\n      // Next Slide\n      nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !nextSlide) {\n        nextSlide = slides[0];\n      }\n      if (nextSlide) {\n        nextSlide.classList.add(params.slideNextClass);\n      }\n\n      // Prev Slide\n      prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !prevSlide === 0) {\n        prevSlide = slides[slides.length - 1];\n      }\n      if (prevSlide) {\n        prevSlide.classList.add(params.slidePrevClass);\n      }\n    }\n  }\n  swiper.emitSlidesClasses();\n}\nconst processLazyPreloader = (swiper, imageEl) => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n  const slideEl = imageEl.closest(slideSelector());\n  if (slideEl) {\n    let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n    if (!lazyEl && swiper.isElement) {\n      if (slideEl.shadowRoot) {\n        lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n      } else {\n        // init later\n        requestAnimationFrame(() => {\n          if (slideEl.shadowRoot) {\n            lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n            if (lazyEl) lazyEl.remove();\n          }\n        });\n      }\n    }\n    if (lazyEl) lazyEl.remove();\n  }\n};\nconst unlazy = (swiper, index) => {\n  if (!swiper.slides[index]) return;\n  const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n  if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  let amount = swiper.params.lazyPreloadPrevNext;\n  const len = swiper.slides.length;\n  if (!len || !amount || amount < 0) return;\n  amount = Math.min(amount, len);\n  const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n  const activeIndex = swiper.activeIndex;\n  if (swiper.params.grid && swiper.params.grid.rows > 1) {\n    const activeColumn = activeIndex;\n    const preloadColumns = [activeColumn - amount];\n    preloadColumns.push(...Array.from({\n      length: amount\n    }).map((_, i) => {\n      return activeColumn + slidesPerView + i;\n    }));\n    swiper.slides.forEach((slideEl, i) => {\n      if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n    });\n    return;\n  }\n  const slideIndexLastInView = activeIndex + slidesPerView - 1;\n  if (swiper.params.rewind || swiper.params.loop) {\n    for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n      const realIndex = (i % len + len) % len;\n      if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n    }\n  } else {\n    for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n      if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n        unlazy(swiper, i);\n      }\n    }\n  }\n};\nfunction getActiveIndexByTranslate(swiper) {\n  const slidesGrid = swiper.slidesGrid,\n    params = swiper.params;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  let activeIndex;\n  for (let i = 0; i < slidesGrid.length; i += 1) {\n    if (typeof slidesGrid[i + 1] !== 'undefined') {\n      if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n        activeIndex = i;\n      } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n        activeIndex = i + 1;\n      }\n    } else if (translate >= slidesGrid[i]) {\n      activeIndex = i;\n    }\n  }\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n  }\n  return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const snapGrid = swiper.snapGrid,\n    params = swiper.params,\n    previousIndex = swiper.activeIndex,\n    previousRealIndex = swiper.realIndex,\n    previousSnapIndex = swiper.snapIndex;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  const getVirtualRealIndex = aIndex => {\n    let realIndex = aIndex - swiper.virtual.slidesBefore;\n    if (realIndex < 0) {\n      realIndex = swiper.virtual.slides.length + realIndex;\n    }\n    if (realIndex >= swiper.virtual.slides.length) {\n      realIndex -= swiper.virtual.slides.length;\n    }\n    return realIndex;\n  };\n  if (typeof activeIndex === 'undefined') {\n    activeIndex = getActiveIndexByTranslate(swiper);\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex && !swiper.params.loop) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n  if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n    swiper.realIndex = getVirtualRealIndex(activeIndex);\n    return;\n  }\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n  // Get real index\n  let realIndex;\n  if (swiper.virtual && params.virtual.enabled && params.loop) {\n    realIndex = getVirtualRealIndex(activeIndex);\n  } else if (gridEnabled) {\n    const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n    let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n    if (Number.isNaN(activeSlideIndex)) {\n      activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n    }\n    realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n  } else if (swiper.slides[activeIndex]) {\n    const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n    if (slideIndex) {\n      realIndex = parseInt(slideIndex, 10);\n    } else {\n      realIndex = activeIndex;\n    }\n  } else {\n    realIndex = activeIndex;\n  }\n  Object.assign(swiper, {\n    previousSnapIndex,\n    snapIndex,\n    previousRealIndex,\n    realIndex,\n    previousIndex,\n    activeIndex\n  });\n  if (swiper.initialized) {\n    preload(swiper);\n  }\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n    swiper.emit('slideChange');\n  }\n}\nfunction updateClickedSlide(el, path) {\n  const swiper = this;\n  const params = swiper.params;\n  let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n  if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n    [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n      if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n        slide = pathEl;\n      }\n    });\n  }\n  let slideFound = false;\n  let slideIndex;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) {\n        slideFound = true;\n        slideIndex = i;\n        break;\n      }\n    }\n  }\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = slideIndex;\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\nvar update = {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide\n};\nfunction getSwiperTranslate(axis) {\n  if (axis === void 0) {\n    axis = this.isHorizontal() ? 'x' : 'y';\n  }\n  const swiper = this;\n  const params = swiper.params,\n    rtl = swiper.rtlTranslate,\n    translate = swiper.translate,\n    wrapperEl = swiper.wrapperEl;\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n  let currentTranslate = getTranslate(wrapperEl, axis);\n  currentTranslate += swiper.cssOverflowAdjustment();\n  if (rtl) currentTranslate = -currentTranslate;\n  return currentTranslate || 0;\n}\nfunction setTranslate(translate, byController) {\n  const swiper = this;\n  const rtl = swiper.rtlTranslate,\n    params = swiper.params,\n    wrapperEl = swiper.wrapperEl,\n    progress = swiper.progress;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    if (swiper.isHorizontal()) {\n      x -= swiper.cssOverflowAdjustment();\n    } else {\n      y -= swiper.cssOverflowAdjustment();\n    }\n    wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n  }\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\nfunction minTranslate() {\n  return -this.snapGrid[0];\n}\nfunction maxTranslate() {\n  return -this.snapGrid[this.snapGrid.length - 1];\n}\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n  if (translate === void 0) {\n    translate = 0;\n  }\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (translateBounds === void 0) {\n    translateBounds = true;\n  }\n  const swiper = this;\n  const params = swiper.params,\n    wrapperEl = swiper.wrapperEl;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: -newTranslate,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: -newTranslate,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n      swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n  return true;\n}\nvar translate = {\n  getTranslate: getSwiperTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo\n};\nfunction setTransition(duration, byController) {\n  const swiper = this;\n  if (!swiper.params.cssMode) {\n    swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n    swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n  }\n  swiper.emit('setTransition', duration, byController);\n}\nfunction transitionEmit(_ref) {\n  let swiper = _ref.swiper,\n    runCallbacks = _ref.runCallbacks,\n    direction = _ref.direction,\n    step = _ref.step;\n  const activeIndex = swiper.activeIndex,\n    previousIndex = swiper.previousIndex;\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n  }\n  swiper.emit(`transition${step}`);\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit(`slideResetTransition${step}`);\n      return;\n    }\n    swiper.emit(`slideChangeTransition${step}`);\n    if (dir === 'next') {\n      swiper.emit(`slideNextTransition${step}`);\n    } else {\n      swiper.emit(`slidePrevTransition${step}`);\n    }\n  }\n}\nfunction transitionStart(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const params = swiper.params;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'Start'\n  });\n}\nfunction transitionEnd(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const params = swiper.params;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'End'\n  });\n}\nvar transition = {\n  setTransition,\n  transitionStart,\n  transitionEnd\n};\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n  if (index === void 0) {\n    index = 0;\n  }\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (typeof index === 'string') {\n    index = parseInt(index, 10);\n  }\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n  const params = swiper.params,\n    snapGrid = swiper.snapGrid,\n    slidesGrid = swiper.slidesGrid,\n    previousIndex = swiper.previousIndex,\n    activeIndex = swiper.activeIndex,\n    rtl = swiper.rtlTranslate,\n    wrapperEl = swiper.wrapperEl,\n    enabled = swiper.enabled;\n  if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n    return false;\n  }\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  const translate = -snapGrid[snapIndex];\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      const normalizedTranslate = -Math.floor(translate * 100);\n      const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n          slideIndex = i;\n        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n          slideIndex = i + 1;\n        }\n      } else if (normalizedTranslate >= normalizedGrid) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) {\n        return false;\n      }\n    }\n  }\n  if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  // Update progress\n  swiper.updateProgress(translate);\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n  // Update Index\n  if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    const t = rtl ? translate : -translate;\n    if (speed === 0) {\n      const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n      if (isVirtual) {\n        swiper.wrapperEl.style.scrollSnapType = 'none';\n        swiper._immediateVirtual = true;\n      }\n      if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n        swiper._cssModeVirtualInitialSet = true;\n        requestAnimationFrame(() => {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n      if (isVirtual) {\n        requestAnimationFrame(() => {\n          swiper.wrapperEl.style.scrollSnapType = '';\n          swiper._immediateVirtual = false;\n        });\n      }\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: t,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: t,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  swiper.setTransition(speed);\n  swiper.setTranslate(translate);\n  swiper.updateActiveIndex(slideIndex);\n  swiper.updateSlidesClasses();\n  swiper.emit('beforeTransitionStart', speed, internal);\n  swiper.transitionStart(runCallbacks, direction);\n  if (speed === 0) {\n    swiper.transitionEnd(runCallbacks, direction);\n  } else if (!swiper.animating) {\n    swiper.animating = true;\n    if (!swiper.onSlideToWrapperTransitionEnd) {\n      swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n        if (!swiper || swiper.destroyed) return;\n        if (e.target !== this) return;\n        swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.onSlideToWrapperTransitionEnd = null;\n        delete swiper.onSlideToWrapperTransitionEnd;\n        swiper.transitionEnd(runCallbacks, direction);\n      };\n    }\n    swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n  }\n  return true;\n}\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n  if (index === void 0) {\n    index = 0;\n  }\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (typeof index === 'string') {\n    const indexAsNumber = parseInt(index, 10);\n    index = indexAsNumber;\n  }\n  const swiper = this;\n  const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      // eslint-disable-next-line\n      newIndex = newIndex + swiper.virtual.slidesBefore;\n    } else {\n      let targetSlideIndex;\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n      } else {\n        targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n      }\n      const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n      const centeredSlides = swiper.params.centeredSlides;\n      let slidesPerView = swiper.params.slidesPerView;\n      if (slidesPerView === 'auto') {\n        slidesPerView = swiper.slidesPerViewDynamic();\n      } else {\n        slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n        if (centeredSlides && slidesPerView % 2 === 0) {\n          slidesPerView = slidesPerView + 1;\n        }\n      }\n      let needLoopFix = cols - targetSlideIndex < slidesPerView;\n      if (centeredSlides) {\n        needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n      }\n      if (needLoopFix) {\n        const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n        swiper.loopFix({\n          direction,\n          slideTo: true,\n          activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n          slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n        });\n      }\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n      } else {\n        newIndex = swiper.getSlideIndexByData(newIndex);\n      }\n    }\n  }\n  requestAnimationFrame(() => {\n    swiper.slideTo(newIndex, speed, runCallbacks, internal);\n  });\n  return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const enabled = swiper.enabled,\n    params = swiper.params,\n    animating = swiper.animating;\n  if (!enabled) return swiper;\n  let perGroup = params.slidesPerGroup;\n  if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n    perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n  }\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'next'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n    if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n      requestAnimationFrame(() => {\n        swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n      });\n      return true;\n    }\n  }\n  if (params.rewind && swiper.isEnd) {\n    return swiper.slideTo(0, speed, runCallbacks, internal);\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const params = swiper.params,\n    snapGrid = swiper.snapGrid,\n    slidesGrid = swiper.slidesGrid,\n    rtlTranslate = swiper.rtlTranslate,\n    enabled = swiper.enabled,\n    animating = swiper.animating;\n  if (!enabled) return swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'prev'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    let prevSnapIndex;\n    snapGrid.forEach((snap, snapIndex) => {\n      if (normalizedTranslate >= snap) {\n        // prevSnap = snap;\n        prevSnapIndex = snapIndex;\n      }\n    });\n    if (typeof prevSnapIndex !== 'undefined') {\n      prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n    }\n  }\n  let prevIndex = 0;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n      prevIndex = Math.max(prevIndex, 0);\n    }\n  }\n  if (params.rewind && swiper.isBeginning) {\n    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n  } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n    requestAnimationFrame(() => {\n      swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n    });\n    return true;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (threshold === void 0) {\n    threshold = 0.5;\n  }\n  const swiper = this;\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\nfunction slideToClickedSlide() {\n  const swiper = this;\n  const params = swiper.params,\n    slidesEl = swiper.slidesEl;\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n        swiper.loopFix();\n        slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n        nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n      nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\nvar slide = {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide\n};\nfunction loopCreate(slideRealIndex) {\n  const swiper = this;\n  const params = swiper.params,\n    slidesEl = swiper.slidesEl;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  const initSlides = () => {\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    slides.forEach((el, index) => {\n      el.setAttribute('data-swiper-slide-index', index);\n    });\n  };\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n  const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n  const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n  const addBlankSlides = amountOfSlides => {\n    for (let i = 0; i < amountOfSlides; i += 1) {\n      const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n      swiper.slidesEl.append(slideEl);\n    }\n  };\n  if (shouldFillGroup) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else if (shouldFillGrid) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else {\n    initSlides();\n  }\n  swiper.loopFix({\n    slideRealIndex,\n    direction: params.centeredSlides ? undefined : 'next'\n  });\n}\nfunction loopFix(_temp) {\n  let _ref4 = _temp === void 0 ? {} : _temp,\n    slideRealIndex = _ref4.slideRealIndex,\n    _ref4$slideTo = _ref4.slideTo,\n    slideTo = _ref4$slideTo === void 0 ? true : _ref4$slideTo,\n    direction = _ref4.direction,\n    setTranslate = _ref4.setTranslate,\n    activeSlideIndex = _ref4.activeSlideIndex,\n    byController = _ref4.byController,\n    byMousewheel = _ref4.byMousewheel;\n  const swiper = this;\n  if (!swiper.params.loop) return;\n  swiper.emit('beforeLoopFix');\n  const slides = swiper.slides,\n    allowSlidePrev = swiper.allowSlidePrev,\n    allowSlideNext = swiper.allowSlideNext,\n    slidesEl = swiper.slidesEl,\n    params = swiper.params;\n  const centeredSlides = params.centeredSlides;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n  if (swiper.virtual && params.virtual.enabled) {\n    if (slideTo) {\n      if (!params.centeredSlides && swiper.snapIndex === 0) {\n        swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n      } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n        swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n      } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n        swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n      }\n    }\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n    swiper.emit('loopFix');\n    return;\n  }\n  let slidesPerView = params.slidesPerView;\n  if (slidesPerView === 'auto') {\n    slidesPerView = swiper.slidesPerViewDynamic();\n  } else {\n    slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n    if (centeredSlides && slidesPerView % 2 === 0) {\n      slidesPerView = slidesPerView + 1;\n    }\n  }\n  const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n  let loopedSlides = slidesPerGroup;\n  if (loopedSlides % slidesPerGroup !== 0) {\n    loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n  }\n  swiper.loopedSlides = loopedSlides + params.loopAdditionalSlides;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  if (slides.length < slidesPerView + loopedSlides) {\n    showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n  } else if (gridEnabled && params.grid.fill === 'row') {\n    showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n  }\n  const prependSlidesIndexes = [];\n  const appendSlidesIndexes = [];\n  let activeIndex = swiper.activeIndex;\n  if (typeof activeSlideIndex === 'undefined') {\n    activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n  } else {\n    activeIndex = activeSlideIndex;\n  }\n  const isNext = direction === 'next' || !direction;\n  const isPrev = direction === 'prev' || !direction;\n  let slidesPrepended = 0;\n  let slidesAppended = 0;\n  const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n  const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n  const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n  // prepend last slides before start\n  if (activeColIndexWithShift < loopedSlides) {\n    slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n    for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        const colIndexToPrepend = cols - index - 1;\n        for (let i = slides.length - 1; i >= 0; i -= 1) {\n          if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n        }\n        // slides.forEach((slide, slideIndex) => {\n        //   if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n        // });\n      } else {\n        prependSlidesIndexes.push(cols - index - 1);\n      }\n    }\n  } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n    slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n    for (let i = 0; i < slidesAppended; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        slides.forEach((slide, slideIndex) => {\n          if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n        });\n      } else {\n        appendSlidesIndexes.push(index);\n      }\n    }\n  }\n  if (isPrev) {\n    prependSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.prepend(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  if (isNext) {\n    appendSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.append(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  swiper.recalcSlides();\n  if (params.slidesPerView === 'auto') {\n    swiper.updateSlides();\n  } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n    swiper.slides.forEach((slide, slideIndex) => {\n      swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n    });\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  if (slideTo) {\n    if (prependSlidesIndexes.length > 0 && isPrev) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        if (setTranslate) {\n          const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n          swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n          swiper.touchEventsData.currentTranslate = swiper.translate;\n        }\n      }\n    } else if (appendSlidesIndexes.length > 0 && isNext) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n        swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n      }\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.controller && swiper.controller.control && !byController) {\n    const loopParams = {\n      slideRealIndex,\n      direction,\n      setTranslate,\n      activeSlideIndex,\n      byController: true\n    };\n    if (Array.isArray(swiper.controller.control)) {\n      swiper.controller.control.forEach(c => {\n        if (!c.destroyed && c.params.loop) c.loopFix(_objectSpread(_objectSpread({}, loopParams), {}, {\n          slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n        }));\n      });\n    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n      swiper.controller.control.loopFix(_objectSpread(_objectSpread({}, loopParams), {}, {\n        slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n      }));\n    }\n  }\n  swiper.emit('loopFix');\n}\nfunction loopDestroy() {\n  const swiper = this;\n  const params = swiper.params,\n    slidesEl = swiper.slidesEl;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  swiper.recalcSlides();\n  const newSlidesOrder = [];\n  swiper.slides.forEach(slideEl => {\n    const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n    newSlidesOrder[index] = slideEl;\n  });\n  swiper.slides.forEach(slideEl => {\n    slideEl.removeAttribute('data-swiper-slide-index');\n  });\n  newSlidesOrder.forEach(slideEl => {\n    slidesEl.append(slideEl);\n  });\n  swiper.recalcSlides();\n  swiper.slideTo(swiper.realIndex, 0);\n}\nvar loop = {\n  loopCreate,\n  loopFix,\n  loopDestroy\n};\nfunction setGrabCursor(moving) {\n  const swiper = this;\n  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\nfunction unsetGrabCursor() {\n  const swiper = this;\n  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n    return;\n  }\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\nvar grabCursor = {\n  setGrabCursor,\n  unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n  if (base === void 0) {\n    base = this;\n  }\n  function __closestFrom(el) {\n    if (!el || el === getDocument() || el === getWindow()) return null;\n    if (el.assignedSlot) el = el.assignedSlot;\n    const found = el.closest(selector);\n    if (!found && !el.getRootNode) {\n      return null;\n    }\n    return found || __closestFrom(el.getRootNode().host);\n  }\n  return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n  const window = getWindow();\n  const params = swiper.params;\n  const edgeSwipeDetection = params.edgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold;\n  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n    if (edgeSwipeDetection === 'prevent') {\n      event.preventDefault();\n      return true;\n    }\n    return false;\n  }\n  return true;\n}\nfunction onTouchStart(event) {\n  const swiper = this;\n  const document = getDocument();\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const data = swiper.touchEventsData;\n  if (e.type === 'pointerdown') {\n    if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n      return;\n    }\n    data.pointerId = e.pointerId;\n  } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n    data.touchId = e.targetTouches[0].identifier;\n  }\n  if (e.type === 'touchstart') {\n    // don't proceed touch event\n    preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n    return;\n  }\n  const params = swiper.params,\n    touches = swiper.touches,\n    enabled = swiper.enabled;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  if (!swiper.animating && params.cssMode && params.loop) {\n    swiper.loopFix();\n  }\n  let targetEl = e.target;\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!swiper.wrapperEl.contains(targetEl)) return;\n  }\n  if ('which' in e && e.which === 3) return;\n  if ('button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n\n  // change target el for shadow root component\n  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n  // eslint-disable-next-line\n  const eventPath = e.composedPath ? e.composedPath() : e.path;\n  if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n    targetEl = eventPath[0];\n  }\n  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n  const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n  // use closestElement for shadow root element to get the actual closest for nested shadow root element\n  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!targetEl.closest(params.swipeHandler)) return;\n  }\n  touches.currentX = e.pageX;\n  touches.currentY = e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n  if (!preventEdgeSwipe(swiper, e, startX)) {\n    return;\n  }\n  Object.assign(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined\n  });\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  let preventDefault = true;\n  if (targetEl.matches(data.focusableElements)) {\n    preventDefault = false;\n    if (targetEl.nodeName === 'SELECT') {\n      data.isTouched = false;\n    }\n  }\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n    document.activeElement.blur();\n  }\n  const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n  if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n    e.preventDefault();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n    swiper.freeMode.onTouchStart();\n  }\n  swiper.emit('touchStart', e);\n}\nfunction onTouchMove(event) {\n  const document = getDocument();\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const params = swiper.params,\n    touches = swiper.touches,\n    rtl = swiper.rtlTranslate,\n    enabled = swiper.enabled;\n  if (!enabled) return;\n  if (!params.simulateTouch && event.pointerType === 'mouse') return;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (e.type === 'pointermove') {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    const id = e.pointerId;\n    if (id !== data.pointerId) return;\n  }\n  let targetTouch;\n  if (e.type === 'touchmove') {\n    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  } else {\n    targetTouch = e;\n  }\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  const pageX = targetTouch.pageX;\n  const pageY = targetTouch.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    if (!e.target.matches(data.focusableElements)) {\n      swiper.allowClick = false;\n    }\n    if (data.isTouched) {\n      Object.assign(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY\n      });\n      data.touchStartTime = now();\n    }\n    return;\n  }\n  if (params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n      return;\n    }\n  }\n  if (document.activeElement) {\n    if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  touches.previousX = touches.currentX;\n  touches.previousY = touches.currentY;\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if (diffX * diffX + diffY * diffY >= 25) {\n        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n  if (params.oneWayMovement) {\n    diff = Math.abs(diff) * (rtl ? 1 : -1);\n    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n  }\n  touches.diff = diff;\n  diff *= params.touchRatio;\n  if (rtl) {\n    diff = -diff;\n    touchesDiff = -touchesDiff;\n  }\n  const prevTouchesDirection = swiper.touchesDirection;\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n  const isLoop = swiper.params.loop && !params.cssMode;\n  const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n  if (!data.isMoved) {\n    if (isLoop && allowLoopFix) {\n      swiper.loopFix({\n        direction: swiper.swipeDirection\n      });\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      const evt = new window.CustomEvent('transitionend', {\n        bubbles: true,\n        cancelable: true\n      });\n      swiper.wrapperEl.dispatchEvent(evt);\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  let loopFixed;\n  new Date().getTime();\n  if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n    Object.assign(touches, {\n      startX: pageX,\n      startY: pageY,\n      currentX: pageX,\n      currentY: pageY,\n      startTranslate: data.currentTranslate\n    });\n    data.loopSwapReset = true;\n    data.startTranslate = data.currentTranslate;\n    return;\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n  data.currentTranslate = diff + data.startTranslate;\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if (diff > 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {\n      swiper.loopFix({\n        direction: 'prev',\n        setTranslate: true,\n        activeSlideIndex: 0\n      });\n    }\n    if (data.currentTranslate > swiper.minTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n      }\n    }\n  } else if (diff < 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {\n      swiper.loopFix({\n        direction: 'next',\n        setTranslate: true,\n        activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n      });\n    }\n    if (data.currentTranslate < swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n      }\n    }\n  }\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n    swiper.freeMode.onTouchMove();\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\nfunction onTouchEnd(event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  let targetTouch;\n  const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n  if (!isTouchEvent) {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    if (e.pointerId !== data.pointerId) return;\n    targetTouch = e;\n  } else {\n    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  }\n  if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n    const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n    if (!proceed) {\n      return;\n    }\n  }\n  data.pointerId = null;\n  data.touchId = null;\n  const params = swiper.params,\n    touches = swiper.touches,\n    rtl = swiper.rtlTranslate,\n    slidesGrid = swiper.slidesGrid,\n    enabled = swiper.enabled;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    const pathTree = e.path || e.composedPath && e.composedPath();\n    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n  data.lastClickTime = now();\n  nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n  if (params.cssMode) {\n    return;\n  }\n  if (params.freeMode && params.freeMode.enabled) {\n    swiper.freeMode.onTouchEnd({\n      currentPos\n    });\n    return;\n  }\n\n  // Find current slide\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n    const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n  let rewindFirstIndex = null;\n  let rewindLastIndex = null;\n  if (params.rewind) {\n    if (swiper.isBeginning) {\n      rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    } else if (swiper.isEnd) {\n      rewindFirstIndex = 0;\n    }\n  }\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > 1 - params.longSwipesRatio) {\n        swiper.slideTo(stopIndex + increment);\n      } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n        swiper.slideTo(rewindLastIndex);\n      } else {\n        swiper.slideTo(stopIndex);\n      }\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\nfunction onResize() {\n  const swiper = this;\n  const params = swiper.params,\n    el = swiper.el;\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const allowSlideNext = swiper.allowSlideNext,\n    allowSlidePrev = swiper.allowSlidePrev,\n    snapGrid = swiper.snapGrid;\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n  swiper.updateSize();\n  swiper.updateSlides();\n  swiper.updateSlidesClasses();\n  const isVirtualLoop = isVirtual && params.loop;\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    if (swiper.params.loop && !isVirtual) {\n      swiper.slideToLoop(swiper.realIndex, 0, false, true);\n    } else {\n      swiper.slideTo(swiper.activeIndex, 0, false, true);\n    }\n  }\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    clearTimeout(swiper.autoplay.resizeTimeout);\n    swiper.autoplay.resizeTimeout = setTimeout(() => {\n      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n        swiper.autoplay.resume();\n      }\n    }, 500);\n  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\nfunction onClick(e) {\n  const swiper = this;\n  if (!swiper.enabled) return;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\nfunction onScroll() {\n  const swiper = this;\n  const wrapperEl = swiper.wrapperEl,\n    rtlTranslate = swiper.rtlTranslate,\n    enabled = swiper.enabled;\n  if (!enabled) return;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    swiper.translate = -wrapperEl.scrollLeft;\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === 0) swiper.translate = 0;\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, false);\n}\nfunction onLoad(e) {\n  const swiper = this;\n  processLazyPreloader(swiper, e.target);\n  if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n    return;\n  }\n  swiper.update();\n}\nfunction onDocumentTouchStart() {\n  const swiper = this;\n  if (swiper.documentTouchHandlerProceeded) return;\n  swiper.documentTouchHandlerProceeded = true;\n  if (swiper.params.touchReleaseOnEdges) {\n    swiper.el.style.touchAction = 'auto';\n  }\n}\nconst events = (swiper, method) => {\n  const document = getDocument();\n  const params = swiper.params,\n    el = swiper.el,\n    wrapperEl = swiper.wrapperEl,\n    device = swiper.device;\n  const capture = !!params.nested;\n  const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n  const swiperMethod = method;\n\n  // Touch Events\n  document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n    passive: false,\n    capture\n  });\n  el[domMethod]('touchstart', swiper.onTouchStart, {\n    passive: false\n  });\n  el[domMethod]('pointerdown', swiper.onTouchStart, {\n    passive: false\n  });\n  document[domMethod]('touchmove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('pointermove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('touchend', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerup', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointercancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('touchcancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerout', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerleave', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('contextmenu', swiper.onTouchEnd, {\n    passive: true\n  });\n\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el[domMethod]('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl[domMethod]('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n  } else {\n    swiper[swiperMethod]('observerUpdate', onResize, true);\n  }\n\n  // Images loader\n  el[domMethod]('load', swiper.onLoad, {\n    capture: true\n  });\n};\nfunction attachEvents() {\n  const swiper = this;\n  const params = swiper.params;\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n  swiper.onClick = onClick.bind(swiper);\n  swiper.onLoad = onLoad.bind(swiper);\n  events(swiper, 'on');\n}\nfunction detachEvents() {\n  const swiper = this;\n  events(swiper, 'off');\n}\nvar events$1 = {\n  attachEvents,\n  detachEvents\n};\nconst isGridEnabled = (swiper, params) => {\n  return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n  const swiper = this;\n  const realIndex = swiper.realIndex,\n    initialized = swiper.initialized,\n    params = swiper.params,\n    el = swiper.el;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n  // Get breakpoint for window width and update parameters\n  const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n  const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n  const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n  const wasMultiRow = isGridEnabled(swiper, params);\n  const isMultiRow = isGridEnabled(swiper, breakpointParams);\n  const wasEnabled = params.enabled;\n  if (wasMultiRow && !isMultiRow) {\n    el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n    swiper.emitContainerClasses();\n  } else if (!wasMultiRow && isMultiRow) {\n    el.classList.add(`${params.containerModifierClass}grid`);\n    if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n      el.classList.add(`${params.containerModifierClass}grid-column`);\n    }\n    swiper.emitContainerClasses();\n  }\n\n  // Toggle navigation, pagination, scrollbar\n  ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n    if (typeof breakpointParams[prop] === 'undefined') return;\n    const wasModuleEnabled = params[prop] && params[prop].enabled;\n    const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n    if (wasModuleEnabled && !isModuleEnabled) {\n      swiper[prop].disable();\n    }\n    if (!wasModuleEnabled && isModuleEnabled) {\n      swiper[prop].enable();\n    }\n  });\n  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n  const wasLoop = params.loop;\n  if (directionChanged && initialized) {\n    swiper.changeDirection();\n  }\n  extend(swiper.params, breakpointParams);\n  const isEnabled = swiper.params.enabled;\n  const hasLoop = swiper.params.loop;\n  Object.assign(swiper, {\n    allowTouchMove: swiper.params.allowTouchMove,\n    allowSlideNext: swiper.params.allowSlideNext,\n    allowSlidePrev: swiper.params.allowSlidePrev\n  });\n  if (wasEnabled && !isEnabled) {\n    swiper.disable();\n  } else if (!wasEnabled && isEnabled) {\n    swiper.enable();\n  }\n  swiper.currentBreakpoint = breakpoint;\n  swiper.emit('_beforeBreakpoint', breakpointParams);\n  if (initialized) {\n    if (needsReLoop) {\n      swiper.loopDestroy();\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (!wasLoop && hasLoop) {\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (wasLoop && !hasLoop) {\n      swiper.loopDestroy();\n    }\n  }\n  swiper.emit('breakpoint', breakpointParams);\n}\nfunction getBreakpoint(breakpoints, base, containerEl) {\n  if (base === void 0) {\n    base = 'window';\n  }\n  if (!breakpoints || base === 'container' && !containerEl) return undefined;\n  let breakpoint = false;\n  const window = getWindow();\n  const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n  const points = Object.keys(breakpoints).map(point => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = currentHeight * minRatio;\n      return {\n        value,\n        point\n      };\n    }\n    return {\n      value: point,\n      point\n    };\n  });\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const _points$i = points[i],\n      point = _points$i.point,\n      value = _points$i.value;\n    if (base === 'window') {\n      if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n        breakpoint = point;\n      }\n    } else if (value <= containerEl.clientWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\nvar breakpoints = {\n  setBreakpoint,\n  getBreakpoint\n};\nfunction prepareClasses(entries, prefix) {\n  const resultClasses = [];\n  entries.forEach(item => {\n    if (typeof item === 'object') {\n      Object.keys(item).forEach(classNames => {\n        if (item[classNames]) {\n          resultClasses.push(prefix + classNames);\n        }\n      });\n    } else if (typeof item === 'string') {\n      resultClasses.push(prefix + item);\n    }\n  });\n  return resultClasses;\n}\nfunction addClasses() {\n  const swiper = this;\n  const classNames = swiper.classNames,\n    params = swiper.params,\n    rtl = swiper.rtl,\n    el = swiper.el,\n    device = swiper.device;\n  // prettier-ignore\n  const suffixes = prepareClasses(['initialized', params.direction, {\n    'free-mode': swiper.params.freeMode && params.freeMode.enabled\n  }, {\n    'autoheight': params.autoHeight\n  }, {\n    'rtl': rtl\n  }, {\n    'grid': params.grid && params.grid.rows > 1\n  }, {\n    'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n  }, {\n    'android': device.android\n  }, {\n    'ios': device.ios\n  }, {\n    'css-mode': params.cssMode\n  }, {\n    'centered': params.cssMode && params.centeredSlides\n  }, {\n    'watch-progress': params.watchSlidesProgress\n  }], params.containerModifierClass);\n  classNames.push(...suffixes);\n  el.classList.add(...classNames);\n  swiper.emitContainerClasses();\n}\nfunction removeClasses() {\n  const swiper = this;\n  const el = swiper.el,\n    classNames = swiper.classNames;\n  el.classList.remove(...classNames);\n  swiper.emitContainerClasses();\n}\nvar classes = {\n  addClasses,\n  removeClasses\n};\nfunction checkOverflow() {\n  const swiper = this;\n  const wasLocked = swiper.isLocked,\n    params = swiper.params;\n  const slidesOffsetBefore = params.slidesOffsetBefore;\n  if (slidesOffsetBefore) {\n    const lastSlideIndex = swiper.slides.length - 1;\n    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n    swiper.isLocked = swiper.size > lastSlideRightEdge;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n  if (params.allowSlideNext === true) {\n    swiper.allowSlideNext = !swiper.isLocked;\n  }\n  if (params.allowSlidePrev === true) {\n    swiper.allowSlidePrev = !swiper.isLocked;\n  }\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n  }\n  if (wasLocked !== swiper.isLocked) {\n    swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n  }\n}\nvar checkOverflow$1 = {\n  checkOverflow\n};\nvar defaults = {\n  init: true,\n  direction: 'horizontal',\n  oneWayMovement: false,\n  touchEventsTarget: 'wrapper',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  resizeObserver: true,\n  nested: false,\n  createElements: false,\n  eventsPrefix: 'swiper',\n  enabled: true,\n  focusableElements: 'input, select, option, textarea, button, video, label',\n  // Overrides\n  width: null,\n  height: null,\n  //\n  preventInteractionOnTransition: false,\n  // ssr\n  userAgent: null,\n  url: null,\n  // To support iOS's swipe-to-go-back gesture (when being used in-app).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n  // Autoheight\n  autoHeight: false,\n  // Set wrapper width\n  setWrapperSize: false,\n  // Virtual Translate\n  virtualTranslate: false,\n  // Effects\n  effect: 'slide',\n  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n  breakpointsBase: 'window',\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  slidesPerGroupAuto: false,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0,\n  // in px\n  slidesOffsetAfter: 0,\n  // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: true,\n  // Round length\n  roundLengths: false,\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 5,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n  // Progress\n  watchSlidesProgress: false,\n  // Cursor\n  grabCursor: false,\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n  // loop\n  loop: false,\n  loopAddBlankSlides: true,\n  loopAdditionalSlides: 0,\n  loopPreventsSliding: true,\n  // rewind\n  rewind: false,\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null,\n  // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n  // Passive Listeners\n  passiveListeners: true,\n  maxBackfaceHiddenSlides: 10,\n  // NS\n  containerModifierClass: 'swiper-',\n  // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideFullyVisibleClass: 'swiper-slide-fully-visible',\n  slideNextClass: 'swiper-slide-next',\n  slidePrevClass: 'swiper-slide-prev',\n  wrapperClass: 'swiper-wrapper',\n  lazyPreloaderClass: 'swiper-lazy-preloader',\n  lazyPreloadPrevNext: 0,\n  // Callbacks\n  runCallbacksOnInit: true,\n  // Internals\n  _emitClasses: false\n};\nfunction moduleExtendParams(params, allModulesParams) {\n  return function extendParams(obj) {\n    if (obj === void 0) {\n      obj = {};\n    }\n    const moduleParamName = Object.keys(obj)[0];\n    const moduleParams = obj[moduleParamName];\n    if (typeof moduleParams !== 'object' || moduleParams === null) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (params[moduleParamName] === true) {\n      params[moduleParamName] = {\n        enabled: true\n      };\n    }\n    if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n      params[moduleParamName].auto = true;\n    }\n    if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n      params[moduleParamName].auto = true;\n    }\n    if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n      params[moduleParamName].enabled = true;\n    }\n    if (!params[moduleParamName]) params[moduleParamName] = {\n      enabled: false\n    };\n    extend(allModulesParams, obj);\n  };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n  eventsEmitter,\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  events: events$1,\n  breakpoints,\n  checkOverflow: checkOverflow$1,\n  classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n  constructor() {\n    let el;\n    let params;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n      params = args[0];\n    } else {\n      el = args[0];\n      params = args[1];\n    }\n    if (!params) params = {};\n    params = extend({}, params);\n    if (el && !params.el) params.el = el;\n    const document = getDocument();\n    if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n      const swipers = [];\n      document.querySelectorAll(params.el).forEach(containerEl => {\n        const newParams = extend({}, params, {\n          el: containerEl\n        });\n        swipers.push(new Swiper(newParams));\n      });\n      // eslint-disable-next-line no-constructor-return\n      return swipers;\n    }\n\n    // Swiper Instance\n    const swiper = this;\n    swiper.__swiper__ = true;\n    swiper.support = getSupport();\n    swiper.device = getDevice({\n      userAgent: params.userAgent\n    });\n    swiper.browser = getBrowser();\n    swiper.eventsListeners = {};\n    swiper.eventsAnyListeners = [];\n    swiper.modules = [...swiper.__modules__];\n    if (params.modules && Array.isArray(params.modules)) {\n      swiper.modules.push(...params.modules);\n    }\n    const allModulesParams = {};\n    swiper.modules.forEach(mod => {\n      mod({\n        params,\n        swiper,\n        extendParams: moduleExtendParams(params, allModulesParams),\n        on: swiper.on.bind(swiper),\n        once: swiper.once.bind(swiper),\n        off: swiper.off.bind(swiper),\n        emit: swiper.emit.bind(swiper)\n      });\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = extend({}, defaults, allModulesParams);\n\n    // Extend defaults with passed params\n    swiper.params = extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = extend({}, swiper.params);\n    swiper.passedParams = extend({}, params);\n\n    // add event listeners\n    if (swiper.params && swiper.params.on) {\n      Object.keys(swiper.params.on).forEach(eventName => {\n        swiper.on(eventName, swiper.params.on[eventName]);\n      });\n    }\n    if (swiper.params && swiper.params.onAny) {\n      swiper.onAny(swiper.params.onAny);\n    }\n\n    // Extend Swiper\n    Object.assign(swiper, {\n      enabled: swiper.params.enabled,\n      el,\n      // Classes\n      classNames: [],\n      // Slides\n      slides: [],\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n      //\n      isBeginning: true,\n      isEnd: false,\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n      cssOverflowAdjustment() {\n        // Returns 0 unless `translate` is > 2**23\n        // Should be subtracted from css values to prevent overflow\n        return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n      },\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n      // Touch Events\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        focusableElements: swiper.params.focusableElements,\n        // Last click time\n        lastClickTime: 0,\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        startMoving: undefined,\n        pointerId: null,\n        touchId: null\n      },\n      // Clicks\n      allowClick: true,\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0\n      },\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0\n    });\n    swiper.emit('_swiper');\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    // eslint-disable-next-line no-constructor-return\n    return swiper;\n  }\n  getDirectionLabel(property) {\n    if (this.isHorizontal()) {\n      return property;\n    }\n    // prettier-ignore\n    return {\n      'width': 'height',\n      'margin-top': 'margin-left',\n      'margin-bottom ': 'margin-right',\n      'margin-left': 'margin-top',\n      'margin-right': 'margin-bottom',\n      'padding-left': 'padding-top',\n      'padding-right': 'padding-bottom',\n      'marginRight': 'marginBottom'\n    }[property];\n  }\n  getSlideIndex(slideEl) {\n    const slidesEl = this.slidesEl,\n      params = this.params;\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    const firstSlideIndex = elementIndex(slides[0]);\n    return elementIndex(slideEl) - firstSlideIndex;\n  }\n  getSlideIndexByData(index) {\n    return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n  }\n  recalcSlides() {\n    const swiper = this;\n    const slidesEl = swiper.slidesEl,\n      params = swiper.params;\n    swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n  }\n  enable() {\n    const swiper = this;\n    if (swiper.enabled) return;\n    swiper.enabled = true;\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n    swiper.emit('enable');\n  }\n  disable() {\n    const swiper = this;\n    if (!swiper.enabled) return;\n    swiper.enabled = false;\n    if (swiper.params.grabCursor) {\n      swiper.unsetGrabCursor();\n    }\n    swiper.emit('disable');\n  }\n  setProgress(progress, speed) {\n    const swiper = this;\n    progress = Math.min(Math.max(progress, 0), 1);\n    const min = swiper.minTranslate();\n    const max = swiper.maxTranslate();\n    const current = (max - min) * progress + min;\n    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  emitContainerClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const cls = swiper.el.className.split(' ').filter(className => {\n      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n    });\n    swiper.emit('_containerClasses', cls.join(' '));\n  }\n  getSlideClasses(slideEl) {\n    const swiper = this;\n    if (swiper.destroyed) return '';\n    return slideEl.className.split(' ').filter(className => {\n      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n    }).join(' ');\n  }\n  emitSlidesClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const updates = [];\n    swiper.slides.forEach(slideEl => {\n      const classNames = swiper.getSlideClasses(slideEl);\n      updates.push({\n        slideEl,\n        classNames\n      });\n      swiper.emit('_slideClass', slideEl, classNames);\n    });\n    swiper.emit('_slideClasses', updates);\n  }\n  slidesPerViewDynamic(view, exact) {\n    if (view === void 0) {\n      view = 'current';\n    }\n    if (exact === void 0) {\n      exact = false;\n    }\n    const swiper = this;\n    const params = swiper.params,\n      slides = swiper.slides,\n      slidesGrid = swiper.slidesGrid,\n      slidesSizesGrid = swiper.slidesSizesGrid,\n      swiperSize = swiper.size,\n      activeIndex = swiper.activeIndex;\n    let spv = 1;\n    if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      // eslint-disable-next-line\n      if (view === 'current') {\n        for (let i = activeIndex + 1; i < slides.length; i += 1) {\n          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      } else {\n        // previous\n        for (let i = activeIndex - 1; i >= 0; i -= 1) {\n          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      }\n    }\n    return spv;\n  }\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const snapGrid = swiper.snapGrid,\n      params = swiper.params;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      }\n    });\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n      setTranslate();\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n        const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n        translated = swiper.slideTo(slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n  changeDirection(newDirection, needUpdate) {\n    if (needUpdate === void 0) {\n      needUpdate = true;\n    }\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n      return swiper;\n    }\n    swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n    swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n    swiper.emitContainerClasses();\n    swiper.params.direction = newDirection;\n    swiper.slides.forEach(slideEl => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n    return swiper;\n  }\n  changeLanguageDirection(direction) {\n    const swiper = this;\n    if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n    swiper.rtl = direction === 'rtl';\n    swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n    if (swiper.rtl) {\n      swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'rtl';\n    } else {\n      swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'ltr';\n    }\n    swiper.update();\n  }\n  mount(element) {\n    const swiper = this;\n    if (swiper.mounted) return true;\n\n    // Find el\n    let el = element || swiper.params.el;\n    if (typeof el === 'string') {\n      el = document.querySelector(el);\n    }\n    if (!el) {\n      return false;\n    }\n    el.swiper = swiper;\n    if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === 'SWIPER-CONTAINER') {\n      swiper.isElement = true;\n    }\n    const getWrapperSelector = () => {\n      return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n    };\n    const getWrapper = () => {\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        const res = el.shadowRoot.querySelector(getWrapperSelector());\n        // Children needs to return slot items\n        return res;\n      }\n      return elementChildren(el, getWrapperSelector())[0];\n    };\n    // Find Wrapper\n    let wrapperEl = getWrapper();\n    if (!wrapperEl && swiper.params.createElements) {\n      wrapperEl = createElement('div', swiper.params.wrapperClass);\n      el.append(wrapperEl);\n      elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n        wrapperEl.append(slideEl);\n      });\n    }\n    Object.assign(swiper, {\n      el,\n      wrapperEl,\n      slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n      hostEl: swiper.isElement ? el.parentNode.host : el,\n      mounted: true,\n      // RTL\n      rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n      wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n    });\n    return true;\n  }\n  init(el) {\n    const swiper = this;\n    if (swiper.initialized) return swiper;\n    const mounted = swiper.mount(el);\n    if (mounted === false) return swiper;\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor && swiper.enabled) {\n      swiper.setGrabCursor();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n    }\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    }\n\n    // Attach events\n    swiper.attachEvents();\n    const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n    if (swiper.isElement) {\n      lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n    }\n    lazyElements.forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      } else {\n        imageEl.addEventListener('load', e => {\n          processLazyPreloader(swiper, e.target);\n        });\n      }\n    });\n    preload(swiper);\n\n    // Init Flag\n    swiper.initialized = true;\n    preload(swiper);\n\n    // Emit\n    swiper.emit('init');\n    swiper.emit('afterInit');\n    return swiper;\n  }\n  destroy(deleteInstance, cleanStyles) {\n    if (deleteInstance === void 0) {\n      deleteInstance = true;\n    }\n    if (cleanStyles === void 0) {\n      cleanStyles = true;\n    }\n    const swiper = this;\n    const params = swiper.params,\n      el = swiper.el,\n      wrapperEl = swiper.wrapperEl,\n      slides = swiper.slides;\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      el.removeAttribute('style');\n      wrapperEl.removeAttribute('style');\n      if (slides && slides.length) {\n        slides.forEach(slideEl => {\n          slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n          slideEl.removeAttribute('style');\n          slideEl.removeAttribute('data-swiper-slide-index');\n        });\n      }\n    }\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach(eventName => {\n      swiper.off(eventName);\n    });\n    if (deleteInstance !== false) {\n      swiper.el.swiper = null;\n      deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n    return null;\n  }\n  static extendDefaults(newDefaults) {\n    extend(extendedDefaults, newDefaults);\n  }\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n  static get defaults() {\n    return defaults;\n  }\n  static installModule(mod) {\n    if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n    const modules = Swiper.prototype.__modules__;\n    if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n      modules.push(mod);\n    }\n  }\n  static use(module) {\n    if (Array.isArray(module)) {\n      module.forEach(m => Swiper.installModule(m));\n      return Swiper;\n    }\n    Swiper.installModule(module);\n    return Swiper;\n  }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n  Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n  });\n});\nSwiper.use([Resize, Observer]);\nexport { Swiper as S, defaults as d };","import { displayFlashMessage, showLoadingMessage, hideLoadingMessage } from '../../util/methods';\nimport { loadSectionContent } from './product_page';\n\n$(document).on('turbolinks:load', function() {\n  if ($('.js-new-product-rating-form').length) initializeRatingsFormHandler();\n});\n\nexport function initializeRatingsFormHandler() {\n  $('.js-new-product-rating-form').on('submit', function(){\n    showLoadingMessage('Submitting Rating...');\n  }).on('ajax:success', function(e, data, status, xhr) {\n    hideLoadingMessage();\n    var parsedData = JSON.parse(data);\n\n    if (parsedData['success']) {\n      // refresh ratings list\n      let $ratingsSection = $('#js-tab-content-ratings');\n      loadSectionContent($ratingsSection, parsedData['ratings_path'], true);\n\n      swal({\n        title: \"Thanks!\",\n        text: \"We appreciate your rating!\",\n        icon: \"success\",\n        buttons: {\n          confirm: {\n            text: \"OK\",\n            value: true,\n            visible: true,\n            className: \"\",\n            closeModal: true\n          }\n        }\n      });\n    } else {\n      swal({\n        title: \"Uh Oh!\",\n        text: \"Review failed. You are not currently allowed to review products on Blender Market. Please contact support for more information.\",\n        icon: \"warning\",\n        buttons: {\n          confirm: {\n            text: \"OK\",\n            value: true,\n            visible: true,\n            className: \"\",\n            closeModal: true\n          }\n        }\n      });\n    }\n  }).on('ajax:error', function(e, xhr, status, error) {\n    hideLoadingMessage();\n    displayFlashMessage('danger', error);\n  });\n}\n","import { loadSectionContent } from './product_page';\n\n$(document).on('turbolinks:load', function() {\n  if ($('#js-tab-content-ratings .js-pagyContainer').length) initializeRatingsPaginationHandler();\n});\n\nexport function initializeRatingsPaginationHandler() {\n  let $pagyLinks = $('.js-pagyContainer').find('.page-link');\n  let $ratingsSection = $('#js-tab-content-ratings');\n\n  $pagyLinks.each(function() {\n    $(this).on('click', function(e) {\n      e.preventDefault();\n      let $this = $(this);\n      let paginatedRatingsURL = $this.attr('href');\n\n      if (!$this.parent().hasClass('active')) {\n        loadSectionContent($ratingsSection, paginatedRatingsURL, true);\n      }\n    });\n  });\n}","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\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","/**!\n * Sortable 1.14.0\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}\nvar version = \"1.14.0\";\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);\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*/\nel, /**String*/\nselector) {\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*/\nel, /**String*/\nselector, /**HTMLElement*/\nctx, 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\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 * Returns the \"bounding client rect\" of given element\n * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted\n * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container\n * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone\n * @param  {[HTMLElement]} container              The parent the element will be placed in\n * @return {Object}                               The boundingClientRect of el, with specified adjustments\n */\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; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n    // Not needed on <= IE11\n\n    if (!IE11OrLess) {\n      do {\n        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n          var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\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 * Checks if a side of an element is scrolled past a side of its parents\n * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question\n * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\nfunction isScrolledPast(el, elSide, parentSide) {\n  var parent = getParentAutoScrollElement(el, true),\n    elSideVal = getRect(el)[elSide];\n  /* jshint boss:true */\n\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 * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param  {HTMLElement} el       The parent element\n * @param  {Number} childNum      The index of the child\n * @param  {Object} options       Parent Sortable's options\n * @return {HTMLElement}          The child at index childNum, or null if not found\n */\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 * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param  {HTMLElement} el       Parent element\n * @param  {selector} selector    Any other elements that should be ignored\n * @return {HTMLElement}          The last child, ignoring ghostEl\n */\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 * Returns the index of an element within its parent for a selected set of\n * elements\n * @param  {HTMLElement} el\n * @param  {selector} selector\n * @return {number}\n */\n\nfunction index(el, selector) {\n  var index = 0;\n  if (!el || !el.parentNode) {\n    return -1;\n  }\n  /* jshint boss:true */\n\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 * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param  {HTMLElement} el\n * @return {Array}             Offsets in the format of [left, top]\n */\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 * Returns the index of the object within the given array\n * @param  {Array} arr   Array that may or may not hold the object\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\n * @return {Number}      The index of the object in the array, or -1\n */\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}\nvar expando = 'Sortable' + new Date().getTime();\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); // If animating: compensate for current animation\n\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        } // if fromRect != toRect: animate\n\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}\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; // Fire global events if it exists in this sortable\n\n      if (sortable[plugin.pluginName][eventNameGlobal]) {\n        sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      } // Only fire plugin event if plugin is enabled in this sortable,\n      // and plugin has event defined\n\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; // Add default options from plugin\n\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; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\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};\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); // Support for new CustomEvent feature\n\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}\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  _silent = false,\n  savedInputChecked = [];\n/** @const */\n\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; // false when <= IE11\n\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  /**\n   * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n   * @param  {Number} x      X position\n   * @param  {Number} y      Y position\n   * @return {HTMLElement}   Element of the first found nearest Sortable\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  }; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\nif (documentExists) {\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 * @class  Sortable\n * @param  {HTMLElement}  el\n * @param  {Object}       [options]\n */\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\n  this.options = options = _extends({}, options); // Export instance\n\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    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n    emptyInsertThreshold: 5\n  };\n  PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n  for (var name in defaults) {\n    !(name in options) && (options[name] = defaults[name]);\n  }\n  _prepareGroup(options); // Bind all private methods\n\n  for (var fn in this) {\n    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n      this[fn] = this[fn].bind(this);\n    }\n  } // Setup drag mode\n\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  } // Bind events\n\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); // Restore sorting\n\n  options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n  _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */\n{\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 */\n  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); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\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    } // cancel dnd if original target is content editable\n\n    if (originalTarget.isContentEditable) {\n      return;\n    } // Safari ignores further event handling after mousedown\n\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    } // Get the index of the dragged element within its parent\n\n    oldIndex = index(target);\n    oldDraggableIndex = index(target, options.draggable); // Check filter\n\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.cancelable && 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.cancelable && evt.preventDefault();\n        return; // cancel dnd\n      }\n    }\n\n    if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n      return;\n    } // Prepare `dragstart`\n\n    this._prepareDragStart(evt, touch, target);\n  },\n  _prepareDragStart: function _prepareDragStart( /** Event */\n  evt, /** Touch */\n  touch, /** HTMLElement */\n  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        } // Delayed drag has been triggered\n        // we can re-enable the events: touchmove/mousemove\n\n        _this._disableDelayedDragEvents();\n        if (!FireFox && _this.nativeDraggable) {\n          dragEl.draggable = true;\n        } // Bind the events: dragstart/dragend\n\n        _this._triggerDragStart(evt, touch); // Drag start event\n\n        _dispatchEvent({\n          sortable: _this,\n          name: 'choose',\n          originalEvent: evt\n        }); // Chosen item\n\n        toggleClass(dragEl, options.chosenClass, true);\n      }; // Disable \"draggable\"\n\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      on(ownerDocument, 'mouseup', _this._onDrop);\n      on(ownerDocument, 'touchend', _this._onDrop);\n      on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n      if (FireFox && this.nativeDraggable) {\n        this.options.touchStartThreshold = 4;\n        dragEl.draggable = true;\n      }\n      pluginEvent('delayStart', this, {\n        evt: evt\n      }); // Delay is impossible for native DnD in Edge or IE\n\n      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n        if (Sortable.eventCanceled) {\n          this._onDrop();\n          return;\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\n        on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n        on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n        on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\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 **/\n  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, 'mousemove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n  },\n  _triggerDragStart: function _triggerDragStart( /** Event */\n  evt, /** Touch */\n  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        // Timeout neccessary for IE9\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; // Apply effect\n\n      !fallback && toggleClass(dragEl, options.dragClass, false);\n      toggleClass(dragEl, options.ghostClass, true);\n      Sortable.active = this;\n      fallback && this._appendGhost(); // Drag start event\n\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 = parent.parentNode);\n      }\n      _unhideGhostForTarget();\n    }\n  },\n  _onTouchMove: function _onTouchMove( /**TouchEvent*/\n  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); // only set the status to dragging, when we are actually dragging\n\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; // Position absolutely\n\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); // Set transform-origin\n\n      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n    }\n  },\n  _onDragStart: function _onDragStart( /**Event*/\n  evt, /**boolean*/\n  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.draggable = false;\n      cloneEl.style['will-change'] = '';\n      this._hideClone();\n      toggleClass(cloneEl, this.options.chosenClass, false);\n      Sortable.clone = cloneEl;\n    } // #1143: IFrame support workaround\n\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); // Set proper drop events\n\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); // #1276 fix:\n\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    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*/\n  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    } // Capture animation state\n\n    function capture() {\n      dragOverEvent('dragOverAnimationCapture');\n      _this.captureAnimationState();\n      if (_this !== fromSortable) {\n        fromSortable.captureAnimationState();\n      }\n    } // Return invocation when dragEl is inserted (or completed)\n\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        } // Animation\n\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      } // Null lastTarget if it is not inside a previously swapped element\n\n      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n        lastTarget = null;\n      } // no bubbling and not fallback\n\n      if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n        dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n        !insertion && nearestEmptyInsertDetectEvent(evt);\n      }\n      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n      return completedFired = true;\n    } // Call when dragEl has been inserted\n\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\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        // If already at end of list: Do not insert\n        if (elLastChild === dragEl) {\n          return completed(false);\n        } // if there is a last element, it is the target\n\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          el.appendChild(dragEl);\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        } // If dragEl is already beside target: Do not insert\n\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          } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n          if (scrolledPastTop) {\n            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n          }\n          parentEl = dragEl.parentNode; // actualization\n          // must be done before animation\n\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, 'touchcancel', this._onDrop);\n    off(document, 'selectstart', this);\n  },\n  _onDrop: function _onDrop( /**Event*/\n  evt) {\n    var el = this.el,\n      options = this.options; // Get the index of the dragged element within its parent\n\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    pluginEvent('drop', this, {\n      evt: evt\n    });\n    parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\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); // Unbind events\n\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'] = ''; // Remove classes\n        // ghostClass is added in dragStarted\n\n        if (moved && !awaitingDragStarted) {\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n        }\n        toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\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            }); // Remove event\n\n            _dispatchEvent({\n              sortable: this,\n              name: 'remove',\n              toEl: parentEl,\n              originalEvent: evt\n            }); // drag from one list and drop into another\n\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          }); // Save sorting\n\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*/\n  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  /**\n   * Serializes the item into an array of string.\n   * @returns {String[]}\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  /**\n   * Sorts the elements according to the array.\n   * @param  {String[]}  order  order of the items\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  /**\n   * Save the current sorting\n   */\n  save: function save() {\n    var store = this.options.store;\n    store && store.set && store.set(this);\n  },\n  /**\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.\n   * @param   {HTMLElement}  el\n   * @param   {String}       [selector]  default: `options.draggable`\n   * @returns {HTMLElement|null}\n   */\n  closest: function closest$1(el, selector) {\n    return closest(el, selector || this.options.draggable, this.el, false);\n  },\n  /**\n   * Set/get option\n   * @param   {string} name\n   * @param   {*}      [value]\n   * @returns {*}\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  /**\n   * Destroy\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    } // Remove draggable attributes\n\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; // show clone at dragEl or original position\n\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*/\nevt) {\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; // Support for new CustomEvent feature\n\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 rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n  var spacer = 10;\n  return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n  var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n  var spacer = 10;\n  return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\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 * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param  {HTMLElement} target       The target whose position dragEl is being inserted at\n * @return {Number}                   Direction dragEl must be swapped\n */\n\nfunction _getInsertDirection(target) {\n  if (index(dragEl) < index(target)) {\n    return 1;\n  } else {\n    return -1;\n  }\n}\n/**\n * Generate id\n * @param   {HTMLElement} el\n * @returns {String}\n * @private\n */\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} // Fixed #973:\n\nif (documentExists) {\n  on(document, 'touchmove', function (evt) {\n    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n      evt.preventDefault();\n    }\n  });\n} // Export utils\n\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};\n/**\n * Get the Sortable instance of an element\n * @param  {HTMLElement} element The element\n * @return {Sortable|undefined}         The instance of Sortable\n */\n\nSortable.get = function (element) {\n  return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted\n */\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 * Create sortable instance\n * @param {HTMLElement}  el\n * @param {Object}      [options]\n */\n\nSortable.create = function (el, options) {\n  return new Sortable(el, options);\n}; // Export\n\nSortable.version = version;\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    }; // Bind all private methods\n\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\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; // 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\n      if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n        autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n        var ogElemScroller = getParentAutoScrollElement(elem, true);\n        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n          pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\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; // New scroll root, set scrollEl\n\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\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\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);\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});\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}\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.supportPointer) {\n      on(document, 'pointerup', this._deselectMultiDrag);\n    } else {\n      on(document, 'mouseup', this._deselectMultiDrag);\n      on(document, 'touchend', this._deselectMultiDrag);\n    }\n    on(document, 'keydown', this._checkKeyDown);\n    on(document, 'keyup', this._checkKeyUp);\n    this.defaults = {\n      selectedClass: 'sortable-selected',\n      multiDragKey: null,\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      }); // Sort multi-drag elements\n\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        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        } // Remove all auxiliary multidrag items from el, if sorting enabled\n\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; // If leaving sort:false root, or already folding - Fold to new location\n\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); // 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\n            parentEl.appendChild(multiDragElement);\n          });\n          folding = true;\n        } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\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); // Unfold animation for clones if showing from hidden\n\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; // Multi-drag selection\n\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            originalEvt: evt\n          }); // Modifier activated, select from last to dragEl\n\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              // 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              for (; i < n; i++) {\n                if (~multiDragElements.indexOf(children[i])) 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                  originalEvt: evt\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            originalEvt: evt\n          });\n        }\n      } // Multi-drag drop\n\n      if (dragStarted && this.isMultiDrag) {\n        folding = false; // Do not \"unfold\" after around dragEl if reverted\n\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; // Prepare unfold animation\n\n                  toSortable.addAnimationState({\n                    target: multiDragElement,\n                    rect: rect\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\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            }); // 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\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              }\n            }\n          } // Must be done after capturing individual rects (scroll bar)\n\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n          toSortable.animateAll();\n        }\n        multiDragSortable = toSortable;\n      } // Remove clones if necessary\n\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; // Only deselect if selection is in this sortable\n\n      if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\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          originalEvt: 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      /**\n       * Selects the provided multi-drag item\n       * @param  {HTMLElement} el    The element to be selected\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      /**\n       * Deselects the provided multi-drag item\n       * @param  {HTMLElement} el    The element to be deselected\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        }); // multiDragElements will already be sorted if folding\n\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 * Insert multi-drag clones\n * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted\n * @param  {HTMLElement} rootEl\n */\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}\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };","var 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","import Swiper from 'swiper';\nimport { Keyboard, Navigation, Pagination, Thumbs } from 'swiper/modules';\n\nlet productImageSwiper;\nlet categorySwiper;\nlet productImageSwiperThumb;\n\n$(document).on('turbolinks:load', function(){\n\n  // Image gallery thumbnail swiper initialization\n  productImageSwiperThumb = new Swiper('.swiper-image-thumbnail', {\n    lazy: true,\n    spaceBetween: 8,\n    slidesPerView: 8,\n    watchSlidesVisibility: true,\n    watchSlidesProgress: true,\n    slideToClickedSlide: true,\n    breakpoints: {\n      320: {\n        slidesPerView: 3.5\n      },\n      480: {\n        slidesPerView: 5\n      },\n      768: {\n        slidesPerView: 8\n      },\n    },\n  });\n\n  // Image gallery main swiper initialization\n  productImageSwiper = new Swiper ('.swiper-image-gallery', {\n    modules: [Navigation, Pagination, Keyboard, Thumbs], // configure Swiper to use modules\n    direction: 'horizontal',\n    lazy: true,\n    loop: true,\n    spaceBetween: 0,\n    keyboard: {\n      enabled: true,\n      onlyInViewport: true,\n    },\n    navigation: {\n      prevEl: '.swiper-button-prev' ,\n      nextEl: '.swiper-button-next' ,\n    },\n    thumbs: {\n      swiper: productImageSwiperThumb,\n    },\n    on: {\n      afterInit: function () {\n        this.initialized = true;\n        updateNavigationButtons(this);\n      },\n      slideChange: function () {\n        if (this.initialized) {\n          updateNavigationButtons(this);\n        }\n      }\n    }\n  });\n\n  // Initializes the swiper on category show pages\n  categorySwiper = new Swiper ('.swiper-container-category', {\n    modules: [Navigation, Keyboard], // configure Swiper to use modules\n    direction: 'horizontal',\n    keyboard: {\n      enabled: true,\n      onlyInViewport: true,\n    },\n    slidesPerView: 1.5, \n    spaceBetween: 20,\n    breakpoints: {\n      400: {\n        slidesPerView: 2\n      },\n      768: {\n        slidesPerView: 4\n      },\n      1024: {\n        slidesPerView: 6,\n        spaceBetween: 24\n      },\n    },\n    loop: false, // Enable loop mode\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n  });\n\n  // this is to hide the prev button when on the first slide\n  function updateNavigationButtons(swiperInstance) {\n    var $swiperPrevButton = $('.swiper-button-prev');\n    if (swiperInstance.realIndex === 0) {\n      $swiperPrevButton.addClass('d-none');\n    } else {\n      $swiperPrevButton.removeClass('d-none');\n    }\n  }\n\n})\n\nexport { productImageSwiper, categorySwiper }\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;\n(function (factory) {\n  var registeredInModuleLoader;\n  if (typeof define === 'function' && define.amd) {\n    define(factory);\n    registeredInModuleLoader = true;\n  }\n  if (typeof exports === 'object') {\n    module.exports = factory();\n    registeredInModuleLoader = true;\n  }\n  if (!registeredInModuleLoader) {\n    var OldCookies = window.Cookies;\n    var api = window.Cookies = factory();\n    api.noConflict = function () {\n      window.Cookies = OldCookies;\n      return api;\n    };\n  }\n})(function () {\n  function extend() {\n    var i = 0;\n    var result = {};\n    for (; i < arguments.length; i++) {\n      var attributes = arguments[i];\n      for (var key in attributes) {\n        result[key] = attributes[key];\n      }\n    }\n    return result;\n  }\n  function decode(s) {\n    return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n  }\n  function init(converter) {\n    function api() {}\n    function set(key, value, attributes) {\n      if (typeof document === 'undefined') {\n        return;\n      }\n      attributes = extend({\n        path: '/'\n      }, api.defaults, attributes);\n      if (typeof attributes.expires === 'number') {\n        attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n      }\n\n      // We're using \"expires\" because \"max-age\" is not supported by IE\n      attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n      try {\n        var result = JSON.stringify(value);\n        if (/^[\\{\\[]/.test(result)) {\n          value = result;\n        }\n      } catch (e) {}\n      value = converter.write ? converter.write(value, key) : encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n      key = encodeURIComponent(String(key)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\\(\\)]/g, escape);\n      var stringifiedAttributes = '';\n      for (var attributeName in attributes) {\n        if (!attributes[attributeName]) {\n          continue;\n        }\n        stringifiedAttributes += '; ' + attributeName;\n        if (attributes[attributeName] === true) {\n          continue;\n        }\n\n        // Considers RFC 6265 section 5.2:\n        // ...\n        // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n        //     character:\n        // Consume the characters of the unparsed-attributes up to,\n        // not including, the first %x3B (\";\") character.\n        // ...\n        stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n      }\n      return document.cookie = key + '=' + value + stringifiedAttributes;\n    }\n    function get(key, json) {\n      if (typeof document === 'undefined') {\n        return;\n      }\n      var jar = {};\n      // To prevent the for loop in the first place assign an empty array\n      // in case there are no cookies at all.\n      var cookies = document.cookie ? document.cookie.split('; ') : [];\n      var i = 0;\n      for (; i < cookies.length; i++) {\n        var parts = cookies[i].split('=');\n        var cookie = parts.slice(1).join('=');\n        if (!json && cookie.charAt(0) === '\"') {\n          cookie = cookie.slice(1, -1);\n        }\n        try {\n          var name = decode(parts[0]);\n          cookie = (converter.read || converter)(cookie, name) || decode(cookie);\n          if (json) {\n            try {\n              cookie = JSON.parse(cookie);\n            } catch (e) {}\n          }\n          jar[name] = cookie;\n          if (key === name) {\n            break;\n          }\n        } catch (e) {}\n      }\n      return key ? jar[key] : jar;\n    }\n    api.set = set;\n    api.get = function (key) {\n      return get(key, false /* read as raw */);\n    };\n\n    api.getJSON = function (key) {\n      return get(key, true /* read as json */);\n    };\n\n    api.remove = function (key, attributes) {\n      set(key, '', extend(attributes, {\n        expires: -1\n      }));\n    };\n    api.defaults = {};\n    api.withConverter = init;\n    return api;\n  }\n  return init(function () {});\n});","import { displayFlashMessage, showLoadingMessage, hideLoadingMessage } from '../../../util/methods';\n\n$(document).on('turbolinks:load', function() {\n  /*\n  Besides creating/editing a version, we are combining the following capabilities in the version form without having to reload the page:\n  - upload or delete product files\n  - create or destroy folders\n  - sort/reorganize folders\n  - sort/reorganize product files in and out of folders\n  */\n\n  var $newVersionForm = $('.new_product_version');\n  var $versionEditForm = $('.edit_product_version');\n\n  if ($newVersionForm.length || $versionEditForm.length) {\n    var $versionFilesContainer = $('#js-version-files-container');\n    var $downloadsContainer = $('#js-downloads-container');\n    var $addFilesBtn = $('#js-add-files');\n    var $downloadFolders = $('.js-sortable-folder');\n    var $downloadFolderForm = $('form#new_download_folder');\n    var $downloadFoldersContainer = $('.js-download-folders-container');\n    var $noFolderDownloadsContainer = $('#no-folder-downloads');\n    var $addFolderBtn = $('#js-add-folder-btn');\n    var $hideFolderFormBtn = $('#js-hide-folder-form-btn');\n    var $downloadFormContainer = $('.download-form-container');\n    var $folderFormContainer = $('.folder-form-container');\n    var $downloadsModal = $('#js-downloads-modal');\n\n    /* Nested version downloads -----------------------------------------------*/\n    // Code in this section is a work around to make cocoon insert multiple nested fields in one click\n\n    // set number of nested fields for cocoon to insert\n    $addFilesBtn.data('count', 0);\n\n    // queue for keeping track of selected downloads for cocoon insert\n    var filesToAdd = new Map();\n\n    // for keeping track of already added files\n    var nestedFileIDs = [];\n\n    $addFilesBtn.on('click', function() {\n      showLoadingMessage('Adding selected downloads');\n    });\n\n    $versionFilesContainer.on('cocoon:before-insert', function(e, itemToInsert) {\n      var $itemToInsert = $(itemToInsert);\n\n      // get first inserted key-value pair in filesToAdd\n      var firstEntry = filesToAdd.entries().next().value;\n\n      if ($itemToInsert && firstEntry.length) {\n\n        var fileID = firstEntry[0];\n        var fileName = firstEntry[1];\n\n        // display file name & store file id\n        $itemToInsert.find('input.form-control').attr('placeholder', fileName);\n        $itemToInsert.find('input[id*=\"download_id\"]').val(fileID);\n      }\n    }).on('cocoon:after-insert', function(e, insertedItem) {\n      var $insertedItem = $(insertedItem);\n      var downloadID = $insertedItem.find('input[id*=\"download_id\"]').val();\n\n      // remove file from queue and track id\n      filesToAdd.delete(downloadID);\n      nestedFileIDs.push(downloadID);\n\n      // when filesToAdd is empty\n      if (!filesToAdd.size) {\n        $downloadsModal.modal('hide');\n        $addFilesBtn.data('count', filesToAdd.size).addClass('disabled');\n        hideLoadingMessage();\n      }\n    });\n    /* End of cocoon-related code -----------------------------------------------*/\n\n    /* ---------------------------------------------------------------------------\n      We populate and clean out nestedFileIDs on modal show & hide.\n      This way we'll always have an updated reference to what's currently in the Version Files section of the form.\n    ----------------------------------------------------------------------------*/\n    $downloadsModal.on('show.bs.modal', function() {\n      // iterate over nested version files to get download_ids of active ones\n      $('input[id*=\"download_id\"]').each(function(){\n        var $this = $(this);\n        var hidden = $this.parent('div.nested-fields').css('display') === 'none';\n        if (!hidden) {\n          nestedFileIDs.push($this.val());\n        }\n      });\n\n      // preselect downloads that are already added to the version files section\n      nestedFileIDs.forEach((downloadID) => $(`.js-download-item-checkbox[value=${downloadID}]`).prop('checked', true)); \n    });\n\n    $downloadsModal.on('hide.bs.modal', function() {\n      nestedFileIDs.forEach((downloadID) => $(`.js-download-item-checkbox[value=${downloadID}]`).prop('checked', false));\n\n      // using the splice method to empty out the nestedFileIDs array so our checkbox listeners can still reference this object\n      nestedFileIDs.splice(0, nestedFileIDs.length);\n    });\n\n    /* Download Folder ---------------------------------------------------------*/\n    if ($downloadFolders.length) {\n      $downloadFolders.each(function() {\n        addFolderElementListeners(this, nestedFileIDs, filesToAdd);\n      });\n    }\n\n    $addFolderBtn.on('click', function(e){\n      e.preventDefault();\n      var $this = $(this);\n      $downloadFormContainer.hide();\n      $folderFormContainer.show();\n      $this.hide();\n      $hideFolderFormBtn.show()\n    });\n\n    $hideFolderFormBtn.on('click', function(e) {\n      e.preventDefault();\n      var $this = $(this);\n      $folderFormContainer.hide();\n      $downloadFormContainer.show();\n      $this.hide();\n      $addFolderBtn.show();\n    });\n\n    // New folder form\n    $downloadFolderForm.on('submit', function() {\n      showLoadingMessage('Creating Folder...');\n    }).on('ajax:success', function(e, data, status, xhr) {\n      hideLoadingMessage();\n      var parsedData = JSON.parse(data);\n      if (parsedData['success']) {\n        var $folder = $(parsedData['html']);\n        addFolderElementListeners($folder[0], nestedFileIDs, filesToAdd);\n        $downloadFoldersContainer.append($($folder));\n        $downloadsContainer.animate({ scrollTop: $folder.offset().top }, 500);\n        displayFlashMessage('success', 'Successfully created download folder!');\n        $(this)[0].reset();\n        $addFolderBtn.trigger('click');\n      } else {\n        displayFlashMessage('danger', 'Failed to create download folder!');\n      }\n    });\n    /* End of Download Folder-related code --------------------------------------*/\n\n    addCheckBoxListeners($noFolderDownloadsContainer, nestedFileIDs, filesToAdd);\n\n    $('.js-sortable-download-item').each(function() {\n      var $this = $(this);\n      var $deleteBtn = $this.find('.js-delete-download');\n      var elementName = $this.find('.js-file-name').text();\n      addElementRemover($deleteBtn, $this, elementName);\n    });\n\n    $(document).one('turbolinks:before-cache', function() {\n      // Bootstrap's modals break if Turbolinks caches them in their \"open\" state\n      // the downloads modal needs to be manually taken down before navigating away\n      // can’t rely on the modal('close') method because it’s asynchronous\n      if ($('body').hasClass('modal-open')) {\n        $downloadsModal.hide().removeAttr('aria-modal').attr('aria-hidden', 'true');\n        $('.modal-backdrop').remove();\n        $('body').removeClass('modal-open');\n      }\n\n      // destroy select2 dropdown to prevent duplication on reload\n      $('#js-version-variant-select').select2('destroy');\n    });\n  }\n\n  // for deletion of versions\n  $('.js-delete-version').each(function() {\n    var $this = $(this);\n    var $parentElement = $this.closest('tr');\n    var elementName = $parentElement.children('td:first').text();\n    addElementRemover($this, $parentElement, elementName);\n  });\n});\n\nfunction addFolderElementListeners(folderElement, nestedFileIDs, filesToAdd) {\n  // sets up necessary listeners for folder nodes\n\n  var $folder = $(folderElement);\n  var $collapsibleDownloadsContainer = $folder.find('.js-download-items-container');\n  var $folderToggler = $folder.find('.folder-toggler');\n  var $folderIcon = $folder.find('.folder-icon');\n  var $deleteFolderBtn = $folder.find('.js-delete-folder');\n  var folderName = $folder.find('.js-folder-name').text();\n\n  addCollapsibleListener($collapsibleDownloadsContainer, $folderToggler, $folderIcon);\n  addCheckBoxListeners($collapsibleDownloadsContainer, nestedFileIDs, filesToAdd);\n  addElementRemover($deleteFolderBtn, $folder, folderName);\n}\n\nfunction addCollapsibleListener($collapsibleDownloadsContainer, $folderToggler, $folderIcon) {\n  $collapsibleDownloadsContainer.on('hidden.bs.collapse', function() {\n    $folderToggler.html('Open Folder');\n    $folderIcon.removeClass('fa-folder-open').addClass('fa-folder');\n  });\n\n  $collapsibleDownloadsContainer.on('shown.bs.collapse', function() {\n    $folderToggler.html('Close Folder');\n    $folderIcon.removeClass('fa-folder').addClass('fa-folder-open');\n  });\n}\n\nfunction addCheckBoxListeners($downloadItemsContainer, nestedFileIDs, filesToAdd) {\n  // takes in a parent node and adds listeners to its children checkboxes\n\n  var $addFilesBtn = $('#js-add-files'); // this element keeps track of the number of nested fields cocoon will insert\n  var $folderCheckBox = $downloadItemsContainer.closest('.js-sortable-folder').find('.js-download-folder-checkbox');\n\n  $downloadItemsContainer.on('change', '.js-download-item-checkbox', function() {\n    // every time a download item checkbox is checked/unchecked, we need to cross reference downloads that has already been added (nestedFileIDs)\n    // if valid, add/remove file to the queue (filesToAdd) & increase/decrease cocoon counter ($addFilesBtn.data('count'))\n    var $checkbox = $(this);\n    var downloadID = $checkbox.val();\n    var fileName = $checkbox.data('file-name');\n    var count = parseInt($addFilesBtn.data('count'));\n    if ($checkbox.is(':checked')) {\n      if (!nestedFileIDs.includes(downloadID)) {\n        filesToAdd.set(downloadID, fileName);\n        $addFilesBtn.data('count', count += 1);\n      }\n    } else {\n      // if a download checkbox is being unchecked, uncheck folder checkbox if it is currently checked\n      if ($folderCheckBox.length && $folderCheckBox.is(':checked')) {\n        $folderCheckBox.prop('checked', false);\n      }\n      if (count > 0 && !nestedFileIDs.includes(downloadID)) {\n        filesToAdd.delete(downloadID);\n        $addFilesBtn.data('count', count -= 1);\n      }\n    }\n\n    count ? $addFilesBtn.removeClass('disabled') : $addFilesBtn.addClass('disabled');\n  });\n\n  if ($folderCheckBox.length) addFolderCheckBoxListener($folderCheckBox, $downloadItemsContainer);\n}\n\nfunction addFolderCheckBoxListener($folderCheckBox, $folderDownloadItemsContainer) {\n  // adds a listener that will check/uncheck all download checkboxes when the folder checkbox is checked/unchecked\n\n  $folderCheckBox.on('change', function() {\n    var $downloadCheckboxes = $folderDownloadItemsContainer.find('.js-download-item-checkbox');\n    if ($folderCheckBox.is(':checked')) {\n      $downloadCheckboxes.each(function() {\n        var $this = $(this);\n        if ($this.is(':not(:checked)')) $this.trigger('click');\n      })\n    } else {\n      $downloadCheckboxes.each(function() {\n        var $this = $(this);\n        if ($this.is(':checked')) $this.trigger('click');\n      })\n    }\n  });\n}\n\nfunction addElementRemover($deleteBtn, $parentElement, elementName){\n  $deleteBtn.on('click', function(e) {\n    e.preventDefault();\n\n    if ($parentElement.hasClass('js-sortable-folder') && folderHasDownloads($parentElement)) {\n      swal({\n        title: \"\",\n        text: \"Can not delete a folder containing file(s)\",\n        icon: \"warning\"\n      });\n    } else {\n      swal({\n        title: \"\",\n        text: `Are you sure you want to delete ${elementName}?`,\n        icon: \"warning\",\n        buttons: {\n          cancel: {\n            text: \"Cancel\",\n            value: false,\n            visible: true,\n            className: \"btn btn-dark\",\n            closeModal: true,\n          },\n          confirm: {\n            text: \"Delete\",\n            value: true,\n            visible: true,\n            className: \"btn btn-primary\",\n            closeModal: true,\n          }\n        }\n      })\n      .then((value) => {\n        if (value) {\n          showLoadingMessage('Deleting file');\n          $.ajax({\n            url: $deleteBtn.attr('href'),\n            method: 'delete',\n            dataType: 'json',\n            success: function(data) {\n              hideLoadingMessage();\n              if (data['success']) {\n                if ($parentElement.hasClass('js-sortable-download-item')) cleanUpFileReferences($parentElement);\n                $parentElement.remove();\n                displayFlashMessage('success', data['message']);\n              } else {\n                displayFlashMessage('danger', data['message']);\n              }\n            }\n          });\n        }\n      });\n    }\n  });\n}\n\nfunction cleanUpFileReferences($fileElement) {\n  var $checkbox = $fileElement.find('.js-download-item-checkbox');\n  var downloadID = $fileElement.data('download-id');\n  var $versionFiles = $(`input[id*='download_id'][value=${downloadID}]`);\n\n  if ($checkbox.is(':checked')) {\n    // trigger listeners to remove file from queue (filesToAdd) & update cocoon counter ($('#js-add-files').data('count'))\n    $checkbox.trigger('click');\n  }\n\n  /*\n    We need to remove version files (product_version_downloads) associated with the deleted download\n    so it doesn't get sent to the backend and cause an ActiveRecord::RecordNotFound error.\n  */\n  $versionFiles.each(function() {\n    var $this = $(this);\n    var $parentElement = $this.parent('div.nested-fields');\n    $parentElement.remove();\n  })\n}\n\nfunction folderHasDownloads($folder) {\n  return $folder.find('.js-sortable-download-item').length ? true : false;\n}\n\nexport function transferFileElementOutOfPond(pond, file, downloadHTML) {\n  //newly uploaded files will be appended to a no-folder container\n\n  var $downloadsContainer = $('#no-folder-downloads');\n  var $downloadElement = $(downloadHTML);\n  var $deleteBtn = $downloadElement.find('.js-delete-download');\n  var fileName = $downloadElement.find('.js-file-name').text();\n\n  addElementRemover($deleteBtn, $downloadElement, fileName);\n  $downloadsContainer.append($downloadElement);\n\n  //remove local FilePond instance of uploaded file\n  if (pond) {\n    pond.removeFile(file.id);\n  }\n\n  // preselect newly added download element\n  $downloadElement.find('.js-download-item-checkbox').trigger('click');\n\n  //scroll to the newly appended element\n  $('#js-downloads-container').animate({ scrollTop: $downloadElement.offset().top }, 500);\n}\n","/*\n * Chartkick.js\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * v3.2.1\n * MIT License\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.Chartkick = factory());\n})(this, function () {\n  'use strict';\n\n  function isArray(variable) {\n    return Object.prototype.toString.call(variable) === \"[object Array]\";\n  }\n  function isFunction(variable) {\n    return variable instanceof Function;\n  }\n  function isPlainObject(variable) {\n    // protect against prototype pollution, defense 2\n    return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n  }\n\n  // https://github.com/madrobby/zepto/blob/master/src/zepto.js\n  function extend(target, source) {\n    var key;\n    for (key in source) {\n      // protect against prototype pollution, defense 1\n      if (key === \"__proto__\") {\n        continue;\n      }\n      if (isPlainObject(source[key]) || isArray(source[key])) {\n        if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n          target[key] = {};\n        }\n        if (isArray(source[key]) && !isArray(target[key])) {\n          target[key] = [];\n        }\n        extend(target[key], source[key]);\n      } else if (source[key] !== undefined) {\n        target[key] = source[key];\n      }\n    }\n  }\n  function merge(obj1, obj2) {\n    var target = {};\n    extend(target, obj1);\n    extend(target, obj2);\n    return target;\n  }\n  var DATE_PATTERN = /^(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)$/i;\n\n  // https://github.com/Do/iso8601.js\n  var ISO8601_PATTERN = /(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)?(:)?(\\d\\d)?([.,]\\d+)?($|Z|([+-])(\\d\\d)(:)?(\\d\\d)?)/i;\n  var DECIMAL_SEPARATOR = String(1.5).charAt(1);\n  function parseISO8601(input) {\n    var day, hour, matches, milliseconds, minutes, month, offset, result, seconds, type, year;\n    type = Object.prototype.toString.call(input);\n    if (type === \"[object Date]\") {\n      return input;\n    }\n    if (type !== \"[object String]\") {\n      return;\n    }\n    matches = input.match(ISO8601_PATTERN);\n    if (matches) {\n      year = parseInt(matches[1], 10);\n      month = parseInt(matches[3], 10) - 1;\n      day = parseInt(matches[5], 10);\n      hour = parseInt(matches[7], 10);\n      minutes = matches[9] ? parseInt(matches[9], 10) : 0;\n      seconds = matches[11] ? parseInt(matches[11], 10) : 0;\n      milliseconds = matches[12] ? parseFloat(DECIMAL_SEPARATOR + matches[12].slice(1)) * 1000 : 0;\n      result = Date.UTC(year, month, day, hour, minutes, seconds, milliseconds);\n      if (matches[13] && matches[14]) {\n        offset = matches[15] * 60;\n        if (matches[17]) {\n          offset += parseInt(matches[17], 10);\n        }\n        offset *= matches[14] === \"-\" ? -1 : 1;\n        result -= offset * 60 * 1000;\n      }\n      return new Date(result);\n    }\n  }\n  // end iso8601.js\n\n  function negativeValues(series) {\n    var i, j, data;\n    for (i = 0; i < series.length; i++) {\n      data = series[i].data;\n      for (j = 0; j < data.length; j++) {\n        if (data[j][1] < 0) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  function toStr(n) {\n    return \"\" + n;\n  }\n  function toFloat(n) {\n    return parseFloat(n);\n  }\n  function toDate(n) {\n    var matches, year, month, day;\n    if (typeof n !== \"object\") {\n      if (typeof n === \"number\") {\n        n = new Date(n * 1000); // ms\n      } else {\n        n = toStr(n);\n        if (matches = n.match(DATE_PATTERN)) {\n          year = parseInt(matches[1], 10);\n          month = parseInt(matches[3], 10) - 1;\n          day = parseInt(matches[5], 10);\n          return new Date(year, month, day);\n        } else {\n          // str\n          // try our best to get the str into iso8601\n          // TODO be smarter about this\n          var str = n.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\");\n          n = parseISO8601(str) || new Date(n);\n        }\n      }\n    }\n    return n;\n  }\n  function toArr(n) {\n    if (!isArray(n)) {\n      var arr = [],\n        i;\n      for (i in n) {\n        if (n.hasOwnProperty(i)) {\n          arr.push([i, n[i]]);\n        }\n      }\n      n = arr;\n    }\n    return n;\n  }\n  function jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n    return function (chart, opts, chartOptions) {\n      var series = chart.data;\n      var options = merge({}, defaultOptions);\n      options = merge(options, chartOptions || {});\n      if (chart.hideLegend || \"legend\" in opts) {\n        hideLegend(options, opts.legend, chart.hideLegend);\n      }\n      if (opts.title) {\n        setTitle(options, opts.title);\n      }\n\n      // min\n      if (\"min\" in opts) {\n        setMin(options, opts.min);\n      } else if (!negativeValues(series)) {\n        setMin(options, 0);\n      }\n\n      // max\n      if (opts.max) {\n        setMax(options, opts.max);\n      }\n      if (\"stacked\" in opts) {\n        setStacked(options, opts.stacked);\n      }\n      if (opts.colors) {\n        options.colors = opts.colors;\n      }\n      if (opts.xtitle) {\n        setXtitle(options, opts.xtitle);\n      }\n      if (opts.ytitle) {\n        setYtitle(options, opts.ytitle);\n      }\n\n      // merge library last\n      options = merge(options, opts.library || {});\n      return options;\n    };\n  }\n  function sortByTime(a, b) {\n    return a[0].getTime() - b[0].getTime();\n  }\n  function sortByNumberSeries(a, b) {\n    return a[0] - b[0];\n  }\n  function sortByNumber(a, b) {\n    return a - b;\n  }\n  function isMinute(d) {\n    return d.getMilliseconds() === 0 && d.getSeconds() === 0;\n  }\n  function isHour(d) {\n    return isMinute(d) && d.getMinutes() === 0;\n  }\n  function isDay(d) {\n    return isHour(d) && d.getHours() === 0;\n  }\n  function isWeek(d, dayOfWeek) {\n    return isDay(d) && d.getDay() === dayOfWeek;\n  }\n  function isMonth(d) {\n    return isDay(d) && d.getDate() === 1;\n  }\n  function isYear(d) {\n    return isMonth(d) && d.getMonth() === 0;\n  }\n  function isDate(obj) {\n    return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n  }\n  function isNumber(obj) {\n    return typeof obj === \"number\";\n  }\n  var byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n  function formatValue(pre, value, options, axis) {\n    pre = pre || \"\";\n    if (options.prefix) {\n      if (value < 0) {\n        value = value * -1;\n        pre += \"-\";\n      }\n      pre += options.prefix;\n    }\n    var suffix = options.suffix || \"\";\n    var precision = options.precision;\n    var round = options.round;\n    if (options.byteScale) {\n      var suffixIdx;\n      var baseValue = axis ? options.byteScale : value;\n      if (baseValue >= 1152921504606846976) {\n        value /= 1152921504606846976;\n        suffixIdx = 6;\n      } else if (baseValue >= 1125899906842624) {\n        value /= 1125899906842624;\n        suffixIdx = 5;\n      } else if (baseValue >= 1099511627776) {\n        value /= 1099511627776;\n        suffixIdx = 4;\n      } else if (baseValue >= 1073741824) {\n        value /= 1073741824;\n        suffixIdx = 3;\n      } else if (baseValue >= 1048576) {\n        value /= 1048576;\n        suffixIdx = 2;\n      } else if (baseValue >= 1024) {\n        value /= 1024;\n        suffixIdx = 1;\n      } else {\n        suffixIdx = 0;\n      }\n\n      // TODO handle manual precision case\n      if (precision === undefined && round === undefined) {\n        if (value >= 1023.5) {\n          if (suffixIdx < byteSuffixes.length - 1) {\n            value = 1.0;\n            suffixIdx += 1;\n          }\n        }\n        precision = value >= 1000 ? 4 : 3;\n      }\n      suffix = \" \" + byteSuffixes[suffixIdx];\n    }\n    if (precision !== undefined && round !== undefined) {\n      throw Error(\"Use either round or precision, not both\");\n    }\n    if (!axis) {\n      if (precision !== undefined) {\n        value = value.toPrecision(precision);\n        if (!options.zeros) {\n          value = parseFloat(value);\n        }\n      }\n      if (round !== undefined) {\n        if (round < 0) {\n          var num = Math.pow(10, -1 * round);\n          value = parseInt((1.0 * value / num).toFixed(0)) * num;\n        } else {\n          value = value.toFixed(round);\n          if (!options.zeros) {\n            value = parseFloat(value);\n          }\n        }\n      }\n    }\n    if (options.thousands || options.decimal) {\n      value = toStr(value);\n      var parts = value.split(\".\");\n      value = parts[0];\n      if (options.thousands) {\n        value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n      }\n      if (parts.length > 1) {\n        value += (options.decimal || \".\") + parts[1];\n      }\n    }\n    return pre + value + suffix;\n  }\n  function seriesOption(chart, series, option) {\n    if (option in series) {\n      return series[option];\n    } else if (option in chart.options) {\n      return chart.options[option];\n    }\n    return null;\n  }\n  function allZeros(data) {\n    var i, j, d;\n    for (i = 0; i < data.length; i++) {\n      d = data[i].data;\n      for (j = 0; j < d.length; j++) {\n        if (d[j][1] != 0) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n  var baseOptions = {\n    maintainAspectRatio: false,\n    animation: false,\n    tooltips: {\n      displayColors: false,\n      callbacks: {}\n    },\n    legend: {},\n    title: {\n      fontSize: 20,\n      fontColor: \"#333\"\n    }\n  };\n  var defaultOptions = {\n    scales: {\n      yAxes: [{\n        ticks: {\n          maxTicksLimit: 4\n        },\n        scaleLabel: {\n          fontSize: 16,\n          // fontStyle: \"bold\",\n          fontColor: \"#333\"\n        }\n      }],\n      xAxes: [{\n        gridLines: {\n          drawOnChartArea: false\n        },\n        scaleLabel: {\n          fontSize: 16,\n          // fontStyle: \"bold\",\n          fontColor: \"#333\"\n        },\n        time: {},\n        ticks: {}\n      }]\n    }\n  };\n\n  // http://there4.io/2012/05/02/google-chart-color-list/\n  var defaultColors = [\"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\", \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\", \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"];\n  var hideLegend = function (options, legend, hideLegend) {\n    if (legend !== undefined) {\n      options.legend.display = !!legend;\n      if (legend && legend !== true) {\n        options.legend.position = legend;\n      }\n    } else if (hideLegend) {\n      options.legend.display = false;\n    }\n  };\n  var setTitle = function (options, title) {\n    options.title.display = true;\n    options.title.text = title;\n  };\n  var setMin = function (options, min) {\n    if (min !== null) {\n      options.scales.yAxes[0].ticks.min = toFloat(min);\n    }\n  };\n  var setMax = function (options, max) {\n    options.scales.yAxes[0].ticks.max = toFloat(max);\n  };\n  var setBarMin = function (options, min) {\n    if (min !== null) {\n      options.scales.xAxes[0].ticks.min = toFloat(min);\n    }\n  };\n  var setBarMax = function (options, max) {\n    options.scales.xAxes[0].ticks.max = toFloat(max);\n  };\n  var setStacked = function (options, stacked) {\n    options.scales.xAxes[0].stacked = !!stacked;\n    options.scales.yAxes[0].stacked = !!stacked;\n  };\n  var setXtitle = function (options, title) {\n    options.scales.xAxes[0].scaleLabel.display = true;\n    options.scales.xAxes[0].scaleLabel.labelString = title;\n  };\n  var setYtitle = function (options, title) {\n    options.scales.yAxes[0].scaleLabel.display = true;\n    options.scales.yAxes[0].scaleLabel.labelString = title;\n  };\n\n  // https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\n  var addOpacity = function (hex, opacity) {\n    var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n  };\n\n  // check if not null or undefined\n  // https://stackoverflow.com/a/27757708/1177228\n  var notnull = function (x) {\n    return x != null;\n  };\n  var setLabelSize = function (chart, data, options) {\n    var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n    if (maxLabelSize > 25) {\n      maxLabelSize = 25;\n    } else if (maxLabelSize < 10) {\n      maxLabelSize = 10;\n    }\n    if (!options.scales.xAxes[0].ticks.callback) {\n      options.scales.xAxes[0].ticks.callback = function (value) {\n        value = toStr(value);\n        if (value.length > maxLabelSize) {\n          return value.substring(0, maxLabelSize - 2) + \"...\";\n        } else {\n          return value;\n        }\n      };\n    }\n  };\n  var setFormatOptions = function (chart, options, chartType) {\n    var formatOptions = {\n      prefix: chart.options.prefix,\n      suffix: chart.options.suffix,\n      thousands: chart.options.thousands,\n      decimal: chart.options.decimal,\n      precision: chart.options.precision,\n      round: chart.options.round,\n      zeros: chart.options.zeros\n    };\n    if (chart.options.bytes) {\n      var series = chart.data;\n      if (chartType === \"pie\") {\n        series = [{\n          data: series\n        }];\n      }\n\n      // calculate max\n      var max = 0;\n      for (var i = 0; i < series.length; i++) {\n        var s = series[i];\n        for (var j = 0; j < s.data.length; j++) {\n          if (s.data[j][1] > max) {\n            max = s.data[j][1];\n          }\n        }\n      }\n\n      // calculate scale\n      var scale = 1;\n      while (max >= 1024) {\n        scale *= 1024;\n        max /= 1024;\n      }\n\n      // set step size\n      formatOptions.byteScale = scale;\n    }\n    if (chartType !== \"pie\") {\n      var myAxes = options.scales.yAxes;\n      if (chartType === \"bar\") {\n        myAxes = options.scales.xAxes;\n      }\n      if (formatOptions.byteScale) {\n        if (!myAxes[0].ticks.stepSize) {\n          myAxes[0].ticks.stepSize = formatOptions.byteScale / 2;\n        }\n        if (!myAxes[0].ticks.maxTicksLimit) {\n          myAxes[0].ticks.maxTicksLimit = 4;\n        }\n      }\n      if (!myAxes[0].ticks.callback) {\n        myAxes[0].ticks.callback = function (value) {\n          return formatValue(\"\", value, formatOptions, true);\n        };\n      }\n    }\n    if (!options.tooltips.callbacks.label) {\n      if (chartType === \"scatter\") {\n        options.tooltips.callbacks.label = function (item, data) {\n          var label = data.datasets[item.datasetIndex].label || '';\n          if (label) {\n            label += ': ';\n          }\n          return label + '(' + item.xLabel + ', ' + item.yLabel + ')';\n        };\n      } else if (chartType === \"bubble\") {\n        options.tooltips.callbacks.label = function (item, data) {\n          var label = data.datasets[item.datasetIndex].label || '';\n          if (label) {\n            label += ': ';\n          }\n          var dataPoint = data.datasets[item.datasetIndex].data[item.index];\n          return label + '(' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.v + ')';\n        };\n      } else if (chartType === \"pie\") {\n        // need to use separate label for pie charts\n        options.tooltips.callbacks.label = function (tooltipItem, data) {\n          var dataLabel = data.labels[tooltipItem.index];\n          var value = ': ';\n          if (isArray(dataLabel)) {\n            // show value on first line of multiline label\n            // need to clone because we are changing the value\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return formatValue(dataLabel, data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index], formatOptions);\n        };\n      } else {\n        var valueLabel = chartType === \"bar\" ? \"xLabel\" : \"yLabel\";\n        options.tooltips.callbacks.label = function (tooltipItem, data) {\n          var label = data.datasets[tooltipItem.datasetIndex].label || '';\n          if (label) {\n            label += ': ';\n          }\n          return formatValue(label, tooltipItem[valueLabel], formatOptions);\n        };\n      }\n    }\n  };\n  var jsOptions = jsOptionsFunc(merge(baseOptions, defaultOptions), hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n  var createDataTable = function (chart, options, chartType, library) {\n    var datasets = [];\n    var labels = [];\n    var colors = chart.options.colors || defaultColors;\n    var day = true;\n    var week = true;\n    var dayOfWeek;\n    var month = true;\n    var year = true;\n    var hour = true;\n    var minute = true;\n    var series = chart.data;\n    var max = 0;\n    if (chartType === \"bubble\") {\n      for (var i$1 = 0; i$1 < series.length; i$1++) {\n        var s$1 = series[i$1];\n        for (var j$1 = 0; j$1 < s$1.data.length; j$1++) {\n          if (s$1.data[j$1][2] > max) {\n            max = s$1.data[j$1][2];\n          }\n        }\n      }\n    }\n    var i,\n      j,\n      s,\n      d,\n      key,\n      rows = [],\n      rows2 = [];\n    if (chartType === \"bar\" || chartType === \"column\" || chart.xtype !== \"number\" && chart.xtype !== \"bubble\") {\n      var sortedLabels = [];\n      for (i = 0; i < series.length; i++) {\n        s = series[i];\n        for (j = 0; j < s.data.length; j++) {\n          d = s.data[j];\n          key = chart.xtype == \"datetime\" ? d[0].getTime() : d[0];\n          if (!rows[key]) {\n            rows[key] = new Array(series.length);\n          }\n          rows[key][i] = toFloat(d[1]);\n          if (sortedLabels.indexOf(key) === -1) {\n            sortedLabels.push(key);\n          }\n        }\n      }\n      if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n        sortedLabels.sort(sortByNumber);\n      }\n      for (j = 0; j < series.length; j++) {\n        rows2.push([]);\n      }\n      var value;\n      var k;\n      for (k = 0; k < sortedLabels.length; k++) {\n        i = sortedLabels[k];\n        if (chart.xtype === \"datetime\") {\n          value = new Date(toFloat(i));\n          // TODO make this efficient\n          day = day && isDay(value);\n          if (!dayOfWeek) {\n            dayOfWeek = value.getDay();\n          }\n          week = week && isWeek(value, dayOfWeek);\n          month = month && isMonth(value);\n          year = year && isYear(value);\n          hour = hour && isHour(value);\n          minute = minute && isMinute(value);\n        } else {\n          value = i;\n        }\n        labels.push(value);\n        for (j = 0; j < series.length; j++) {\n          // Chart.js doesn't like undefined\n          rows2[j].push(rows[i][j] === undefined ? null : rows[i][j]);\n        }\n      }\n    } else {\n      for (var i$2 = 0; i$2 < series.length; i$2++) {\n        var s$2 = series[i$2];\n        var d$1 = [];\n        for (var j$2 = 0; j$2 < s$2.data.length; j$2++) {\n          var point = {\n            x: toFloat(s$2.data[j$2][0]),\n            y: toFloat(s$2.data[j$2][1])\n          };\n          if (chartType === \"bubble\") {\n            point.r = toFloat(s$2.data[j$2][2]) * 20 / max;\n            // custom attribute, for tooltip\n            point.v = s$2.data[j$2][2];\n          }\n          d$1.push(point);\n        }\n        rows2.push(d$1);\n      }\n    }\n    for (i = 0; i < series.length; i++) {\n      s = series[i];\n      var color = s.color || colors[i];\n      var backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n      var dataset = {\n        label: s.name || \"\",\n        data: rows2[i],\n        fill: chartType === \"area\",\n        borderColor: color,\n        backgroundColor: backgroundColor,\n        pointBackgroundColor: color,\n        borderWidth: 2,\n        pointHoverBackgroundColor: color\n      };\n      if (s.stack) {\n        dataset.stack = s.stack;\n      }\n      var curve = seriesOption(chart, s, \"curve\");\n      if (curve === false) {\n        dataset.lineTension = 0;\n      }\n      var points = seriesOption(chart, s, \"points\");\n      if (points === false) {\n        dataset.pointRadius = 0;\n        dataset.pointHitRadius = 5;\n      }\n      dataset = merge(dataset, chart.options.dataset || {});\n      dataset = merge(dataset, s.library || {});\n      dataset = merge(dataset, s.dataset || {});\n      datasets.push(dataset);\n    }\n    var xmin = chart.options.xmin;\n    var xmax = chart.options.xmax;\n    if (chart.xtype === \"datetime\") {\n      // hacky check for Chart.js >= 2.9.0\n      // https://github.com/chartjs/Chart.js/compare/v2.8.0...v2.9.0\n      var gte29 = (\"math\" in library.helpers);\n      var ticksKey = gte29 ? \"ticks\" : \"time\";\n      if (notnull(xmin)) {\n        options.scales.xAxes[0][ticksKey].min = toDate(xmin).getTime();\n      }\n      if (notnull(xmax)) {\n        options.scales.xAxes[0][ticksKey].max = toDate(xmax).getTime();\n      }\n    } else if (chart.xtype === \"number\") {\n      if (notnull(xmin)) {\n        options.scales.xAxes[0].ticks.min = xmin;\n      }\n      if (notnull(xmax)) {\n        options.scales.xAxes[0].ticks.max = xmax;\n      }\n    }\n\n    // for empty datetime chart\n    if (chart.xtype === \"datetime\" && labels.length === 0) {\n      if (notnull(xmin)) {\n        labels.push(toDate(xmin));\n      }\n      if (notnull(xmax)) {\n        labels.push(toDate(xmax));\n      }\n      day = false;\n      week = false;\n      month = false;\n      year = false;\n      hour = false;\n      minute = false;\n    }\n    if (chart.xtype === \"datetime\" && labels.length > 0) {\n      var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n      var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n      for (i = 1; i < labels.length; i++) {\n        var value$1 = labels[i].getTime();\n        if (value$1 < minTime) {\n          minTime = value$1;\n        }\n        if (value$1 > maxTime) {\n          maxTime = value$1;\n        }\n      }\n      var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n      if (!options.scales.xAxes[0].time.unit) {\n        var step;\n        if (year || timeDiff > 365 * 10) {\n          options.scales.xAxes[0].time.unit = \"year\";\n          step = 365;\n        } else if (month || timeDiff > 30 * 10) {\n          options.scales.xAxes[0].time.unit = \"month\";\n          step = 30;\n        } else if (day || timeDiff > 10) {\n          options.scales.xAxes[0].time.unit = \"day\";\n          step = 1;\n        } else if (hour || timeDiff > 0.5) {\n          options.scales.xAxes[0].time.displayFormats = {\n            hour: \"MMM D, h a\"\n          };\n          options.scales.xAxes[0].time.unit = \"hour\";\n          step = 1 / 24.0;\n        } else if (minute) {\n          options.scales.xAxes[0].time.displayFormats = {\n            minute: \"h:mm a\"\n          };\n          options.scales.xAxes[0].time.unit = \"minute\";\n          step = 1 / 24.0 / 60.0;\n        }\n        if (step && timeDiff > 0) {\n          var unitStepSize = Math.ceil(timeDiff / step / (chart.element.offsetWidth / 100.0));\n          if (week && step === 1) {\n            unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n          }\n          options.scales.xAxes[0].time.unitStepSize = unitStepSize;\n        }\n      }\n      if (!options.scales.xAxes[0].time.tooltipFormat) {\n        if (day) {\n          options.scales.xAxes[0].time.tooltipFormat = \"ll\";\n        } else if (hour) {\n          options.scales.xAxes[0].time.tooltipFormat = \"MMM D, h a\";\n        } else if (minute) {\n          options.scales.xAxes[0].time.tooltipFormat = \"h:mm a\";\n        }\n      }\n    }\n    var data = {\n      labels: labels,\n      datasets: datasets\n    };\n    return data;\n  };\n  var defaultExport = function defaultExport(library) {\n    this.name = \"chartjs\";\n    this.library = library;\n  };\n  defaultExport.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n    var chartOptions = {};\n    // fix for https://github.com/chartjs/Chart.js/issues/2441\n    if (!chart.options.max && allZeros(chart.data)) {\n      chartOptions.max = 1;\n    }\n    var options = jsOptions(chart, merge(chartOptions, chart.options));\n    setFormatOptions(chart, options, chartType);\n    var data = createDataTable(chart, options, chartType || \"line\", this.library);\n    if (chart.xtype === \"number\") {\n      options.scales.xAxes[0].type = \"linear\";\n      options.scales.xAxes[0].position = \"bottom\";\n    } else {\n      options.scales.xAxes[0].type = chart.xtype === \"string\" ? \"category\" : \"time\";\n    }\n    this.drawChart(chart, \"line\", data, options);\n  };\n  defaultExport.prototype.renderPieChart = function renderPieChart(chart) {\n    var options = merge({}, baseOptions);\n    if (chart.options.donut) {\n      options.cutoutPercentage = 50;\n    }\n    if (\"legend\" in chart.options) {\n      hideLegend(options, chart.options.legend);\n    }\n    if (chart.options.title) {\n      setTitle(options, chart.options.title);\n    }\n    options = merge(options, chart.options.library || {});\n    setFormatOptions(chart, options, \"pie\");\n    var labels = [];\n    var values = [];\n    for (var i = 0; i < chart.data.length; i++) {\n      var point = chart.data[i];\n      labels.push(point[0]);\n      values.push(point[1]);\n    }\n    var dataset = {\n      data: values,\n      backgroundColor: chart.options.colors || defaultColors\n    };\n    dataset = merge(dataset, chart.options.dataset || {});\n    var data = {\n      labels: labels,\n      datasets: [dataset]\n    };\n    this.drawChart(chart, \"pie\", data, options);\n  };\n  defaultExport.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n    var options;\n    if (chartType === \"bar\") {\n      var barOptions = merge(baseOptions, defaultOptions);\n      delete barOptions.scales.yAxes[0].ticks.maxTicksLimit;\n      options = jsOptionsFunc(barOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options);\n    } else {\n      options = jsOptions(chart, chart.options);\n    }\n    setFormatOptions(chart, options, chartType);\n    var data = createDataTable(chart, options, \"column\", this.library);\n    if (chartType !== \"bar\") {\n      setLabelSize(chart, data, options);\n    }\n    this.drawChart(chart, chartType === \"bar\" ? \"horizontalBar\" : \"bar\", data, options);\n  };\n  defaultExport.prototype.renderAreaChart = function renderAreaChart(chart) {\n    this.renderLineChart(chart, \"area\");\n  };\n  defaultExport.prototype.renderBarChart = function renderBarChart(chart) {\n    this.renderColumnChart(chart, \"bar\");\n  };\n  defaultExport.prototype.renderScatterChart = function renderScatterChart(chart, chartType) {\n    chartType = chartType || \"scatter\";\n    var options = jsOptions(chart, chart.options);\n    setFormatOptions(chart, options, chartType);\n    if (!(\"showLines\" in options)) {\n      options.showLines = false;\n    }\n    var data = createDataTable(chart, options, chartType, this.library);\n    options.scales.xAxes[0].type = \"linear\";\n    options.scales.xAxes[0].position = \"bottom\";\n    this.drawChart(chart, chartType, data, options);\n  };\n  defaultExport.prototype.renderBubbleChart = function renderBubbleChart(chart) {\n    this.renderScatterChart(chart, \"bubble\");\n  };\n  defaultExport.prototype.destroy = function destroy(chart) {\n    if (chart.chart) {\n      chart.chart.destroy();\n    }\n  };\n  defaultExport.prototype.drawChart = function drawChart(chart, type, data, options) {\n    this.destroy(chart);\n    var chartOptions = {\n      type: type,\n      data: data,\n      options: options\n    };\n    if (chart.options.code) {\n      window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n    }\n    chart.element.innerHTML = \"<canvas></canvas>\";\n    var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n    chart.chart = new this.library(ctx, chartOptions);\n  };\n  var defaultOptions$1 = {\n    chart: {},\n    xAxis: {\n      title: {\n        text: null\n      },\n      labels: {\n        style: {\n          fontSize: \"12px\"\n        }\n      }\n    },\n    yAxis: {\n      title: {\n        text: null\n      },\n      labels: {\n        style: {\n          fontSize: \"12px\"\n        }\n      }\n    },\n    title: {\n      text: null\n    },\n    credits: {\n      enabled: false\n    },\n    legend: {\n      borderWidth: 0\n    },\n    tooltip: {\n      style: {\n        fontSize: \"12px\"\n      }\n    },\n    plotOptions: {\n      areaspline: {},\n      area: {},\n      series: {\n        marker: {}\n      }\n    }\n  };\n  var hideLegend$1 = function (options, legend, hideLegend) {\n    if (legend !== undefined) {\n      options.legend.enabled = !!legend;\n      if (legend && legend !== true) {\n        if (legend === \"top\" || legend === \"bottom\") {\n          options.legend.verticalAlign = legend;\n        } else {\n          options.legend.layout = \"vertical\";\n          options.legend.verticalAlign = \"middle\";\n          options.legend.align = legend;\n        }\n      }\n    } else if (hideLegend) {\n      options.legend.enabled = false;\n    }\n  };\n  var setTitle$1 = function (options, title) {\n    options.title.text = title;\n  };\n  var setMin$1 = function (options, min) {\n    options.yAxis.min = min;\n  };\n  var setMax$1 = function (options, max) {\n    options.yAxis.max = max;\n  };\n  var setStacked$1 = function (options, stacked) {\n    var stackedValue = stacked ? stacked === true ? \"normal\" : stacked : null;\n    options.plotOptions.series.stacking = stackedValue;\n    options.plotOptions.area.stacking = stackedValue;\n    options.plotOptions.areaspline.stacking = stackedValue;\n  };\n  var setXtitle$1 = function (options, title) {\n    options.xAxis.title.text = title;\n  };\n  var setYtitle$1 = function (options, title) {\n    options.yAxis.title.text = title;\n  };\n  var jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n  var setFormatOptions$1 = function (chart, options, chartType) {\n    var formatOptions = {\n      prefix: chart.options.prefix,\n      suffix: chart.options.suffix,\n      thousands: chart.options.thousands,\n      decimal: chart.options.decimal,\n      precision: chart.options.precision,\n      round: chart.options.round,\n      zeros: chart.options.zeros\n    };\n    if (chartType !== \"pie\" && !options.yAxis.labels.formatter) {\n      options.yAxis.labels.formatter = function () {\n        return formatValue(\"\", this.value, formatOptions);\n      };\n    }\n    if (!options.tooltip.pointFormatter) {\n      options.tooltip.pointFormatter = function () {\n        return '<span style=\"color:' + this.color + '\">\\u25CF</span> ' + formatValue(this.series.name + ': <b>', this.y, formatOptions) + '</b><br/>';\n      };\n    }\n  };\n  var defaultExport$1 = function defaultExport(library) {\n    this.name = \"highcharts\";\n    this.library = library;\n  };\n  defaultExport$1.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n    chartType = chartType || \"spline\";\n    var chartOptions = {};\n    if (chartType === \"areaspline\") {\n      chartOptions = {\n        plotOptions: {\n          areaspline: {\n            stacking: \"normal\"\n          },\n          area: {\n            stacking: \"normal\"\n          },\n          series: {\n            marker: {\n              enabled: false\n            }\n          }\n        }\n      };\n    }\n    if (chart.options.curve === false) {\n      if (chartType === \"areaspline\") {\n        chartType = \"area\";\n      } else if (chartType === \"spline\") {\n        chartType = \"line\";\n      }\n    }\n    var options = jsOptions$1(chart, chart.options, chartOptions),\n      data,\n      i,\n      j;\n    options.xAxis.type = chart.xtype === \"string\" ? \"category\" : chart.xtype === \"number\" ? \"linear\" : \"datetime\";\n    if (!options.chart.type) {\n      options.chart.type = chartType;\n    }\n    setFormatOptions$1(chart, options, chartType);\n    var series = chart.data;\n    for (i = 0; i < series.length; i++) {\n      series[i].name = series[i].name || \"Value\";\n      data = series[i].data;\n      if (chart.xtype === \"datetime\") {\n        for (j = 0; j < data.length; j++) {\n          data[j][0] = data[j][0].getTime();\n        }\n      }\n      series[i].marker = {\n        symbol: \"circle\"\n      };\n      if (chart.options.points === false) {\n        series[i].marker.enabled = false;\n      }\n    }\n    this.drawChart(chart, series, options);\n  };\n  defaultExport$1.prototype.renderScatterChart = function renderScatterChart(chart) {\n    var options = jsOptions$1(chart, chart.options, {});\n    options.chart.type = \"scatter\";\n    this.drawChart(chart, chart.data, options);\n  };\n  defaultExport$1.prototype.renderPieChart = function renderPieChart(chart) {\n    var chartOptions = merge(defaultOptions$1, {});\n    if (chart.options.colors) {\n      chartOptions.colors = chart.options.colors;\n    }\n    if (chart.options.donut) {\n      chartOptions.plotOptions = {\n        pie: {\n          innerSize: \"50%\"\n        }\n      };\n    }\n    if (\"legend\" in chart.options) {\n      hideLegend$1(chartOptions, chart.options.legend);\n    }\n    if (chart.options.title) {\n      setTitle$1(chartOptions, chart.options.title);\n    }\n    var options = merge(chartOptions, chart.options.library || {});\n    setFormatOptions$1(chart, options, \"pie\");\n    var series = [{\n      type: \"pie\",\n      name: chart.options.label || \"Value\",\n      data: chart.data\n    }];\n    this.drawChart(chart, series, options);\n  };\n  defaultExport$1.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n    chartType = chartType || \"column\";\n    var series = chart.data;\n    var options = jsOptions$1(chart, chart.options),\n      i,\n      j,\n      s,\n      d,\n      rows = [],\n      categories = [];\n    options.chart.type = chartType;\n    setFormatOptions$1(chart, options, chartType);\n    for (i = 0; i < series.length; i++) {\n      s = series[i];\n      for (j = 0; j < s.data.length; j++) {\n        d = s.data[j];\n        if (!rows[d[0]]) {\n          rows[d[0]] = new Array(series.length);\n          categories.push(d[0]);\n        }\n        rows[d[0]][i] = d[1];\n      }\n    }\n    if (chart.xtype === \"number\") {\n      categories.sort(sortByNumber);\n    }\n    options.xAxis.categories = categories;\n    var newSeries = [],\n      d2;\n    for (i = 0; i < series.length; i++) {\n      d = [];\n      for (j = 0; j < categories.length; j++) {\n        d.push(rows[categories[j]][i] || 0);\n      }\n      d2 = {\n        name: series[i].name || \"Value\",\n        data: d\n      };\n      if (series[i].stack) {\n        d2.stack = series[i].stack;\n      }\n      newSeries.push(d2);\n    }\n    this.drawChart(chart, newSeries, options);\n  };\n  defaultExport$1.prototype.renderBarChart = function renderBarChart(chart) {\n    this.renderColumnChart(chart, \"bar\");\n  };\n  defaultExport$1.prototype.renderAreaChart = function renderAreaChart(chart) {\n    this.renderLineChart(chart, \"areaspline\");\n  };\n  defaultExport$1.prototype.destroy = function destroy(chart) {\n    if (chart.chart) {\n      chart.chart.destroy();\n    }\n  };\n  defaultExport$1.prototype.drawChart = function drawChart(chart, data, options) {\n    this.destroy(chart);\n    options.chart.renderTo = chart.element.id;\n    options.series = data;\n    if (chart.options.code) {\n      window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n    }\n    chart.chart = new this.library.Chart(options);\n  };\n  var loaded = {};\n  var callbacks = [];\n\n  // Set chart options\n  var defaultOptions$2 = {\n    chartArea: {},\n    fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n    pointSize: 6,\n    legend: {\n      textStyle: {\n        fontSize: 12,\n        color: \"#444\"\n      },\n      alignment: \"center\",\n      position: \"right\"\n    },\n    curveType: \"function\",\n    hAxis: {\n      textStyle: {\n        color: \"#666\",\n        fontSize: 12\n      },\n      titleTextStyle: {},\n      gridlines: {\n        color: \"transparent\"\n      },\n      baselineColor: \"#ccc\",\n      viewWindow: {}\n    },\n    vAxis: {\n      textStyle: {\n        color: \"#666\",\n        fontSize: 12\n      },\n      titleTextStyle: {},\n      baselineColor: \"#ccc\",\n      viewWindow: {}\n    },\n    tooltip: {\n      textStyle: {\n        color: \"#666\",\n        fontSize: 12\n      }\n    }\n  };\n  var hideLegend$2 = function (options, legend, hideLegend) {\n    if (legend !== undefined) {\n      var position;\n      if (!legend) {\n        position = \"none\";\n      } else if (legend === true) {\n        position = \"right\";\n      } else {\n        position = legend;\n      }\n      options.legend.position = position;\n    } else if (hideLegend) {\n      options.legend.position = \"none\";\n    }\n  };\n  var setTitle$2 = function (options, title) {\n    options.title = title;\n    options.titleTextStyle = {\n      color: \"#333\",\n      fontSize: \"20px\"\n    };\n  };\n  var setMin$2 = function (options, min) {\n    options.vAxis.viewWindow.min = min;\n  };\n  var setMax$2 = function (options, max) {\n    options.vAxis.viewWindow.max = max;\n  };\n  var setBarMin$1 = function (options, min) {\n    options.hAxis.viewWindow.min = min;\n  };\n  var setBarMax$1 = function (options, max) {\n    options.hAxis.viewWindow.max = max;\n  };\n  var setStacked$2 = function (options, stacked) {\n    options.isStacked = stacked ? stacked : false;\n  };\n  var setXtitle$2 = function (options, title) {\n    options.hAxis.title = title;\n    options.hAxis.titleTextStyle.italic = false;\n  };\n  var setYtitle$2 = function (options, title) {\n    options.vAxis.title = title;\n    options.vAxis.titleTextStyle.italic = false;\n  };\n  var jsOptions$2 = jsOptionsFunc(defaultOptions$2, hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n  var resize = function (callback) {\n    if (window.attachEvent) {\n      window.attachEvent(\"onresize\", callback);\n    } else if (window.addEventListener) {\n      window.addEventListener(\"resize\", callback, true);\n    }\n    callback();\n  };\n  var defaultExport$2 = function defaultExport(library) {\n    this.name = \"google\";\n    this.library = library;\n  };\n  defaultExport$2.prototype.renderLineChart = function renderLineChart(chart) {\n    var this$1 = this;\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {};\n      if (chart.options.curve === false) {\n        chartOptions.curveType = \"none\";\n      }\n      if (chart.options.points === false) {\n        chartOptions.pointSize = 0;\n      }\n      var options = jsOptions$2(chart, chart.options, chartOptions);\n      var data = this$1.createDataTable(chart.data, chart.xtype);\n      this$1.drawChart(chart, \"LineChart\", data, options);\n    });\n  };\n  defaultExport$2.prototype.renderPieChart = function renderPieChart(chart) {\n    var this$1 = this;\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {\n        chartArea: {\n          top: \"10%\",\n          height: \"80%\"\n        },\n        legend: {}\n      };\n      if (chart.options.colors) {\n        chartOptions.colors = chart.options.colors;\n      }\n      if (chart.options.donut) {\n        chartOptions.pieHole = 0.5;\n      }\n      if (\"legend\" in chart.options) {\n        hideLegend$2(chartOptions, chart.options.legend);\n      }\n      if (chart.options.title) {\n        setTitle$2(chartOptions, chart.options.title);\n      }\n      var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});\n      var data = new this$1.library.visualization.DataTable();\n      data.addColumn(\"string\", \"\");\n      data.addColumn(\"number\", \"Value\");\n      data.addRows(chart.data);\n      this$1.drawChart(chart, \"PieChart\", data, options);\n    });\n  };\n  defaultExport$2.prototype.renderColumnChart = function renderColumnChart(chart) {\n    var this$1 = this;\n    this.waitForLoaded(chart, function () {\n      var options = jsOptions$2(chart, chart.options);\n      var data = this$1.createDataTable(chart.data, chart.xtype);\n      this$1.drawChart(chart, \"ColumnChart\", data, options);\n    });\n  };\n  defaultExport$2.prototype.renderBarChart = function renderBarChart(chart) {\n    var this$1 = this;\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {\n        hAxis: {\n          gridlines: {\n            color: \"#ccc\"\n          }\n        }\n      };\n      var options = jsOptionsFunc(defaultOptions$2, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options, chartOptions);\n      var data = this$1.createDataTable(chart.data, chart.xtype);\n      this$1.drawChart(chart, \"BarChart\", data, options);\n    });\n  };\n  defaultExport$2.prototype.renderAreaChart = function renderAreaChart(chart) {\n    var this$1 = this;\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {\n        isStacked: true,\n        pointSize: 0,\n        areaOpacity: 0.5\n      };\n      var options = jsOptions$2(chart, chart.options, chartOptions);\n      var data = this$1.createDataTable(chart.data, chart.xtype);\n      this$1.drawChart(chart, \"AreaChart\", data, options);\n    });\n  };\n  defaultExport$2.prototype.renderGeoChart = function renderGeoChart(chart) {\n    var this$1 = this;\n    this.waitForLoaded(chart, \"geochart\", function () {\n      var chartOptions = {\n        legend: \"none\",\n        colorAxis: {\n          colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n        }\n      };\n      var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});\n      var data = new this$1.library.visualization.DataTable();\n      data.addColumn(\"string\", \"\");\n      data.addColumn(\"number\", chart.options.label || \"Value\");\n      data.addRows(chart.data);\n      this$1.drawChart(chart, \"GeoChart\", data, options);\n    });\n  };\n  defaultExport$2.prototype.renderScatterChart = function renderScatterChart(chart) {\n    var this$1 = this;\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {};\n      var options = jsOptions$2(chart, chart.options, chartOptions);\n      var series = chart.data,\n        rows2 = [],\n        i,\n        j,\n        data,\n        d;\n      for (i = 0; i < series.length; i++) {\n        series[i].name = series[i].name || \"Value\";\n        d = series[i].data;\n        for (j = 0; j < d.length; j++) {\n          var row = new Array(series.length + 1);\n          row[0] = d[j][0];\n          row[i + 1] = d[j][1];\n          rows2.push(row);\n        }\n      }\n      data = new this$1.library.visualization.DataTable();\n      data.addColumn(\"number\", \"\");\n      for (i = 0; i < series.length; i++) {\n        data.addColumn(\"number\", series[i].name);\n      }\n      data.addRows(rows2);\n      this$1.drawChart(chart, \"ScatterChart\", data, options);\n    });\n  };\n  defaultExport$2.prototype.renderTimeline = function renderTimeline(chart) {\n    var this$1 = this;\n    this.waitForLoaded(chart, \"timeline\", function () {\n      var chartOptions = {\n        legend: \"none\"\n      };\n      if (chart.options.colors) {\n        chartOptions.colors = chart.options.colors;\n      }\n      var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});\n      var data = new this$1.library.visualization.DataTable();\n      data.addColumn({\n        type: \"string\",\n        id: \"Name\"\n      });\n      data.addColumn({\n        type: \"date\",\n        id: \"Start\"\n      });\n      data.addColumn({\n        type: \"date\",\n        id: \"End\"\n      });\n      data.addRows(chart.data);\n      chart.element.style.lineHeight = \"normal\";\n      this$1.drawChart(chart, \"Timeline\", data, options);\n    });\n  };\n  defaultExport$2.prototype.destroy = function destroy(chart) {\n    if (chart.chart) {\n      chart.chart.clearChart();\n    }\n  };\n  defaultExport$2.prototype.drawChart = function drawChart(chart, type, data, options) {\n    this.destroy(chart);\n    if (chart.options.code) {\n      window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n    }\n    chart.chart = new this.library.visualization[type](chart.element);\n    resize(function () {\n      chart.chart.draw(data, options);\n    });\n  };\n  defaultExport$2.prototype.waitForLoaded = function waitForLoaded(chart, pack, callback) {\n    var this$1 = this;\n    if (!callback) {\n      callback = pack;\n      pack = \"corechart\";\n    }\n    callbacks.push({\n      pack: pack,\n      callback: callback\n    });\n    if (loaded[pack]) {\n      this.runCallbacks();\n    } else {\n      loaded[pack] = true;\n\n      // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n      var loadOptions = {\n        packages: [pack],\n        callback: function () {\n          this$1.runCallbacks();\n        }\n      };\n      var config = chart.__config();\n      if (config.language) {\n        loadOptions.language = config.language;\n      }\n      if (pack === \"geochart\" && config.mapsApiKey) {\n        loadOptions.mapsApiKey = config.mapsApiKey;\n      }\n      this.library.charts.load(\"current\", loadOptions);\n    }\n  };\n  defaultExport$2.prototype.runCallbacks = function runCallbacks() {\n    var cb, call;\n    for (var i = 0; i < callbacks.length; i++) {\n      cb = callbacks[i];\n      call = this.library.visualization && (cb.pack === \"corechart\" && this.library.visualization.LineChart || cb.pack === \"timeline\" && this.library.visualization.Timeline || cb.pack === \"geochart\" && this.library.visualization.GeoChart);\n      if (call) {\n        cb.callback();\n        callbacks.splice(i, 1);\n        i--;\n      }\n    }\n  };\n\n  // cant use object as key\n  defaultExport$2.prototype.createDataTable = function createDataTable(series, columnType) {\n    var i,\n      j,\n      s,\n      d,\n      key,\n      rows = [],\n      sortedLabels = [];\n    for (i = 0; i < series.length; i++) {\n      s = series[i];\n      series[i].name = series[i].name || \"Value\";\n      for (j = 0; j < s.data.length; j++) {\n        d = s.data[j];\n        key = columnType === \"datetime\" ? d[0].getTime() : d[0];\n        if (!rows[key]) {\n          rows[key] = new Array(series.length);\n          sortedLabels.push(key);\n        }\n        rows[key][i] = toFloat(d[1]);\n      }\n    }\n    var rows2 = [];\n    var day = true;\n    var value;\n    for (j = 0; j < sortedLabels.length; j++) {\n      i = sortedLabels[j];\n      if (columnType === \"datetime\") {\n        value = new Date(toFloat(i));\n        day = day && isDay(value);\n      } else if (columnType === \"number\") {\n        value = toFloat(i);\n      } else {\n        value = i;\n      }\n      rows2.push([value].concat(rows[i]));\n    }\n    if (columnType === \"datetime\") {\n      rows2.sort(sortByTime);\n    } else if (columnType === \"number\") {\n      rows2.sort(sortByNumberSeries);\n      for (i = 0; i < rows2.length; i++) {\n        rows2[i][0] = toStr(rows2[i][0]);\n      }\n      columnType = \"string\";\n    }\n\n    // create datatable\n    var data = new this.library.visualization.DataTable();\n    columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n    data.addColumn(columnType, \"\");\n    for (i = 0; i < series.length; i++) {\n      data.addColumn(\"number\", series[i].name);\n    }\n    data.addRows(rows2);\n    return data;\n  };\n  var pendingRequests = [],\n    runningRequests = 0,\n    maxRequests = 4;\n  function pushRequest(url, success, error) {\n    pendingRequests.push([url, success, error]);\n    runNext();\n  }\n  function runNext() {\n    if (runningRequests < maxRequests) {\n      var request = pendingRequests.shift();\n      if (request) {\n        runningRequests++;\n        getJSON(request[0], request[1], request[2]);\n        runNext();\n      }\n    }\n  }\n  function requestComplete() {\n    runningRequests--;\n    runNext();\n  }\n  function getJSON(url, success, error) {\n    ajaxCall(url, success, function (jqXHR, textStatus, errorThrown) {\n      var message = typeof errorThrown === \"string\" ? errorThrown : errorThrown.message;\n      error(message);\n    });\n  }\n  function ajaxCall(url, success, error) {\n    var $ = window.jQuery || window.Zepto || window.$;\n    if ($ && $.ajax) {\n      $.ajax({\n        dataType: \"json\",\n        url: url,\n        success: success,\n        error: error,\n        complete: requestComplete\n      });\n    } else {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"GET\", url, true);\n      xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n      xhr.onload = function () {\n        requestComplete();\n        if (xhr.status === 200) {\n          success(JSON.parse(xhr.responseText), xhr.statusText, xhr);\n        } else {\n          error(xhr, \"error\", xhr.statusText);\n        }\n      };\n      xhr.send();\n    }\n  }\n  var config = {};\n  var adapters = [];\n\n  // helpers\n\n  function setText(element, text) {\n    if (document.body.innerText) {\n      element.innerText = text;\n    } else {\n      element.textContent = text;\n    }\n  }\n\n  // TODO remove prefix for all messages\n  function chartError(element, message, noPrefix) {\n    if (!noPrefix) {\n      message = \"Error Loading Chart: \" + message;\n    }\n    setText(element, message);\n    element.style.color = \"#ff0000\";\n  }\n  function errorCatcher(chart) {\n    try {\n      chart.__render();\n    } catch (err) {\n      chartError(chart.element, err.message);\n      throw err;\n    }\n  }\n  function fetchDataSource(chart, dataSource) {\n    if (typeof dataSource === \"string\") {\n      pushRequest(dataSource, function (data) {\n        chart.rawData = data;\n        errorCatcher(chart);\n      }, function (message) {\n        chartError(chart.element, message);\n      });\n    } else if (typeof dataSource === \"function\") {\n      try {\n        dataSource(function (data) {\n          chart.rawData = data;\n          errorCatcher(chart);\n        }, function (message) {\n          chartError(chart.element, message, true);\n        });\n      } catch (err) {\n        chartError(chart.element, err, true);\n      }\n    } else {\n      chart.rawData = dataSource;\n      errorCatcher(chart);\n    }\n  }\n  function addDownloadButton(chart) {\n    var element = chart.element;\n    var link = document.createElement(\"a\");\n    var download = chart.options.download;\n    if (download === true) {\n      download = {};\n    } else if (typeof download === \"string\") {\n      download = {\n        filename: download\n      };\n    }\n    link.download = download.filename || \"chart.png\"; // https://caniuse.com/download\n\n    link.style.position = \"absolute\";\n    link.style.top = \"20px\";\n    link.style.right = \"20px\";\n    link.style.zIndex = 1000;\n    link.style.lineHeight = \"20px\";\n    link.target = \"_blank\"; // for safari\n    var image = document.createElement(\"img\");\n    image.alt = \"Download\";\n    image.style.border = \"none\";\n    // icon from font-awesome\n    // http://fa2png.io/\n    image.src = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABCFBMVEUAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMywEsqxAAAAV3RSTlMAAQIDBggJCgsMDQ4PERQaHB0eISIjJCouLzE0OTo/QUJHSUpLTU5PUllhYmltcHh5foWLjI+SlaCio6atr7S1t7m6vsHHyM7R2tze5Obo7fHz9ff5+/1hlxK2AAAA30lEQVQYGUXBhVYCQQBA0TdYWAt2d3d3YWAHyur7/z9xgD16Lw0DW+XKx+1GgX+FRzM3HWQWrHl5N/oapW5RPe0PkBu+UYeICvozTWZVK23Ao04B79oJrOsJDOoxkZoQPWgX29pHpCZEk7rEvQYiNSFq1UMqvlCjJkRBS1R8hb00Vb/TajtBL7nTHE1X1vyMQF732dQhyF2o6SAwrzP06iUQzvwsArlnzcOdrgBhJyHa1QOgO9U1GsKuvjUTjavliZYQ8nNPapG6sap/3nrIdJ6bOWzmX/fy0XVpfzZP3S8OJT3g9EEiJwAAAABJRU5ErkJggg==\";\n    link.appendChild(image);\n    element.style.position = \"relative\";\n    chart.__downloadAttached = true;\n\n    // mouseenter\n    chart.__enterEvent = addEvent(element, \"mouseover\", function (e) {\n      var related = e.relatedTarget;\n      // check download option again to ensure it wasn't changed\n      if ((!related || related !== this && !childOf(this, related)) && chart.options.download) {\n        link.href = chart.toImage(download);\n        element.appendChild(link);\n      }\n    });\n\n    // mouseleave\n    chart.__leaveEvent = addEvent(element, \"mouseout\", function (e) {\n      var related = e.relatedTarget;\n      if (!related || related !== this && !childOf(this, related)) {\n        if (link.parentNode) {\n          link.parentNode.removeChild(link);\n        }\n      }\n    });\n  }\n\n  // https://stackoverflow.com/questions/10149963/adding-event-listener-cross-browser\n  function addEvent(elem, event, fn) {\n    if (elem.addEventListener) {\n      elem.addEventListener(event, fn, false);\n      return fn;\n    } else {\n      var fn2 = function () {\n        // set the this pointer same as addEventListener when fn is called\n        return fn.call(elem, window.event);\n      };\n      elem.attachEvent(\"on\" + event, fn2);\n      return fn2;\n    }\n  }\n  function removeEvent(elem, event, fn) {\n    if (elem.removeEventListener) {\n      elem.removeEventListener(event, fn, false);\n    } else {\n      elem.detachEvent(\"on\" + event, fn);\n    }\n  }\n\n  // https://gist.github.com/shawnbot/4166283\n  function childOf(p, c) {\n    if (p === c) {\n      return false;\n    }\n    while (c && c !== p) {\n      c = c.parentNode;\n    }\n    return c === p;\n  }\n  function getAdapterType(library) {\n    if (library) {\n      if (library.product === \"Highcharts\") {\n        return defaultExport$1;\n      } else if (library.charts) {\n        return defaultExport$2;\n      } else if (isFunction(library)) {\n        return defaultExport;\n      }\n    }\n    throw new Error(\"Unknown adapter\");\n  }\n  function addAdapter(library) {\n    var adapterType = getAdapterType(library);\n    var adapter = new adapterType(library);\n    if (adapters.indexOf(adapter) === -1) {\n      adapters.push(adapter);\n    }\n  }\n  function loadAdapters() {\n    if (\"Chart\" in window) {\n      addAdapter(window.Chart);\n    }\n    if (\"Highcharts\" in window) {\n      addAdapter(window.Highcharts);\n    }\n    if (window.google && window.google.charts) {\n      addAdapter(window.google);\n    }\n  }\n  function dataEmpty(data, chartType) {\n    if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n      return data.length === 0;\n    } else {\n      for (var i = 0; i < data.length; i++) {\n        if (data[i].data.length > 0) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n  function renderChart(chartType, chart) {\n    if (chart.options.messages && chart.options.messages.empty && dataEmpty(chart.data, chartType)) {\n      setText(chart.element, chart.options.messages.empty);\n    } else {\n      callAdapter(chartType, chart);\n      if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n        addDownloadButton(chart);\n      }\n    }\n  }\n\n  // TODO remove chartType if cross-browser way\n  // to get the name of the chart class\n  function callAdapter(chartType, chart) {\n    var i, adapter, fnName, adapterName;\n    fnName = \"render\" + chartType;\n    adapterName = chart.options.adapter;\n    loadAdapters();\n    for (i = 0; i < adapters.length; i++) {\n      adapter = adapters[i];\n      if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n        chart.adapter = adapter.name;\n        chart.__adapterObject = adapter;\n        return adapter[fnName](chart);\n      }\n    }\n    if (adapters.length > 0) {\n      throw new Error(\"No charting library found for \" + chartType);\n    } else {\n      throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n    }\n  }\n\n  // process data\n\n  var toFormattedKey = function (key, keyType) {\n    if (keyType === \"number\") {\n      key = toFloat(key);\n    } else if (keyType === \"datetime\") {\n      key = toDate(key);\n    } else {\n      key = toStr(key);\n    }\n    return key;\n  };\n  var formatSeriesData = function (data, keyType) {\n    var r = [],\n      key,\n      j;\n    for (j = 0; j < data.length; j++) {\n      if (keyType === \"bubble\") {\n        r.push([toFloat(data[j][0]), toFloat(data[j][1]), toFloat(data[j][2])]);\n      } else {\n        key = toFormattedKey(data[j][0], keyType);\n        r.push([key, toFloat(data[j][1])]);\n      }\n    }\n    if (keyType === \"datetime\") {\n      r.sort(sortByTime);\n    } else if (keyType === \"number\") {\n      r.sort(sortByNumberSeries);\n    }\n    return r;\n  };\n  function detectXType(series, noDatetime, options) {\n    if (dataEmpty(series)) {\n      if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n        return \"datetime\";\n      } else {\n        return \"number\";\n      }\n    } else if (detectXTypeWithFunction(series, isNumber)) {\n      return \"number\";\n    } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n      return \"datetime\";\n    } else {\n      return \"string\";\n    }\n  }\n  function detectXTypeWithFunction(series, func) {\n    var i, j, data;\n    for (i = 0; i < series.length; i++) {\n      data = toArr(series[i].data);\n      for (j = 0; j < data.length; j++) {\n        if (!func(data[j][0])) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n\n  // creates a shallow copy of each element of the array\n  // elements are expected to be objects\n  function copySeries(series) {\n    var newSeries = [],\n      i,\n      j;\n    for (i = 0; i < series.length; i++) {\n      var copy = {};\n      for (j in series[i]) {\n        if (series[i].hasOwnProperty(j)) {\n          copy[j] = series[i][j];\n        }\n      }\n      newSeries.push(copy);\n    }\n    return newSeries;\n  }\n  function processSeries(chart, keyType, noDatetime) {\n    var i;\n    var opts = chart.options;\n    var series = chart.rawData;\n\n    // see if one series or multiple\n    if (!isArray(series) || typeof series[0] !== \"object\" || isArray(series[0])) {\n      series = [{\n        name: opts.label,\n        data: series\n      }];\n      chart.hideLegend = true;\n    } else {\n      chart.hideLegend = false;\n    }\n\n    // convert to array\n    // must come before dataEmpty check\n    series = copySeries(series);\n    for (i = 0; i < series.length; i++) {\n      series[i].data = toArr(series[i].data);\n    }\n    chart.xtype = keyType ? keyType : opts.discrete ? \"string\" : detectXType(series, noDatetime, opts);\n\n    // right format\n    for (i = 0; i < series.length; i++) {\n      series[i].data = formatSeriesData(series[i].data, chart.xtype);\n    }\n    return series;\n  }\n  function processSimple(chart) {\n    var perfectData = toArr(chart.rawData),\n      i;\n    for (i = 0; i < perfectData.length; i++) {\n      perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n    }\n    return perfectData;\n  }\n\n  // define classes\n\n  var Chart = function Chart(element, dataSource, options) {\n    var elementId;\n    if (typeof element === \"string\") {\n      elementId = element;\n      element = document.getElementById(element);\n      if (!element) {\n        throw new Error(\"No element with id \" + elementId);\n      }\n    }\n    this.element = element;\n    this.options = merge(Chartkick.options, options || {});\n    this.dataSource = dataSource;\n    Chartkick.charts[element.id] = this;\n    fetchDataSource(this, dataSource);\n    if (this.options.refresh) {\n      this.startRefresh();\n    }\n  };\n  Chart.prototype.getElement = function getElement() {\n    return this.element;\n  };\n  Chart.prototype.getDataSource = function getDataSource() {\n    return this.dataSource;\n  };\n  Chart.prototype.getData = function getData() {\n    return this.data;\n  };\n  Chart.prototype.getOptions = function getOptions() {\n    return this.options;\n  };\n  Chart.prototype.getChartObject = function getChartObject() {\n    return this.chart;\n  };\n  Chart.prototype.getAdapter = function getAdapter() {\n    return this.adapter;\n  };\n  Chart.prototype.updateData = function updateData(dataSource, options) {\n    this.dataSource = dataSource;\n    if (options) {\n      this.__updateOptions(options);\n    }\n    fetchDataSource(this, dataSource);\n  };\n  Chart.prototype.setOptions = function setOptions(options) {\n    this.__updateOptions(options);\n    this.redraw();\n  };\n  Chart.prototype.redraw = function redraw() {\n    fetchDataSource(this, this.rawData);\n  };\n  Chart.prototype.refreshData = function refreshData() {\n    if (typeof this.dataSource === \"string\") {\n      // prevent browser from caching\n      var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n      var url = this.dataSource + sep + \"_=\" + new Date().getTime();\n      fetchDataSource(this, url);\n    } else if (typeof this.dataSource === \"function\") {\n      fetchDataSource(this, this.dataSource);\n    }\n  };\n  Chart.prototype.startRefresh = function startRefresh() {\n    var this$1 = this;\n    var refresh = this.options.refresh;\n    if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n      throw new Error(\"Data source must be a URL or callback for refresh\");\n    }\n    if (!this.intervalId) {\n      if (refresh) {\n        this.intervalId = setInterval(function () {\n          this$1.refreshData();\n        }, refresh * 1000);\n      } else {\n        throw new Error(\"No refresh interval\");\n      }\n    }\n  };\n  Chart.prototype.stopRefresh = function stopRefresh() {\n    if (this.intervalId) {\n      clearInterval(this.intervalId);\n      this.intervalId = null;\n    }\n  };\n  Chart.prototype.toImage = function toImage(download) {\n    if (this.adapter === \"chartjs\") {\n      if (download && download.background && download.background !== \"transparent\") {\n        // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n        var canvas = this.chart.chart.canvas;\n        var ctx = this.chart.chart.ctx;\n        var tmpCanvas = document.createElement(\"canvas\");\n        var tmpCtx = tmpCanvas.getContext(\"2d\");\n        tmpCanvas.width = ctx.canvas.width;\n        tmpCanvas.height = ctx.canvas.height;\n        tmpCtx.fillStyle = download.background;\n        tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n        tmpCtx.drawImage(canvas, 0, 0);\n        return tmpCanvas.toDataURL(\"image/png\");\n      } else {\n        return this.chart.toBase64Image();\n      }\n    } else {\n      // TODO throw error in next major version\n      // throw new Error(\"Feature only available for Chart.js\");\n      return null;\n    }\n  };\n  Chart.prototype.destroy = function destroy() {\n    if (this.__adapterObject) {\n      this.__adapterObject.destroy(this);\n    }\n    if (this.__enterEvent) {\n      removeEvent(this.element, \"mouseover\", this.__enterEvent);\n    }\n    if (this.__leaveEvent) {\n      removeEvent(this.element, \"mouseout\", this.__leaveEvent);\n    }\n  };\n  Chart.prototype.__updateOptions = function __updateOptions(options) {\n    var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n    this.options = merge(Chartkick.options, options);\n    if (updateRefresh) {\n      this.stopRefresh();\n      this.startRefresh();\n    }\n  };\n  Chart.prototype.__render = function __render() {\n    this.data = this.__processData();\n    renderChart(this.__chartName(), this);\n  };\n  Chart.prototype.__config = function __config() {\n    return config;\n  };\n  var LineChart = /*@__PURE__*/function (Chart) {\n    function LineChart() {\n      Chart.apply(this, arguments);\n    }\n    if (Chart) LineChart.__proto__ = Chart;\n    LineChart.prototype = Object.create(Chart && Chart.prototype);\n    LineChart.prototype.constructor = LineChart;\n    LineChart.prototype.__processData = function __processData() {\n      return processSeries(this);\n    };\n    LineChart.prototype.__chartName = function __chartName() {\n      return \"LineChart\";\n    };\n    return LineChart;\n  }(Chart);\n  var PieChart = /*@__PURE__*/function (Chart) {\n    function PieChart() {\n      Chart.apply(this, arguments);\n    }\n    if (Chart) PieChart.__proto__ = Chart;\n    PieChart.prototype = Object.create(Chart && Chart.prototype);\n    PieChart.prototype.constructor = PieChart;\n    PieChart.prototype.__processData = function __processData() {\n      return processSimple(this);\n    };\n    PieChart.prototype.__chartName = function __chartName() {\n      return \"PieChart\";\n    };\n    return PieChart;\n  }(Chart);\n  var ColumnChart = /*@__PURE__*/function (Chart) {\n    function ColumnChart() {\n      Chart.apply(this, arguments);\n    }\n    if (Chart) ColumnChart.__proto__ = Chart;\n    ColumnChart.prototype = Object.create(Chart && Chart.prototype);\n    ColumnChart.prototype.constructor = ColumnChart;\n    ColumnChart.prototype.__processData = function __processData() {\n      return processSeries(this, null, true);\n    };\n    ColumnChart.prototype.__chartName = function __chartName() {\n      return \"ColumnChart\";\n    };\n    return ColumnChart;\n  }(Chart);\n  var BarChart = /*@__PURE__*/function (Chart) {\n    function BarChart() {\n      Chart.apply(this, arguments);\n    }\n    if (Chart) BarChart.__proto__ = Chart;\n    BarChart.prototype = Object.create(Chart && Chart.prototype);\n    BarChart.prototype.constructor = BarChart;\n    BarChart.prototype.__processData = function __processData() {\n      return processSeries(this, null, true);\n    };\n    BarChart.prototype.__chartName = function __chartName() {\n      return \"BarChart\";\n    };\n    return BarChart;\n  }(Chart);\n  var AreaChart = /*@__PURE__*/function (Chart) {\n    function AreaChart() {\n      Chart.apply(this, arguments);\n    }\n    if (Chart) AreaChart.__proto__ = Chart;\n    AreaChart.prototype = Object.create(Chart && Chart.prototype);\n    AreaChart.prototype.constructor = AreaChart;\n    AreaChart.prototype.__processData = function __processData() {\n      return processSeries(this);\n    };\n    AreaChart.prototype.__chartName = function __chartName() {\n      return \"AreaChart\";\n    };\n    return AreaChart;\n  }(Chart);\n  var GeoChart = /*@__PURE__*/function (Chart) {\n    function GeoChart() {\n      Chart.apply(this, arguments);\n    }\n    if (Chart) GeoChart.__proto__ = Chart;\n    GeoChart.prototype = Object.create(Chart && Chart.prototype);\n    GeoChart.prototype.constructor = GeoChart;\n    GeoChart.prototype.__processData = function __processData() {\n      return processSimple(this);\n    };\n    GeoChart.prototype.__chartName = function __chartName() {\n      return \"GeoChart\";\n    };\n    return GeoChart;\n  }(Chart);\n  var ScatterChart = /*@__PURE__*/function (Chart) {\n    function ScatterChart() {\n      Chart.apply(this, arguments);\n    }\n    if (Chart) ScatterChart.__proto__ = Chart;\n    ScatterChart.prototype = Object.create(Chart && Chart.prototype);\n    ScatterChart.prototype.constructor = ScatterChart;\n    ScatterChart.prototype.__processData = function __processData() {\n      return processSeries(this, \"number\");\n    };\n    ScatterChart.prototype.__chartName = function __chartName() {\n      return \"ScatterChart\";\n    };\n    return ScatterChart;\n  }(Chart);\n  var BubbleChart = /*@__PURE__*/function (Chart) {\n    function BubbleChart() {\n      Chart.apply(this, arguments);\n    }\n    if (Chart) BubbleChart.__proto__ = Chart;\n    BubbleChart.prototype = Object.create(Chart && Chart.prototype);\n    BubbleChart.prototype.constructor = BubbleChart;\n    BubbleChart.prototype.__processData = function __processData() {\n      return processSeries(this, \"bubble\");\n    };\n    BubbleChart.prototype.__chartName = function __chartName() {\n      return \"BubbleChart\";\n    };\n    return BubbleChart;\n  }(Chart);\n  var Timeline = /*@__PURE__*/function (Chart) {\n    function Timeline() {\n      Chart.apply(this, arguments);\n    }\n    if (Chart) Timeline.__proto__ = Chart;\n    Timeline.prototype = Object.create(Chart && Chart.prototype);\n    Timeline.prototype.constructor = Timeline;\n    Timeline.prototype.__processData = function __processData() {\n      var i,\n        data = this.rawData;\n      for (i = 0; i < data.length; i++) {\n        data[i][1] = toDate(data[i][1]);\n        data[i][2] = toDate(data[i][2]);\n      }\n      return data;\n    };\n    Timeline.prototype.__chartName = function __chartName() {\n      return \"Timeline\";\n    };\n    return Timeline;\n  }(Chart);\n  var Chartkick = {\n    LineChart: LineChart,\n    PieChart: PieChart,\n    ColumnChart: ColumnChart,\n    BarChart: BarChart,\n    AreaChart: AreaChart,\n    GeoChart: GeoChart,\n    ScatterChart: ScatterChart,\n    BubbleChart: BubbleChart,\n    Timeline: Timeline,\n    charts: {},\n    configure: function (options) {\n      for (var key in options) {\n        if (options.hasOwnProperty(key)) {\n          config[key] = options[key];\n        }\n      }\n    },\n    setDefaultOptions: function (opts) {\n      Chartkick.options = opts;\n    },\n    eachChart: function (callback) {\n      for (var chartId in Chartkick.charts) {\n        if (Chartkick.charts.hasOwnProperty(chartId)) {\n          callback(Chartkick.charts[chartId]);\n        }\n      }\n    },\n    config: config,\n    options: {},\n    adapters: adapters,\n    addAdapter: addAdapter,\n    use: function (adapter) {\n      addAdapter(adapter);\n      return Chartkick;\n    }\n  };\n\n  // not ideal, but allows for simpler integration\n  if (typeof window !== \"undefined\" && !window.Chartkick) {\n    window.Chartkick = Chartkick;\n  }\n\n  // backwards compatibility for esm require\n  Chartkick.default = Chartkick;\n  return Chartkick;\n});","/*\n Highcharts JS v7.2.2 (2020-08-24)\n\n (c) 2009-2018 Torstein Honsi\n\n License: www.highcharts.com/license\n*/\n(function (P, M) {\n  \"object\" === typeof module && module.exports ? (M[\"default\"] = M, module.exports = P.document ? M(P) : M) : \"function\" === typeof define && define.amd ? define(\"highcharts/highcharts\", function () {\n    return M(P);\n  }) : (P.Highcharts && P.Highcharts.error(16, !0), P.Highcharts = M(P));\n})(\"undefined\" !== typeof window ? window : this, function (P) {\n  function M(c, f, F, G) {\n    c.hasOwnProperty(f) || (c[f] = G.apply(null, F));\n  }\n  var I = {};\n  M(I, \"parts/Globals.js\", [], function () {\n    var c = \"undefined\" !== typeof P ? P : \"undefined\" !== typeof window ? window : {},\n      f = c.document,\n      F = c.navigator && c.navigator.userAgent || \"\",\n      G = f && f.createElementNS && !!f.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\").createSVGRect,\n      z = /(edge|msie|trident)/i.test(F) && !c.opera,\n      B = -1 !== F.indexOf(\"Firefox\"),\n      t = -1 !== F.indexOf(\"Chrome\"),\n      v = B && 4 > parseInt(F.split(\"Firefox/\")[1], 10);\n    return {\n      product: \"Highcharts\",\n      version: \"7.2.2\",\n      deg2rad: 2 * Math.PI / 360,\n      doc: f,\n      hasBidiBug: v,\n      hasTouch: !!c.TouchEvent,\n      isMS: z,\n      isWebKit: -1 !== F.indexOf(\"AppleWebKit\"),\n      isFirefox: B,\n      isChrome: t,\n      isSafari: !t && -1 !== F.indexOf(\"Safari\"),\n      isTouchDevice: /(Mobile|Android|Windows Phone)/.test(F),\n      SVG_NS: \"http://www.w3.org/2000/svg\",\n      chartCount: 0,\n      seriesTypes: {},\n      symbolSizes: {},\n      svg: G,\n      win: c,\n      marginNames: [\"plotTop\", \"marginRight\", \"marginBottom\", \"plotLeft\"],\n      noop: function () {},\n      charts: [],\n      dateFormats: {}\n    };\n  });\n  M(I, \"parts/Utilities.js\", [I[\"parts/Globals.js\"]], function (c) {\n    function f(a, d) {\n      return parseInt(a, d || 10);\n    }\n    function F(a) {\n      return \"string\" === typeof a;\n    }\n    function G(a) {\n      a = Object.prototype.toString.call(a);\n      return \"[object Array]\" === a || \"[object Array Iterator]\" === a;\n    }\n    function z(a, d) {\n      return !!a && \"object\" === typeof a && (!d || !G(a));\n    }\n    function B(a) {\n      return z(a) && \"number\" === typeof a.nodeType;\n    }\n    function t(a) {\n      var d = a && a.constructor;\n      return !(!z(a, !0) || B(a) || !d || !d.name || \"Object\" === d.name);\n    }\n    function v(a) {\n      return \"number\" === typeof a && !isNaN(a) && Infinity > a && -Infinity < a;\n    }\n    function C(a) {\n      return \"undefined\" !== typeof a && null !== a;\n    }\n    function H(a, d, e) {\n      var b;\n      F(d) ? C(e) ? a.setAttribute(d, e) : a && a.getAttribute && ((b = a.getAttribute(d)) || \"class\" !== d || (b = a.getAttribute(d + \"Name\"))) : n(d, function (d, e) {\n        a.setAttribute(e, d);\n      });\n      return b;\n    }\n    function y(a, d) {\n      var e;\n      a || (a = {});\n      for (e in d) a[e] = d[e];\n      return a;\n    }\n    function h() {\n      for (var a = arguments, d = a.length, e = 0; e < d; e++) {\n        var b = a[e];\n        if (\"undefined\" !== typeof b && null !== b) return b;\n      }\n    }\n    function n(a, d, e) {\n      for (var b in a) Object.hasOwnProperty.call(a, b) && d.call(e || a[b], a[b], b, a);\n    }\n    c.timers = [];\n    var q = c.charts,\n      g = c.doc,\n      b = c.win;\n    c.error = function (a, d, e, l) {\n      var g = v(a),\n        h = g ? \"Highcharts error #\" + a + \": www.highcharts.com/errors/\" + a + \"/\" : a.toString(),\n        p = function () {\n          if (d) throw Error(h);\n          b.console && console.log(h);\n        };\n      if (\"undefined\" !== typeof l) {\n        var u = \"\";\n        g && (h += \"?\");\n        c.objectEach(l, function (a, d) {\n          u += \"\\n\" + d + \": \" + a;\n          g && (h += encodeURI(d) + \"=\" + encodeURI(a));\n        });\n        h += u;\n      }\n      e ? c.fireEvent(e, \"displayError\", {\n        code: a,\n        message: h,\n        params: l\n      }, p) : p();\n    };\n    c.Fx = function (a, d, e) {\n      this.options = d;\n      this.elem = a;\n      this.prop = e;\n    };\n    c.Fx.prototype = {\n      dSetter: function () {\n        var a = this.paths[0],\n          d = this.paths[1],\n          e = [],\n          b = this.now,\n          g = a.length;\n        if (1 === b) e = this.toD;else if (g === d.length && 1 > b) for (; g--;) {\n          var c = parseFloat(a[g]);\n          e[g] = isNaN(c) || \"A\" === d[g - 4] || \"A\" === d[g - 5] ? d[g] : b * parseFloat(\"\" + (d[g] - c)) + c;\n        } else e = d;\n        this.elem.attr(\"d\", e, null, !0);\n      },\n      update: function () {\n        var a = this.elem,\n          d = this.prop,\n          e = this.now,\n          b = this.options.step;\n        if (this[d + \"Setter\"]) this[d + \"Setter\"]();else a.attr ? a.element && a.attr(d, e, null, !0) : a.style[d] = e + this.unit;\n        b && b.call(a, e, this);\n      },\n      run: function (a, d, e) {\n        var l = this,\n          g = l.options,\n          h = function (a) {\n            return h.stopped ? !1 : l.step(a);\n          },\n          p = b.requestAnimationFrame || function (a) {\n            setTimeout(a, 13);\n          },\n          u = function () {\n            for (var a = 0; a < c.timers.length; a++) c.timers[a]() || c.timers.splice(a--, 1);\n            c.timers.length && p(u);\n          };\n        a !== d || this.elem[\"forceAnimate:\" + this.prop] ? (this.startTime = +new Date(), this.start = a, this.end = d, this.unit = e, this.now = this.start, this.pos = 0, h.elem = this.elem, h.prop = this.prop, h() && 1 === c.timers.push(h) && p(u)) : (delete g.curAnim[this.prop], g.complete && 0 === Object.keys(g.curAnim).length && g.complete.call(this.elem));\n      },\n      step: function (a) {\n        var d = +new Date(),\n          e = this.options,\n          b = this.elem,\n          g = e.complete,\n          c = e.duration,\n          p = e.curAnim;\n        if (b.attr && !b.element) a = !1;else if (a || d >= c + this.startTime) {\n          this.now = this.end;\n          this.pos = 1;\n          this.update();\n          var u = p[this.prop] = !0;\n          n(p, function (a) {\n            !0 !== a && (u = !1);\n          });\n          u && g && g.call(b);\n          a = !1;\n        } else this.pos = e.easing((d - this.startTime) / c), this.now = this.start + (this.end - this.start) * this.pos, this.update(), a = !0;\n        return a;\n      },\n      initPath: function (a, d, e) {\n        function b(a) {\n          for (A = a.length; A--;) {\n            var d = \"M\" === a[A] || \"L\" === a[A];\n            var e = /[a-zA-Z]/.test(a[A + 3]);\n            d && e && a.splice(A + 1, 0, a[A + 1], a[A + 2], a[A + 1], a[A + 2]);\n          }\n        }\n        function g(a, d) {\n          for (; a.length < h;) {\n            a[0] = d[h - a.length];\n            var e = a.slice(0, r);\n            [].splice.apply(a, [0, 0].concat(e));\n            w && (e = a.slice(a.length - r), [].splice.apply(a, [a.length, 0].concat(e)), A--);\n          }\n          a[0] = \"M\";\n        }\n        function c(a, d) {\n          for (var e = (h - a.length) / r; 0 < e && e--;) x = a.slice().splice(a.length / m - r, r * m), x[0] = d[h - r - e * r], k && (x[r - 6] = x[r - 2], x[r - 5] = x[r - 1]), [].splice.apply(a, [a.length / m, 0].concat(x)), w && e--;\n        }\n        d = d || \"\";\n        var p = a.startX,\n          u = a.endX,\n          k = -1 < d.indexOf(\"C\"),\n          r = k ? 7 : 3,\n          x,\n          A;\n        d = d.split(\" \");\n        e = e.slice();\n        var w = a.isArea,\n          m = w ? 2 : 1;\n        k && (b(d), b(e));\n        if (p && u) {\n          for (A = 0; A < p.length; A++) if (p[A] === u[0]) {\n            var K = A;\n            break;\n          } else if (p[0] === u[u.length - p.length + A]) {\n            K = A;\n            var J = !0;\n            break;\n          } else if (p[p.length - 1] === u[u.length - p.length + A]) {\n            K = p.length - A;\n            break;\n          }\n          \"undefined\" === typeof K && (d = []);\n        }\n        if (d.length && v(K)) {\n          var h = e.length + K * m * r;\n          J ? (g(d, e), c(e, d)) : (g(e, d), c(d, e));\n        }\n        return [d, e];\n      },\n      fillSetter: function () {\n        c.Fx.prototype.strokeSetter.apply(this, arguments);\n      },\n      strokeSetter: function () {\n        this.elem.attr(this.prop, c.color(this.start).tweenTo(c.color(this.end), this.pos), null, !0);\n      }\n    };\n    c.merge = function () {\n      var a,\n        d = arguments,\n        e = {},\n        b = function (a, d) {\n          \"object\" !== typeof a && (a = {});\n          n(d, function (e, k) {\n            !z(e, !0) || t(e) || B(e) ? a[k] = d[k] : a[k] = b(a[k] || {}, e);\n          });\n          return a;\n        };\n      !0 === d[0] && (e = d[1], d = Array.prototype.slice.call(d, 2));\n      var g = d.length;\n      for (a = 0; a < g; a++) e = b(e, d[a]);\n      return e;\n    };\n    c.clearTimeout = function (a) {\n      C(a) && clearTimeout(a);\n    };\n    c.css = function (a, d) {\n      c.isMS && !c.svg && d && \"undefined\" !== typeof d.opacity && (d.filter = \"alpha(opacity=\" + 100 * d.opacity + \")\");\n      y(a.style, d);\n    };\n    c.createElement = function (a, d, e, b, L) {\n      a = g.createElement(a);\n      var l = c.css;\n      d && y(a, d);\n      L && l(a, {\n        padding: \"0\",\n        border: \"none\",\n        margin: \"0\"\n      });\n      e && l(a, e);\n      b && b.appendChild(a);\n      return a;\n    };\n    c.extendClass = function (a, d) {\n      var e = function () {};\n      e.prototype = new a();\n      y(e.prototype, d);\n      return e;\n    };\n    c.pad = function (a, d, e) {\n      return Array((d || 2) + 1 - String(a).replace(\"-\", \"\").length).join(e || \"0\") + a;\n    };\n    c.relativeLength = function (a, d, e) {\n      return /%$/.test(a) ? d * parseFloat(a) / 100 + (e || 0) : parseFloat(a);\n    };\n    c.wrap = function (a, d, e) {\n      var b = a[d];\n      a[d] = function () {\n        var a = Array.prototype.slice.call(arguments),\n          d = arguments,\n          l = this;\n        l.proceed = function () {\n          b.apply(l, arguments.length ? arguments : d);\n        };\n        a.unshift(b);\n        a = e.apply(this, a);\n        l.proceed = null;\n        return a;\n      };\n    };\n    c.datePropsToTimestamps = function (a) {\n      n(a, function (d, e) {\n        z(d) && \"function\" === typeof d.getTime ? a[e] = d.getTime() : (z(d) || G(d)) && c.datePropsToTimestamps(d);\n      });\n    };\n    c.formatSingle = function (a, d, e) {\n      var b = /\\.([0-9])/,\n        g = c.defaultOptions.lang;\n      /f$/.test(a) ? (e = (e = a.match(b)) ? e[1] : -1, null !== d && (d = c.numberFormat(d, e, g.decimalPoint, -1 < a.indexOf(\",\") ? g.thousandsSep : \"\"))) : d = (e || c.time).dateFormat(a, d);\n      return d;\n    };\n    c.format = function (a, d, e) {\n      for (var b = \"{\", g = !1, h, p, u, k, r = [], x; a;) {\n        b = a.indexOf(b);\n        if (-1 === b) break;\n        h = a.slice(0, b);\n        if (g) {\n          h = h.split(\":\");\n          p = h.shift().split(\".\");\n          k = p.length;\n          x = d;\n          for (u = 0; u < k; u++) x && (x = x[p[u]]);\n          h.length && (x = c.formatSingle(h.join(\":\"), x, e));\n          r.push(x);\n        } else r.push(h);\n        a = a.slice(b + 1);\n        b = (g = !g) ? \"}\" : \"{\";\n      }\n      r.push(a);\n      return r.join(\"\");\n    };\n    c.getMagnitude = function (a) {\n      return Math.pow(10, Math.floor(Math.log(a) / Math.LN10));\n    };\n    c.normalizeTickInterval = function (a, d, e, b, g) {\n      var l = a;\n      e = h(e, 1);\n      var p = a / e;\n      d || (d = g ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] : [1, 2, 2.5, 5, 10], !1 === b && (1 === e ? d = d.filter(function (a) {\n        return 0 === a % 1;\n      }) : .1 >= e && (d = [1 / e])));\n      for (b = 0; b < d.length && !(l = d[b], g && l * e >= a || !g && p <= (d[b] + (d[b + 1] || d[b])) / 2); b++);\n      return l = c.correctFloat(l * e, -Math.round(Math.log(.001) / Math.LN10));\n    };\n    c.stableSort = function (a, d) {\n      var b = a.length,\n        l,\n        g;\n      for (g = 0; g < b; g++) a[g].safeI = g;\n      a.sort(function (a, b) {\n        l = d(a, b);\n        return 0 === l ? a.safeI - b.safeI : l;\n      });\n      for (g = 0; g < b; g++) delete a[g].safeI;\n    };\n    c.correctFloat = function (a, d) {\n      return parseFloat(a.toPrecision(d || 14));\n    };\n    c.animObject = function (a) {\n      return z(a) ? c.merge(a) : {\n        duration: a ? 500 : 0\n      };\n    };\n    c.timeUnits = {\n      millisecond: 1,\n      second: 1E3,\n      minute: 6E4,\n      hour: 36E5,\n      day: 864E5,\n      week: 6048E5,\n      month: 24192E5,\n      year: 314496E5\n    };\n    c.numberFormat = function (a, d, b, l) {\n      a = +a || 0;\n      d = +d;\n      var e = c.defaultOptions.lang,\n        g = (a.toString().split(\".\")[1] || \"\").split(\"e\")[0].length,\n        p = a.toString().split(\"e\");\n      if (-1 === d) d = Math.min(g, 20);else if (!v(d)) d = 2;else if (d && p[1] && 0 > p[1]) {\n        var u = d + +p[1];\n        0 <= u ? (p[0] = (+p[0]).toExponential(u).split(\"e\")[0], d = u) : (p[0] = p[0].split(\".\")[0] || 0, a = 20 > d ? (p[0] * Math.pow(10, p[1])).toFixed(d) : 0, p[1] = 0);\n      }\n      var k = (Math.abs(p[1] ? p[0] : a) + Math.pow(10, -Math.max(d, g) - 1)).toFixed(d);\n      g = String(f(k));\n      u = 3 < g.length ? g.length % 3 : 0;\n      b = h(b, e.decimalPoint);\n      l = h(l, e.thousandsSep);\n      a = (0 > a ? \"-\" : \"\") + (u ? g.substr(0, u) + l : \"\");\n      a += g.substr(u).replace(/(\\d{3})(?=\\d)/g, \"$1\" + l);\n      d && (a += b + k.slice(-d));\n      p[1] && 0 !== +a && (a += \"e\" + p[1]);\n      return a;\n    };\n    Math.easeInOutSine = function (a) {\n      return -.5 * (Math.cos(Math.PI * a) - 1);\n    };\n    c.getStyle = function (a, d, e) {\n      if (\"width\" === d) return d = Math.min(a.offsetWidth, a.scrollWidth), e = a.getBoundingClientRect && a.getBoundingClientRect().width, e < d && e >= d - 1 && (d = Math.floor(e)), Math.max(0, d - c.getStyle(a, \"padding-left\") - c.getStyle(a, \"padding-right\"));\n      if (\"height\" === d) return Math.max(0, Math.min(a.offsetHeight, a.scrollHeight) - c.getStyle(a, \"padding-top\") - c.getStyle(a, \"padding-bottom\"));\n      b.getComputedStyle || c.error(27, !0);\n      if (a = b.getComputedStyle(a, void 0)) a = a.getPropertyValue(d), h(e, \"opacity\" !== d) && (a = f(a));\n      return a;\n    };\n    c.inArray = function (a, d, b) {\n      return d.indexOf(a, b);\n    };\n    c.find = Array.prototype.find ? function (a, d) {\n      return a.find(d);\n    } : function (a, d) {\n      var b,\n        l = a.length;\n      for (b = 0; b < l; b++) if (d(a[b], b)) return a[b];\n    };\n    c.keys = Object.keys;\n    c.offset = function (a) {\n      var d = g.documentElement;\n      a = a.parentElement || a.parentNode ? a.getBoundingClientRect() : {\n        top: 0,\n        left: 0\n      };\n      return {\n        top: a.top + (b.pageYOffset || d.scrollTop) - (d.clientTop || 0),\n        left: a.left + (b.pageXOffset || d.scrollLeft) - (d.clientLeft || 0)\n      };\n    };\n    c.stop = function (a, b) {\n      for (var d = c.timers.length; d--;) c.timers[d].elem !== a || b && b !== c.timers[d].prop || (c.timers[d].stopped = !0);\n    };\n    n({\n      map: \"map\",\n      each: \"forEach\",\n      grep: \"filter\",\n      reduce: \"reduce\",\n      some: \"some\"\n    }, function (a, b) {\n      c[b] = function (b) {\n        return Array.prototype[a].apply(b, [].slice.call(arguments, 1));\n      };\n    });\n    c.addEvent = function (a, b, e, l) {\n      void 0 === l && (l = {});\n      var d = a.addEventListener || c.addEventListenerPolyfill;\n      var g = \"function\" === typeof a && a.prototype ? a.prototype.protoEvents = a.prototype.protoEvents || {} : a.hcEvents = a.hcEvents || {};\n      c.Point && a instanceof c.Point && a.series && a.series.chart && (a.series.chart.runTrackerClick = !0);\n      d && d.call(a, b, e, !1);\n      g[b] || (g[b] = []);\n      g[b].push({\n        fn: e,\n        order: \"number\" === typeof l.order ? l.order : Infinity\n      });\n      g[b].sort(function (a, b) {\n        return a.order - b.order;\n      });\n      return function () {\n        c.removeEvent(a, b, e);\n      };\n    };\n    c.removeEvent = function (a, b, e) {\n      function d(b, d) {\n        var e = a.removeEventListener || c.removeEventListenerPolyfill;\n        e && e.call(a, b, d, !1);\n      }\n      function g(e) {\n        var l;\n        if (a.nodeName) {\n          if (b) {\n            var k = {};\n            k[b] = !0;\n          } else k = e;\n          n(k, function (a, b) {\n            if (e[b]) for (l = e[b].length; l--;) d(b, e[b][l].fn);\n          });\n        }\n      }\n      var h;\n      [\"protoEvents\", \"hcEvents\"].forEach(function (l, c) {\n        var k = (c = c ? a : a.prototype) && c[l];\n        k && (b ? (h = k[b] || [], e ? (k[b] = h.filter(function (a) {\n          return e !== a.fn;\n        }), d(b, e)) : (g(k), k[b] = [])) : (g(k), c[l] = {}));\n      });\n    };\n    c.fireEvent = function (a, b, e, l) {\n      var d;\n      e = e || {};\n      if (g.createEvent && (a.dispatchEvent || a.fireEvent)) {\n        var c = g.createEvent(\"Events\");\n        c.initEvent(b, !0, !0);\n        y(c, e);\n        a.dispatchEvent ? a.dispatchEvent(c) : a.fireEvent(b, c);\n      } else e.target || y(e, {\n        preventDefault: function () {\n          e.defaultPrevented = !0;\n        },\n        target: a,\n        type: b\n      }), function (b, l) {\n        void 0 === b && (b = []);\n        void 0 === l && (l = []);\n        var k = 0,\n          r = 0,\n          g = b.length + l.length;\n        for (d = 0; d < g; d++) !1 === (b[k] ? l[r] ? b[k].order <= l[r].order ? b[k++] : l[r++] : b[k++] : l[r++]).fn.call(a, e) && e.preventDefault();\n      }(a.protoEvents && a.protoEvents[b], a.hcEvents && a.hcEvents[b]);\n      l && !e.defaultPrevented && l.call(a, e);\n    };\n    c.animate = function (a, b, e) {\n      var d,\n        g = \"\",\n        h,\n        p;\n      if (!z(e)) {\n        var u = arguments;\n        e = {\n          duration: u[2],\n          easing: u[3],\n          complete: u[4]\n        };\n      }\n      v(e.duration) || (e.duration = 400);\n      e.easing = \"function\" === typeof e.easing ? e.easing : Math[e.easing] || Math.easeInOutSine;\n      e.curAnim = c.merge(b);\n      n(b, function (k, l) {\n        c.stop(a, l);\n        p = new c.Fx(a, e, l);\n        h = null;\n        \"d\" === l ? (p.paths = p.initPath(a, a.d, b.d), p.toD = b.d, d = 0, h = 1) : a.attr ? d = a.attr(l) : (d = parseFloat(c.getStyle(a, l)) || 0, \"opacity\" !== l && (g = \"px\"));\n        h || (h = k);\n        h && h.match && h.match(\"px\") && (h = h.replace(/px/g, \"\"));\n        p.run(d, h, g);\n      });\n    };\n    c.seriesType = function (a, b, e, l, g) {\n      var d = c.getOptions(),\n        p = c.seriesTypes;\n      d.plotOptions[a] = c.merge(d.plotOptions[b], e);\n      p[a] = c.extendClass(p[b] || function () {}, l);\n      p[a].prototype.type = a;\n      g && (p[a].prototype.pointClass = c.extendClass(c.Point, g));\n      return p[a];\n    };\n    c.uniqueKey = function () {\n      var a = Math.random().toString(36).substring(2, 9),\n        b = 0;\n      return function () {\n        return \"highcharts-\" + a + \"-\" + b++;\n      };\n    }();\n    c.isFunction = function (a) {\n      return \"function\" === typeof a;\n    };\n    b.jQuery && (b.jQuery.fn.highcharts = function () {\n      var a = [].slice.call(arguments);\n      if (this[0]) return a[0] ? (new c[F(a[0]) ? a.shift() : \"Chart\"](this[0], a[0], a[1]), this) : q[H(this[0], \"data-highcharts-chart\")];\n    });\n    return {\n      arrayMax: function (a) {\n        for (var b = a.length, e = a[0]; b--;) a[b] > e && (e = a[b]);\n        return e;\n      },\n      arrayMin: function (a) {\n        for (var b = a.length, e = a[0]; b--;) a[b] < e && (e = a[b]);\n        return e;\n      },\n      attr: H,\n      defined: C,\n      destroyObjectProperties: function (a, b) {\n        n(a, function (d, l) {\n          d && d !== b && d.destroy && d.destroy();\n          delete a[l];\n        });\n      },\n      discardElement: function (a) {\n        var b = c.garbageBin;\n        b || (b = c.createElement(\"div\"));\n        a && b.appendChild(a);\n        b.innerHTML = \"\";\n      },\n      erase: function (a, b) {\n        for (var d = a.length; d--;) if (a[d] === b) {\n          a.splice(d, 1);\n          break;\n        }\n      },\n      extend: y,\n      isArray: G,\n      isClass: t,\n      isDOMElement: B,\n      isNumber: v,\n      isObject: z,\n      isString: F,\n      objectEach: n,\n      pick: h,\n      pInt: f,\n      setAnimation: function (a, b) {\n        b.renderer.globalAnimation = h(a, b.options.chart.animation, !0);\n      },\n      splat: function (a) {\n        return G(a) ? a : [a];\n      },\n      syncTimeout: function (a, b, e) {\n        if (0 < b) return setTimeout(a, b, e);\n        a.call(0, e);\n        return -1;\n      }\n    };\n  });\n  M(I, \"parts/Color.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.isNumber,\n      G = f.pInt,\n      z = c.merge;\n    c.Color = function (f) {\n      if (!(this instanceof c.Color)) return new c.Color(f);\n      this.init(f);\n    };\n    c.Color.prototype = {\n      parsers: [{\n        regex: /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,\n        parse: function (c) {\n          return [G(c[1]), G(c[2]), G(c[3]), parseFloat(c[4], 10)];\n        }\n      }, {\n        regex: /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,\n        parse: function (c) {\n          return [G(c[1]), G(c[2]), G(c[3]), 1];\n        }\n      }],\n      names: {\n        white: \"#ffffff\",\n        black: \"#000000\"\n      },\n      init: function (f) {\n        var t, v;\n        if ((this.input = f = this.names[f && f.toLowerCase ? f.toLowerCase() : \"\"] || f) && f.stops) this.stops = f.stops.map(function (f) {\n          return new c.Color(f[1]);\n        });else {\n          if (f && f.charAt && \"#\" === f.charAt()) {\n            var C = f.length;\n            f = parseInt(f.substr(1), 16);\n            7 === C ? t = [(f & 16711680) >> 16, (f & 65280) >> 8, f & 255, 1] : 4 === C && (t = [(f & 3840) >> 4 | (f & 3840) >> 8, (f & 240) >> 4 | f & 240, (f & 15) << 4 | f & 15, 1]);\n          }\n          if (!t) for (v = this.parsers.length; v-- && !t;) {\n            var B = this.parsers[v];\n            (C = B.regex.exec(f)) && (t = B.parse(C));\n          }\n        }\n        this.rgba = t || [];\n      },\n      get: function (c) {\n        var f = this.input,\n          v = this.rgba;\n        if (this.stops) {\n          var C = z(f);\n          C.stops = [].concat(C.stops);\n          this.stops.forEach(function (f, v) {\n            C.stops[v] = [C.stops[v][0], f.get(c)];\n          });\n        } else C = v && F(v[0]) ? \"rgb\" === c || !c && 1 === v[3] ? \"rgb(\" + v[0] + \",\" + v[1] + \",\" + v[2] + \")\" : \"a\" === c ? v[3] : \"rgba(\" + v.join(\",\") + \")\" : f;\n        return C;\n      },\n      brighten: function (c) {\n        var f,\n          v = this.rgba;\n        if (this.stops) this.stops.forEach(function (f) {\n          f.brighten(c);\n        });else if (F(c) && 0 !== c) for (f = 0; 3 > f; f++) v[f] += G(255 * c), 0 > v[f] && (v[f] = 0), 255 < v[f] && (v[f] = 255);\n        return this;\n      },\n      setOpacity: function (c) {\n        this.rgba[3] = c;\n        return this;\n      },\n      tweenTo: function (c, f) {\n        var v = this.rgba,\n          t = c.rgba;\n        t.length && v && v.length ? (c = 1 !== t[3] || 1 !== v[3], f = (c ? \"rgba(\" : \"rgb(\") + Math.round(t[0] + (v[0] - t[0]) * (1 - f)) + \",\" + Math.round(t[1] + (v[1] - t[1]) * (1 - f)) + \",\" + Math.round(t[2] + (v[2] - t[2]) * (1 - f)) + (c ? \",\" + (t[3] + (v[3] - t[3]) * (1 - f)) : \"\") + \")\") : f = c.input || \"none\";\n        return f;\n      }\n    };\n    c.color = function (f) {\n      return new c.Color(f);\n    };\n  });\n  M(I, \"parts/SvgRenderer.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.attr,\n      G = f.defined,\n      z = f.destroyObjectProperties,\n      B = f.erase,\n      t = f.extend,\n      v = f.isArray,\n      C = f.isNumber,\n      H = f.isObject,\n      y = f.isString,\n      h = f.objectEach,\n      n = f.pick,\n      q = f.pInt,\n      g = f.splat,\n      b = c.addEvent,\n      a = c.animate,\n      d = c.charts,\n      e = c.color,\n      l = c.css,\n      L = c.createElement,\n      E = c.deg2rad,\n      p = c.doc,\n      u = c.hasTouch,\n      k = c.isFirefox,\n      r = c.isMS,\n      x = c.isWebKit,\n      A = c.merge,\n      w = c.noop,\n      m = c.removeEvent,\n      K = c.stop,\n      J = c.svg,\n      U = c.SVG_NS,\n      S = c.symbolSizes,\n      Q = c.win;\n    var O = c.SVGElement = function () {\n      return this;\n    };\n    t(O.prototype, {\n      opacity: 1,\n      SVG_NS: U,\n      textProps: \"direction fontSize fontWeight fontFamily fontStyle color lineHeight width textAlign textDecoration textOverflow textOutline cursor\".split(\" \"),\n      init: function (a, b) {\n        this.element = \"span\" === b ? L(b) : p.createElementNS(this.SVG_NS, b);\n        this.renderer = a;\n        c.fireEvent(this, \"afterInit\");\n      },\n      animate: function (b, d, m) {\n        var D = c.animObject(n(d, this.renderer.globalAnimation, !0));\n        n(p.hidden, p.msHidden, p.webkitHidden, !1) && (D.duration = 0);\n        0 !== D.duration ? (m && (D.complete = m), a(this, b, D)) : (this.attr(b, void 0, m), h(b, function (a, b) {\n          D.step && D.step.call(this, a, {\n            prop: b,\n            pos: 1\n          });\n        }, this));\n        return this;\n      },\n      complexColor: function (a, b, d) {\n        var D = this.renderer,\n          m,\n          e,\n          w,\n          N,\n          k,\n          l,\n          g,\n          r,\n          x,\n          p,\n          K,\n          J = [],\n          T;\n        c.fireEvent(this.renderer, \"complexColor\", {\n          args: arguments\n        }, function () {\n          a.radialGradient ? e = \"radialGradient\" : a.linearGradient && (e = \"linearGradient\");\n          e && (w = a[e], k = D.gradients, g = a.stops, p = d.radialReference, v(w) && (a[e] = w = {\n            x1: w[0],\n            y1: w[1],\n            x2: w[2],\n            y2: w[3],\n            gradientUnits: \"userSpaceOnUse\"\n          }), \"radialGradient\" === e && p && !G(w.gradientUnits) && (N = w, w = A(w, D.getRadialAttr(p, N), {\n            gradientUnits: \"userSpaceOnUse\"\n          })), h(w, function (a, b) {\n            \"id\" !== b && J.push(b, a);\n          }), h(g, function (a) {\n            J.push(a);\n          }), J = J.join(\",\"), k[J] ? K = k[J].attr(\"id\") : (w.id = K = c.uniqueKey(), k[J] = l = D.createElement(e).attr(w).add(D.defs), l.radAttr = N, l.stops = [], g.forEach(function (a) {\n            0 === a[1].indexOf(\"rgba\") ? (m = c.color(a[1]), r = m.get(\"rgb\"), x = m.get(\"a\")) : (r = a[1], x = 1);\n            a = D.createElement(\"stop\").attr({\n              offset: a[0],\n              \"stop-color\": r,\n              \"stop-opacity\": x\n            }).add(l);\n            l.stops.push(a);\n          })), T = \"url(\" + D.url + \"#\" + K + \")\", d.setAttribute(b, T), d.gradient = J, a.toString = function () {\n            return T;\n          });\n        });\n      },\n      applyTextOutline: function (a) {\n        var b = this.element,\n          D;\n        -1 !== a.indexOf(\"contrast\") && (a = a.replace(/contrast/g, this.renderer.getContrast(b.style.fill)));\n        a = a.split(\" \");\n        var d = a[a.length - 1];\n        if ((D = a[0]) && \"none\" !== D && c.svg) {\n          this.fakeTS = !0;\n          a = [].slice.call(b.getElementsByTagName(\"tspan\"));\n          this.ySetter = this.xSetter;\n          D = D.replace(/(^[\\d\\.]+)(.*?)$/g, function (a, b, D) {\n            return 2 * b + D;\n          });\n          this.removeTextOutline(a);\n          var m = b.firstChild;\n          a.forEach(function (a, e) {\n            0 === e && (a.setAttribute(\"x\", b.getAttribute(\"x\")), e = b.getAttribute(\"y\"), a.setAttribute(\"y\", e || 0), null === e && b.setAttribute(\"y\", 0));\n            a = a.cloneNode(1);\n            F(a, {\n              \"class\": \"highcharts-text-outline\",\n              fill: d,\n              stroke: d,\n              \"stroke-width\": D,\n              \"stroke-linejoin\": \"round\"\n            });\n            b.insertBefore(a, m);\n          });\n        }\n      },\n      removeTextOutline: function (a) {\n        for (var b = a.length, D; b--;) D = a[b], \"highcharts-text-outline\" === D.getAttribute(\"class\") && B(a, this.element.removeChild(D));\n      },\n      symbolCustomAttribs: \"x y width height r start end innerR anchorX anchorY rounded\".split(\" \"),\n      attr: function (a, b, d, e) {\n        var D = this.element,\n          m,\n          w = this,\n          N,\n          k,\n          l = this.symbolCustomAttribs;\n        if (\"string\" === typeof a && void 0 !== b) {\n          var g = a;\n          a = {};\n          a[g] = b;\n        }\n        \"string\" === typeof a ? w = (this[a + \"Getter\"] || this._defaultGetter).call(this, a, D) : (h(a, function (b, d) {\n          N = !1;\n          e || K(this, d);\n          this.symbolName && -1 !== c.inArray(d, l) && (m || (this.symbolAttr(a), m = !0), N = !0);\n          !this.rotation || \"x\" !== d && \"y\" !== d || (this.doTransform = !0);\n          N || (k = this[d + \"Setter\"] || this._defaultSetter, k.call(this, b, d, D), !this.styledMode && this.shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(d) && this.updateShadows(d, b, k));\n        }, this), this.afterSetters());\n        d && d.call(this);\n        return w;\n      },\n      afterSetters: function () {\n        this.doTransform && (this.updateTransform(), this.doTransform = !1);\n      },\n      updateShadows: function (a, b, d) {\n        for (var D = this.shadows, e = D.length; e--;) d.call(D[e], \"height\" === a ? Math.max(b - (D[e].cutHeight || 0), 0) : \"d\" === a ? this.d : b, a, D[e]);\n      },\n      addClass: function (a, b) {\n        var D = b ? \"\" : this.attr(\"class\") || \"\";\n        a = (a || \"\").split(/ /g).reduce(function (a, b) {\n          -1 === D.indexOf(b) && a.push(b);\n          return a;\n        }, D ? [D] : []).join(\" \");\n        a !== D && this.attr(\"class\", a);\n        return this;\n      },\n      hasClass: function (a) {\n        return -1 !== (this.attr(\"class\") || \"\").split(\" \").indexOf(a);\n      },\n      removeClass: function (a) {\n        return this.attr(\"class\", (this.attr(\"class\") || \"\").replace(y(a) ? new RegExp(\" ?\" + a + \" ?\") : a, \"\"));\n      },\n      symbolAttr: function (a) {\n        var b = this;\n        \"x y r start end width height innerR anchorX anchorY clockwise\".split(\" \").forEach(function (D) {\n          b[D] = n(a[D], b[D]);\n        });\n        b.attr({\n          d: b.renderer.symbols[b.symbolName](b.x, b.y, b.width, b.height, b)\n        });\n      },\n      clip: function (a) {\n        return this.attr(\"clip-path\", a ? \"url(\" + this.renderer.url + \"#\" + a.id + \")\" : \"none\");\n      },\n      crisp: function (a, b) {\n        b = b || a.strokeWidth || 0;\n        var D = Math.round(b) % 2 / 2;\n        a.x = Math.floor(a.x || this.x || 0) + D;\n        a.y = Math.floor(a.y || this.y || 0) + D;\n        a.width = Math.floor((a.width || this.width || 0) - 2 * D);\n        a.height = Math.floor((a.height || this.height || 0) - 2 * D);\n        G(a.strokeWidth) && (a.strokeWidth = b);\n        return a;\n      },\n      css: function (a) {\n        var b = this.styles,\n          D = {},\n          d = this.element,\n          e = \"\",\n          m = !b,\n          w = [\"textOutline\", \"textOverflow\", \"width\"];\n        a && a.color && (a.fill = a.color);\n        b && h(a, function (a, d) {\n          a !== b[d] && (D[d] = a, m = !0);\n        });\n        if (m) {\n          b && (a = t(b, D));\n          if (a) if (null === a.width || \"auto\" === a.width) delete this.textWidth;else if (\"text\" === d.nodeName.toLowerCase() && a.width) var k = this.textWidth = q(a.width);\n          this.styles = a;\n          k && !J && this.renderer.forExport && delete a.width;\n          if (d.namespaceURI === this.SVG_NS) {\n            var g = function (a, b) {\n              return \"-\" + b.toLowerCase();\n            };\n            h(a, function (a, b) {\n              -1 === w.indexOf(b) && (e += b.replace(/([A-Z])/g, g) + \":\" + a + \";\");\n            });\n            e && F(d, \"style\", e);\n          } else l(d, a);\n          this.added && (\"text\" === this.element.nodeName && this.renderer.buildText(this), a && a.textOutline && this.applyTextOutline(a.textOutline));\n        }\n        return this;\n      },\n      getStyle: function (a) {\n        return Q.getComputedStyle(this.element || this, \"\").getPropertyValue(a);\n      },\n      strokeWidth: function () {\n        if (!this.renderer.styledMode) return this[\"stroke-width\"] || 0;\n        var a = this.getStyle(\"stroke-width\");\n        if (a.indexOf(\"px\") === a.length - 2) a = q(a);else {\n          var b = p.createElementNS(U, \"rect\");\n          F(b, {\n            width: a,\n            \"stroke-width\": 0\n          });\n          this.element.parentNode.appendChild(b);\n          a = b.getBBox().width;\n          b.parentNode.removeChild(b);\n        }\n        return a;\n      },\n      on: function (a, b) {\n        var d = this,\n          D = d.element;\n        u && \"click\" === a ? (D.ontouchstart = function (a) {\n          d.touchEventFired = Date.now();\n          a.preventDefault();\n          b.call(D, a);\n        }, D.onclick = function (a) {\n          (-1 === Q.navigator.userAgent.indexOf(\"Android\") || 1100 < Date.now() - (d.touchEventFired || 0)) && b.call(D, a);\n        }) : D[\"on\" + a] = b;\n        return this;\n      },\n      setRadialReference: function (a) {\n        var b = this.renderer.gradients[this.element.gradient];\n        this.element.radialReference = a;\n        b && b.radAttr && b.animate(this.renderer.getRadialAttr(a, b.radAttr));\n        return this;\n      },\n      translate: function (a, b) {\n        return this.attr({\n          translateX: a,\n          translateY: b\n        });\n      },\n      invert: function (a) {\n        this.inverted = a;\n        this.updateTransform();\n        return this;\n      },\n      updateTransform: function () {\n        var a = this.translateX || 0,\n          b = this.translateY || 0,\n          d = this.scaleX,\n          e = this.scaleY,\n          m = this.inverted,\n          w = this.rotation,\n          k = this.matrix,\n          l = this.element;\n        m && (a += this.width, b += this.height);\n        a = [\"translate(\" + a + \",\" + b + \")\"];\n        G(k) && a.push(\"matrix(\" + k.join(\",\") + \")\");\n        m ? a.push(\"rotate(90) scale(-1,1)\") : w && a.push(\"rotate(\" + w + \" \" + n(this.rotationOriginX, l.getAttribute(\"x\"), 0) + \" \" + n(this.rotationOriginY, l.getAttribute(\"y\") || 0) + \")\");\n        (G(d) || G(e)) && a.push(\"scale(\" + n(d, 1) + \" \" + n(e, 1) + \")\");\n        a.length && l.setAttribute(\"transform\", a.join(\" \"));\n      },\n      toFront: function () {\n        var a = this.element;\n        a.parentNode.appendChild(a);\n        return this;\n      },\n      align: function (a, b, d) {\n        var e,\n          m = {};\n        var D = this.renderer;\n        var w = D.alignedObjects;\n        var k, l;\n        if (a) {\n          if (this.alignOptions = a, this.alignByTranslate = b, !d || y(d)) this.alignTo = e = d || \"renderer\", B(w, this), w.push(this), d = null;\n        } else a = this.alignOptions, b = this.alignByTranslate, e = this.alignTo;\n        d = n(d, D[e], D);\n        e = a.align;\n        D = a.verticalAlign;\n        w = (d.x || 0) + (a.x || 0);\n        var N = (d.y || 0) + (a.y || 0);\n        \"right\" === e ? k = 1 : \"center\" === e && (k = 2);\n        k && (w += (d.width - (a.width || 0)) / k);\n        m[b ? \"translateX\" : \"x\"] = Math.round(w);\n        \"bottom\" === D ? l = 1 : \"middle\" === D && (l = 2);\n        l && (N += (d.height - (a.height || 0)) / l);\n        m[b ? \"translateY\" : \"y\"] = Math.round(N);\n        this[this.placed ? \"animate\" : \"attr\"](m);\n        this.placed = !0;\n        this.alignAttr = m;\n        return this;\n      },\n      getBBox: function (a, b) {\n        var d,\n          e = this.renderer,\n          m = this.element,\n          D = this.styles,\n          w = this.textStr,\n          k,\n          l = e.cache,\n          N = e.cacheKeys,\n          g = m.namespaceURI === this.SVG_NS;\n        b = n(b, this.rotation, 0);\n        var r = e.styledMode ? m && O.prototype.getStyle.call(m, \"font-size\") : D && D.fontSize;\n        if (G(w)) {\n          var c = w.toString();\n          -1 === c.indexOf(\"<\") && (c = c.replace(/[0-9]/g, \"0\"));\n          c += [\"\", b, r, this.textWidth, D && D.textOverflow].join();\n        }\n        c && !a && (d = l[c]);\n        if (!d) {\n          if (g || e.forExport) {\n            try {\n              (k = this.fakeTS && function (a) {\n                [].forEach.call(m.querySelectorAll(\".highcharts-text-outline\"), function (b) {\n                  b.style.display = a;\n                });\n              }) && k(\"none\"), d = m.getBBox ? t({}, m.getBBox()) : {\n                width: m.offsetWidth,\n                height: m.offsetHeight\n              }, k && k(\"\");\n            } catch (aa) {\n              \"\";\n            }\n            if (!d || 0 > d.width) d = {\n              width: 0,\n              height: 0\n            };\n          } else d = this.htmlGetBBox();\n          e.isSVG && (a = d.width, e = d.height, g && (d.height = e = {\n            \"11px,17\": 14,\n            \"13px,20\": 16\n          }[D && D.fontSize + \",\" + Math.round(e)] || e), b && (D = b * E, d.width = Math.abs(e * Math.sin(D)) + Math.abs(a * Math.cos(D)), d.height = Math.abs(e * Math.cos(D)) + Math.abs(a * Math.sin(D))));\n          if (c && 0 < d.height) {\n            for (; 250 < N.length;) delete l[N.shift()];\n            l[c] || N.push(c);\n            l[c] = d;\n          }\n        }\n        return d;\n      },\n      show: function (a) {\n        return this.attr({\n          visibility: a ? \"inherit\" : \"visible\"\n        });\n      },\n      hide: function (a) {\n        a ? this.attr({\n          y: -9999\n        }) : this.attr({\n          visibility: \"hidden\"\n        });\n        return this;\n      },\n      fadeOut: function (a) {\n        var b = this;\n        b.animate({\n          opacity: 0\n        }, {\n          duration: a || 150,\n          complete: function () {\n            b.attr({\n              y: -9999\n            });\n          }\n        });\n      },\n      add: function (a) {\n        var b = this.renderer,\n          d = this.element;\n        a && (this.parentGroup = a);\n        this.parentInverted = a && a.inverted;\n        void 0 !== this.textStr && b.buildText(this);\n        this.added = !0;\n        if (!a || a.handleZ || this.zIndex) var e = this.zIndexSetter();\n        e || (a ? a.element : b.box).appendChild(d);\n        if (this.onAdd) this.onAdd();\n        return this;\n      },\n      safeRemoveChild: function (a) {\n        var b = a.parentNode;\n        b && b.removeChild(a);\n      },\n      destroy: function () {\n        var a = this,\n          b = a.element || {},\n          d = a.renderer,\n          e = d.isSVG && \"SPAN\" === b.nodeName && a.parentGroup,\n          m = b.ownerSVGElement,\n          w = a.clipPath;\n        b.onclick = b.onmouseout = b.onmouseover = b.onmousemove = b.point = null;\n        K(a);\n        w && m && ([].forEach.call(m.querySelectorAll(\"[clip-path],[CLIP-PATH]\"), function (a) {\n          -1 < a.getAttribute(\"clip-path\").indexOf(w.element.id) && a.removeAttribute(\"clip-path\");\n        }), a.clipPath = w.destroy());\n        if (a.stops) {\n          for (m = 0; m < a.stops.length; m++) a.stops[m] = a.stops[m].destroy();\n          a.stops = null;\n        }\n        a.safeRemoveChild(b);\n        for (d.styledMode || a.destroyShadows(); e && e.div && 0 === e.div.childNodes.length;) b = e.parentGroup, a.safeRemoveChild(e.div), delete e.div, e = b;\n        a.alignTo && B(d.alignedObjects, a);\n        h(a, function (b, d) {\n          a[d] && a[d].parentGroup === a && a[d].destroy && a[d].destroy();\n          delete a[d];\n        });\n      },\n      shadow: function (a, b, d) {\n        var e = [],\n          m,\n          w = this.element;\n        if (!a) this.destroyShadows();else if (!this.shadows) {\n          var D = n(a.width, 3);\n          var k = (a.opacity || .15) / D;\n          var l = this.parentInverted ? \"(-1,-1)\" : \"(\" + n(a.offsetX, 1) + \", \" + n(a.offsetY, 1) + \")\";\n          for (m = 1; m <= D; m++) {\n            var g = w.cloneNode(0);\n            var r = 2 * D + 1 - 2 * m;\n            F(g, {\n              stroke: a.color || \"#000000\",\n              \"stroke-opacity\": k * m,\n              \"stroke-width\": r,\n              transform: \"translate\" + l,\n              fill: \"none\"\n            });\n            g.setAttribute(\"class\", (g.getAttribute(\"class\") || \"\") + \" highcharts-shadow\");\n            d && (F(g, \"height\", Math.max(F(g, \"height\") - r, 0)), g.cutHeight = r);\n            b ? b.element.appendChild(g) : w.parentNode && w.parentNode.insertBefore(g, w);\n            e.push(g);\n          }\n          this.shadows = e;\n        }\n        return this;\n      },\n      destroyShadows: function () {\n        (this.shadows || []).forEach(function (a) {\n          this.safeRemoveChild(a);\n        }, this);\n        this.shadows = void 0;\n      },\n      xGetter: function (a) {\n        \"circle\" === this.element.nodeName && (\"x\" === a ? a = \"cx\" : \"y\" === a && (a = \"cy\"));\n        return this._defaultGetter(a);\n      },\n      _defaultGetter: function (a) {\n        a = n(this[a + \"Value\"], this[a], this.element ? this.element.getAttribute(a) : null, 0);\n        /^[\\-0-9\\.]+$/.test(a) && (a = parseFloat(a));\n        return a;\n      },\n      dSetter: function (a, b, d) {\n        a && a.join && (a = a.join(\" \"));\n        /(NaN| {2}|^$)/.test(a) && (a = \"M 0 0\");\n        this[b] !== a && (d.setAttribute(b, a), this[b] = a);\n      },\n      dashstyleSetter: function (a) {\n        var b,\n          d = this[\"stroke-width\"];\n        \"inherit\" === d && (d = 1);\n        if (a = a && a.toLowerCase()) {\n          a = a.replace(\"shortdashdotdot\", \"3,1,1,1,1,1,\").replace(\"shortdashdot\", \"3,1,1,1\").replace(\"shortdot\", \"1,1,\").replace(\"shortdash\", \"3,1,\").replace(\"longdash\", \"8,3,\").replace(/dot/g, \"1,3,\").replace(\"dash\", \"4,3,\").replace(/,$/, \"\").split(\",\");\n          for (b = a.length; b--;) a[b] = q(a[b]) * d;\n          a = a.join(\",\").replace(/NaN/g, \"none\");\n          this.element.setAttribute(\"stroke-dasharray\", a);\n        }\n      },\n      alignSetter: function (a) {\n        var b = {\n          left: \"start\",\n          center: \"middle\",\n          right: \"end\"\n        };\n        b[a] && (this.alignValue = a, this.element.setAttribute(\"text-anchor\", b[a]));\n      },\n      opacitySetter: function (a, b, d) {\n        this[b] = a;\n        d.setAttribute(b, a);\n      },\n      titleSetter: function (a) {\n        var b = this.element.getElementsByTagName(\"title\")[0];\n        b || (b = p.createElementNS(this.SVG_NS, \"title\"), this.element.appendChild(b));\n        b.firstChild && b.removeChild(b.firstChild);\n        b.appendChild(p.createTextNode(String(n(a, \"\")).replace(/<[^>]*>/g, \"\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\")));\n      },\n      textSetter: function (a) {\n        a !== this.textStr && (delete this.bBox, delete this.textPxLength, this.textStr = a, this.added && this.renderer.buildText(this));\n      },\n      setTextPath: function (a, b) {\n        var d = this.element,\n          e = {\n            textAnchor: \"text-anchor\"\n          },\n          m = !1,\n          D = this.textPathWrapper,\n          k = !D;\n        b = A(!0, {\n          enabled: !0,\n          attributes: {\n            dy: -5,\n            startOffset: \"50%\",\n            textAnchor: \"middle\"\n          }\n        }, b);\n        var l = b.attributes;\n        if (a && b && b.enabled) {\n          this.options && this.options.padding && (l.dx = -this.options.padding);\n          D || (this.textPathWrapper = D = this.renderer.createElement(\"textPath\"), m = !0);\n          var g = D.element;\n          (b = a.element.getAttribute(\"id\")) || a.element.setAttribute(\"id\", b = c.uniqueKey());\n          if (k) for (a = d.getElementsByTagName(\"tspan\"); a.length;) a[0].setAttribute(\"y\", 0), g.appendChild(a[0]);\n          m && D.add({\n            element: this.text ? this.text.element : d\n          });\n          g.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", this.renderer.url + \"#\" + b);\n          G(l.dy) && (g.parentNode.setAttribute(\"dy\", l.dy), delete l.dy);\n          G(l.dx) && (g.parentNode.setAttribute(\"dx\", l.dx), delete l.dx);\n          h(l, function (a, b) {\n            g.setAttribute(e[b] || b, a);\n          });\n          d.removeAttribute(\"transform\");\n          this.removeTextOutline.call(D, [].slice.call(d.getElementsByTagName(\"tspan\")));\n          this.text && !this.renderer.styledMode && this.attr({\n            fill: \"none\",\n            \"stroke-width\": 0\n          });\n          this.applyTextOutline = this.updateTransform = w;\n        } else D && (delete this.updateTransform, delete this.applyTextOutline, this.destroyTextPath(d, a));\n        return this;\n      },\n      destroyTextPath: function (a, b) {\n        var d;\n        b.element.setAttribute(\"id\", \"\");\n        for (d = this.textPathWrapper.element.childNodes; d.length;) a.firstChild.appendChild(d[0]);\n        a.firstChild.removeChild(this.textPathWrapper.element);\n        delete b.textPathWrapper;\n      },\n      fillSetter: function (a, b, d) {\n        \"string\" === typeof a ? d.setAttribute(b, a) : a && this.complexColor(a, b, d);\n      },\n      visibilitySetter: function (a, b, d) {\n        \"inherit\" === a ? d.removeAttribute(b) : this[b] !== a && d.setAttribute(b, a);\n        this[b] = a;\n      },\n      zIndexSetter: function (a, b) {\n        var d = this.renderer,\n          e = this.parentGroup,\n          m = (e || d).element || d.box,\n          w = this.element,\n          k = !1;\n        d = m === d.box;\n        var D = this.added;\n        var l;\n        G(a) ? (w.setAttribute(\"data-z-index\", a), a = +a, this[b] === a && (D = !1)) : G(this[b]) && w.removeAttribute(\"data-z-index\");\n        this[b] = a;\n        if (D) {\n          (a = this.zIndex) && e && (e.handleZ = !0);\n          b = m.childNodes;\n          for (l = b.length - 1; 0 <= l && !k; l--) {\n            e = b[l];\n            D = e.getAttribute(\"data-z-index\");\n            var g = !G(D);\n            if (e !== w) if (0 > a && g && !d && !l) m.insertBefore(w, b[l]), k = !0;else if (q(D) <= a || g && (!G(a) || 0 <= a)) m.insertBefore(w, b[l + 1] || null), k = !0;\n          }\n          k || (m.insertBefore(w, b[d ? 3 : 0] || null), k = !0);\n        }\n        return k;\n      },\n      _defaultSetter: function (a, b, d) {\n        d.setAttribute(b, a);\n      }\n    });\n    O.prototype.yGetter = O.prototype.xGetter;\n    O.prototype.translateXSetter = O.prototype.translateYSetter = O.prototype.rotationSetter = O.prototype.verticalAlignSetter = O.prototype.rotationOriginXSetter = O.prototype.rotationOriginYSetter = O.prototype.scaleXSetter = O.prototype.scaleYSetter = O.prototype.matrixSetter = function (a, b) {\n      this[b] = a;\n      this.doTransform = !0;\n    };\n    O.prototype[\"stroke-widthSetter\"] = O.prototype.strokeSetter = function (a, b, d) {\n      this[b] = a;\n      this.stroke && this[\"stroke-width\"] ? (O.prototype.fillSetter.call(this, this.stroke, \"stroke\", d), d.setAttribute(\"stroke-width\", this[\"stroke-width\"]), this.hasStroke = !0) : \"stroke-width\" === b && 0 === a && this.hasStroke ? (d.removeAttribute(\"stroke\"), this.hasStroke = !1) : this.renderer.styledMode && this[\"stroke-width\"] && (d.setAttribute(\"stroke-width\", this[\"stroke-width\"]), this.hasStroke = !0);\n    };\n    f = c.SVGRenderer = function () {\n      this.init.apply(this, arguments);\n    };\n    t(f.prototype, {\n      Element: O,\n      SVG_NS: U,\n      init: function (a, d, e, m, w, g, r) {\n        var D = this.createElement(\"svg\").attr({\n          version: \"1.1\",\n          \"class\": \"highcharts-root\"\n        });\n        r || D.css(this.getStyle(m));\n        m = D.element;\n        a.appendChild(m);\n        F(a, \"dir\", \"ltr\");\n        -1 === a.innerHTML.indexOf(\"xmlns\") && F(m, \"xmlns\", this.SVG_NS);\n        this.isSVG = !0;\n        this.box = m;\n        this.boxWrapper = D;\n        this.alignedObjects = [];\n        this.url = (k || x) && p.getElementsByTagName(\"base\").length ? Q.location.href.split(\"#\")[0].replace(/<[^>]*>/g, \"\").replace(/([\\('\\)])/g, \"\\\\$1\").replace(/ /g, \"%20\") : \"\";\n        this.createElement(\"desc\").add().element.appendChild(p.createTextNode(\"Created with Highcharts 7.2.2\"));\n        this.defs = this.createElement(\"defs\").add();\n        this.allowHTML = g;\n        this.forExport = w;\n        this.styledMode = r;\n        this.gradients = {};\n        this.cache = {};\n        this.cacheKeys = [];\n        this.imgCount = 0;\n        this.setSize(d, e, !1);\n        var c;\n        k && a.getBoundingClientRect && (d = function () {\n          l(a, {\n            left: 0,\n            top: 0\n          });\n          c = a.getBoundingClientRect();\n          l(a, {\n            left: Math.ceil(c.left) - c.left + \"px\",\n            top: Math.ceil(c.top) - c.top + \"px\"\n          });\n        }, d(), this.unSubPixelFix = b(Q, \"resize\", d));\n      },\n      definition: function (a) {\n        function b(a, e) {\n          var m;\n          g(a).forEach(function (a) {\n            var w = d.createElement(a.tagName),\n              k = {};\n            h(a, function (a, b) {\n              \"tagName\" !== b && \"children\" !== b && \"textContent\" !== b && (k[b] = a);\n            });\n            w.attr(k);\n            w.add(e || d.defs);\n            a.textContent && w.element.appendChild(p.createTextNode(a.textContent));\n            b(a.children || [], w);\n            m = w;\n          });\n          return m;\n        }\n        var d = this;\n        return b(a);\n      },\n      getStyle: function (a) {\n        return this.style = t({\n          fontFamily: '\"Lucida Grande\", \"Lucida Sans Unicode\", Arial, Helvetica, sans-serif',\n          fontSize: \"12px\"\n        }, a);\n      },\n      setStyle: function (a) {\n        this.boxWrapper.css(this.getStyle(a));\n      },\n      isHidden: function () {\n        return !this.boxWrapper.getBBox().width;\n      },\n      destroy: function () {\n        var a = this.defs;\n        this.box = null;\n        this.boxWrapper = this.boxWrapper.destroy();\n        z(this.gradients || {});\n        this.gradients = null;\n        a && (this.defs = a.destroy());\n        this.unSubPixelFix && this.unSubPixelFix();\n        return this.alignedObjects = null;\n      },\n      createElement: function (a) {\n        var b = new this.Element();\n        b.init(this, a);\n        return b;\n      },\n      draw: w,\n      getRadialAttr: function (a, b) {\n        return {\n          cx: a[0] - a[2] / 2 + b.cx * a[2],\n          cy: a[1] - a[2] / 2 + b.cy * a[2],\n          r: b.r * a[2]\n        };\n      },\n      truncate: function (a, b, d, e, m, w, k) {\n        var l = this,\n          D = a.rotation,\n          g,\n          r = e ? 1 : 0,\n          c = (d || e).length,\n          x = c,\n          J = [],\n          K = function (a) {\n            b.firstChild && b.removeChild(b.firstChild);\n            a && b.appendChild(p.createTextNode(a));\n          },\n          N = function (w, D) {\n            D = D || w;\n            if (void 0 === J[D]) if (b.getSubStringLength) try {\n              J[D] = m + b.getSubStringLength(0, e ? D + 1 : D);\n            } catch (ba) {\n              \"\";\n            } else l.getSpanWidth && (K(k(d || e, w)), J[D] = m + l.getSpanWidth(a, b));\n            return J[D];\n          },\n          A;\n        a.rotation = 0;\n        var h = N(b.textContent.length);\n        if (A = m + h > w) {\n          for (; r <= c;) x = Math.ceil((r + c) / 2), e && (g = k(e, x)), h = N(x, g && g.length - 1), r === c ? r = c + 1 : h > w ? c = x - 1 : r = x;\n          0 === c ? K(\"\") : d && c === d.length - 1 || K(g || k(d || e, x));\n        }\n        e && e.splice(0, x);\n        a.actualWidth = h;\n        a.rotation = D;\n        return A;\n      },\n      escapes: {\n        \"&\": \"&amp;\",\n        \"<\": \"&lt;\",\n        \">\": \"&gt;\",\n        \"'\": \"&#39;\",\n        '\"': \"&quot;\"\n      },\n      buildText: function (a) {\n        var b = a.element,\n          d = this,\n          e = d.forExport,\n          m = n(a.textStr, \"\").toString(),\n          w = -1 !== m.indexOf(\"<\"),\n          k = b.childNodes,\n          D,\n          g = F(b, \"x\"),\n          r = a.styles,\n          c = a.textWidth,\n          x = r && r.lineHeight,\n          K = r && r.textOutline,\n          A = r && \"ellipsis\" === r.textOverflow,\n          u = r && \"nowrap\" === r.whiteSpace,\n          L = r && r.fontSize,\n          E,\n          f = k.length;\n        r = c && !a.added && this.box;\n        var S = function (a) {\n            var m;\n            d.styledMode || (m = /(px|em)$/.test(a && a.style.fontSize) ? a.style.fontSize : L || d.style.fontSize || 12);\n            return x ? q(x) : d.fontMetrics(m, a.getAttribute(\"style\") ? a : b).h;\n          },\n          v = function (a, b) {\n            h(d.escapes, function (d, m) {\n              b && -1 !== b.indexOf(d) || (a = a.toString().replace(new RegExp(d, \"g\"), m));\n            });\n            return a;\n          },\n          O = function (a, b) {\n            var d = a.indexOf(\"<\");\n            a = a.substring(d, a.indexOf(\">\") - d);\n            d = a.indexOf(b + \"=\");\n            if (-1 !== d && (d = d + b.length + 1, b = a.charAt(d), '\"' === b || \"'\" === b)) return a = a.substring(d + 1), a.substring(0, a.indexOf(b));\n          },\n          Q = /<br.*?>/g;\n        var t = [m, A, u, x, K, L, c].join();\n        if (t !== a.textCache) {\n          for (a.textCache = t; f--;) b.removeChild(k[f]);\n          w || K || A || c || -1 !== m.indexOf(\" \") && (!u || Q.test(m)) ? (r && r.appendChild(b), w ? (m = d.styledMode ? m.replace(/<(b|strong)>/g, '<span class=\"highcharts-strong\">').replace(/<(i|em)>/g, '<span class=\"highcharts-emphasized\">') : m.replace(/<(b|strong)>/g, '<span style=\"font-weight:bold\">').replace(/<(i|em)>/g, '<span style=\"font-style:italic\">'), m = m.replace(/<a/g, \"<span\").replace(/<\\/(b|strong|i|em|a)>/g, \"</span>\").split(Q)) : m = [m], m = m.filter(function (a) {\n            return \"\" !== a;\n          }), m.forEach(function (m, w) {\n            var k = 0,\n              r = 0;\n            m = m.replace(/^\\s+|\\s+$/g, \"\").replace(/<span/g, \"|||<span\").replace(/<\\/span>/g, \"</span>|||\");\n            var x = m.split(\"|||\");\n            x.forEach(function (m) {\n              if (\"\" !== m || 1 === x.length) {\n                var K = {},\n                  N = p.createElementNS(d.SVG_NS, \"tspan\"),\n                  h,\n                  n;\n                (h = O(m, \"class\")) && F(N, \"class\", h);\n                if (h = O(m, \"style\")) h = h.replace(/(;| |^)color([ :])/, \"$1fill$2\"), F(N, \"style\", h);\n                if ((n = O(m, \"href\")) && !e && -1 === n.split(\":\")[0].toLowerCase().indexOf(\"javascript\")) {\n                  var T = p.createElementNS(d.SVG_NS, \"a\");\n                  F(T, \"href\", n);\n                  F(N, \"class\", \"highcharts-anchor\");\n                  T.appendChild(N);\n                  d.styledMode || l(N, {\n                    cursor: \"pointer\"\n                  });\n                }\n                m = v(m.replace(/<[a-zA-Z\\/](.|\\n)*?>/g, \"\") || \" \");\n                if (\" \" !== m) {\n                  N.appendChild(p.createTextNode(m));\n                  k ? K.dx = 0 : w && null !== g && (K.x = g);\n                  F(N, K);\n                  b.appendChild(T || N);\n                  !k && E && (!J && e && l(N, {\n                    display: \"block\"\n                  }), F(N, \"dy\", S(N)));\n                  if (c) {\n                    var f = m.replace(/([^\\^])-/g, \"$1- \").split(\" \");\n                    K = !u && (1 < x.length || w || 1 < f.length);\n                    T = 0;\n                    n = S(N);\n                    if (A) D = d.truncate(a, N, m, void 0, 0, Math.max(0, c - parseInt(L || 12, 10)), function (a, b) {\n                      return a.substring(0, b) + \"\\u2026\";\n                    });else if (K) for (; f.length;) f.length && !u && 0 < T && (N = p.createElementNS(U, \"tspan\"), F(N, {\n                      dy: n,\n                      x: g\n                    }), h && F(N, \"style\", h), N.appendChild(p.createTextNode(f.join(\" \").replace(/- /g, \"-\"))), b.appendChild(N)), d.truncate(a, N, null, f, 0 === T ? r : 0, c, function (a, b) {\n                      return f.slice(0, b).join(\" \").replace(/- /g, \"-\");\n                    }), r = a.actualWidth, T++;\n                  }\n                  k++;\n                }\n              }\n            });\n            E = E || b.childNodes.length;\n          }), A && D && a.attr(\"title\", v(a.textStr, [\"&lt;\", \"&gt;\"])), r && r.removeChild(b), K && a.applyTextOutline && a.applyTextOutline(K)) : b.appendChild(p.createTextNode(v(m)));\n        }\n      },\n      getContrast: function (a) {\n        a = e(a).rgba;\n        a[0] *= 1;\n        a[1] *= 1.2;\n        a[2] *= .5;\n        return 459 < a[0] + a[1] + a[2] ? \"#000000\" : \"#FFFFFF\";\n      },\n      button: function (a, d, m, e, w, k, l, g, c, x) {\n        var D = this.label(a, d, m, c, null, null, x, null, \"button\"),\n          p = 0,\n          K = this.styledMode;\n        D.attr(A({\n          padding: 8,\n          r: 2\n        }, w));\n        if (!K) {\n          w = A({\n            fill: \"#f7f7f7\",\n            stroke: \"#cccccc\",\n            \"stroke-width\": 1,\n            style: {\n              color: \"#333333\",\n              cursor: \"pointer\",\n              fontWeight: \"normal\"\n            }\n          }, w);\n          var J = w.style;\n          delete w.style;\n          k = A(w, {\n            fill: \"#e6e6e6\"\n          }, k);\n          var N = k.style;\n          delete k.style;\n          l = A(w, {\n            fill: \"#e6ebf5\",\n            style: {\n              color: \"#000000\",\n              fontWeight: \"bold\"\n            }\n          }, l);\n          var h = l.style;\n          delete l.style;\n          g = A(w, {\n            style: {\n              color: \"#cccccc\"\n            }\n          }, g);\n          var u = g.style;\n          delete g.style;\n        }\n        b(D.element, r ? \"mouseover\" : \"mouseenter\", function () {\n          3 !== p && D.setState(1);\n        });\n        b(D.element, r ? \"mouseout\" : \"mouseleave\", function () {\n          3 !== p && D.setState(p);\n        });\n        D.setState = function (a) {\n          1 !== a && (D.state = p = a);\n          D.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass(\"highcharts-button-\" + [\"normal\", \"hover\", \"pressed\", \"disabled\"][a || 0]);\n          K || D.attr([w, k, l, g][a || 0]).css([J, N, h, u][a || 0]);\n        };\n        K || D.attr(w).css(t({\n          cursor: \"default\"\n        }, J));\n        return D.on(\"click\", function (a) {\n          3 !== p && e.call(D, a);\n        });\n      },\n      crispLine: function (a, b) {\n        a[1] === a[4] && (a[1] = a[4] = Math.round(a[1]) - b % 2 / 2);\n        a[2] === a[5] && (a[2] = a[5] = Math.round(a[2]) + b % 2 / 2);\n        return a;\n      },\n      path: function (a) {\n        var b = this.styledMode ? {} : {\n          fill: \"none\"\n        };\n        v(a) ? b.d = a : H(a) && t(b, a);\n        return this.createElement(\"path\").attr(b);\n      },\n      circle: function (a, b, d) {\n        a = H(a) ? a : void 0 === a ? {} : {\n          x: a,\n          y: b,\n          r: d\n        };\n        b = this.createElement(\"circle\");\n        b.xSetter = b.ySetter = function (a, b, d) {\n          d.setAttribute(\"c\" + b, a);\n        };\n        return b.attr(a);\n      },\n      arc: function (a, b, d, m, e, w) {\n        H(a) ? (m = a, b = m.y, d = m.r, a = m.x) : m = {\n          innerR: m,\n          start: e,\n          end: w\n        };\n        a = this.symbol(\"arc\", a, b, d, d, m);\n        a.r = d;\n        return a;\n      },\n      rect: function (a, b, d, m, e, w) {\n        e = H(a) ? a.r : e;\n        var k = this.createElement(\"rect\");\n        a = H(a) ? a : void 0 === a ? {} : {\n          x: a,\n          y: b,\n          width: Math.max(d, 0),\n          height: Math.max(m, 0)\n        };\n        this.styledMode || (void 0 !== w && (a.strokeWidth = w, a = k.crisp(a)), a.fill = \"none\");\n        e && (a.r = e);\n        k.rSetter = function (a, b, d) {\n          k.r = a;\n          F(d, {\n            rx: a,\n            ry: a\n          });\n        };\n        k.rGetter = function () {\n          return k.r;\n        };\n        return k.attr(a);\n      },\n      setSize: function (a, b, d) {\n        var m = this.alignedObjects,\n          e = m.length;\n        this.width = a;\n        this.height = b;\n        for (this.boxWrapper.animate({\n          width: a,\n          height: b\n        }, {\n          step: function () {\n            this.attr({\n              viewBox: \"0 0 \" + this.attr(\"width\") + \" \" + this.attr(\"height\")\n            });\n          },\n          duration: n(d, !0) ? void 0 : 0\n        }); e--;) m[e].align();\n      },\n      g: function (a) {\n        var b = this.createElement(\"g\");\n        return a ? b.attr({\n          \"class\": \"highcharts-\" + a\n        }) : b;\n      },\n      image: function (a, d, m, e, w, k) {\n        var l = {\n            preserveAspectRatio: \"none\"\n          },\n          g = function (a, b) {\n            a.setAttributeNS ? a.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", b) : a.setAttribute(\"hc-svg-href\", b);\n          },\n          r = function (b) {\n            g(c.element, a);\n            k.call(c, b);\n          };\n        1 < arguments.length && t(l, {\n          x: d,\n          y: m,\n          width: e,\n          height: w\n        });\n        var c = this.createElement(\"image\").attr(l);\n        k ? (g(c.element, \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\"), l = new Q.Image(), b(l, \"load\", r), l.src = a, l.complete && r({})) : g(c.element, a);\n        return c;\n      },\n      symbol: function (a, b, m, e, w, k) {\n        var g = this,\n          r = /^url\\((.*?)\\)$/,\n          c = r.test(a),\n          D = !c && (this.symbols[a] ? a : \"circle\"),\n          x = D && this.symbols[D],\n          K = G(b) && x && x.call(this.symbols, Math.round(b), Math.round(m), e, w, k);\n        if (x) {\n          var J = this.path(K);\n          g.styledMode || J.attr(\"fill\", \"none\");\n          t(J, {\n            symbolName: D,\n            x: b,\n            y: m,\n            width: e,\n            height: w\n          });\n          k && t(J, k);\n        } else if (c) {\n          var A = a.match(r)[1];\n          J = this.image(A);\n          J.imgwidth = n(S[A] && S[A].width, k && k.width);\n          J.imgheight = n(S[A] && S[A].height, k && k.height);\n          var h = function () {\n            J.attr({\n              width: J.width,\n              height: J.height\n            });\n          };\n          [\"width\", \"height\"].forEach(function (a) {\n            J[a + \"Setter\"] = function (a, b) {\n              var d = {},\n                m = this[\"img\" + b],\n                e = \"width\" === b ? \"translateX\" : \"translateY\";\n              this[b] = a;\n              G(m) && (k && \"within\" === k.backgroundSize && this.width && this.height && (m = Math.round(m * Math.min(this.width / this.imgwidth, this.height / this.imgheight))), this.element && this.element.setAttribute(b, m), this.alignByTranslate || (d[e] = ((this[b] || 0) - m) / 2, this.attr(d)));\n            };\n          });\n          G(b) && J.attr({\n            x: b,\n            y: m\n          });\n          J.isImg = !0;\n          G(J.imgwidth) && G(J.imgheight) ? h() : (J.attr({\n            width: 0,\n            height: 0\n          }), L(\"img\", {\n            onload: function () {\n              var a = d[g.chartIndex];\n              0 === this.width && (l(this, {\n                position: \"absolute\",\n                top: \"-999em\"\n              }), p.body.appendChild(this));\n              S[A] = {\n                width: this.width,\n                height: this.height\n              };\n              J.imgwidth = this.width;\n              J.imgheight = this.height;\n              J.element && h();\n              this.parentNode && this.parentNode.removeChild(this);\n              g.imgCount--;\n              if (!g.imgCount && a && a.onload) a.onload();\n            },\n            src: A\n          }), this.imgCount++);\n        }\n        return J;\n      },\n      symbols: {\n        circle: function (a, b, d, m) {\n          return this.arc(a + d / 2, b + m / 2, d / 2, m / 2, {\n            start: .5 * Math.PI,\n            end: 2.5 * Math.PI,\n            open: !1\n          });\n        },\n        square: function (a, b, d, m) {\n          return [\"M\", a, b, \"L\", a + d, b, a + d, b + m, a, b + m, \"Z\"];\n        },\n        triangle: function (a, b, d, m) {\n          return [\"M\", a + d / 2, b, \"L\", a + d, b + m, a, b + m, \"Z\"];\n        },\n        \"triangle-down\": function (a, b, d, m) {\n          return [\"M\", a, b, \"L\", a + d, b, a + d / 2, b + m, \"Z\"];\n        },\n        diamond: function (a, b, d, m) {\n          return [\"M\", a + d / 2, b, \"L\", a + d, b + m / 2, a + d / 2, b + m, a, b + m / 2, \"Z\"];\n        },\n        arc: function (a, b, d, m, e) {\n          var w = e.start,\n            k = e.r || d,\n            l = e.r || m || d,\n            g = e.end - .001;\n          d = e.innerR;\n          m = n(e.open, .001 > Math.abs(e.end - e.start - 2 * Math.PI));\n          var r = Math.cos(w),\n            c = Math.sin(w),\n            x = Math.cos(g);\n          g = Math.sin(g);\n          w = .001 > e.end - w - Math.PI ? 0 : 1;\n          e = [\"M\", a + k * r, b + l * c, \"A\", k, l, 0, w, n(e.clockwise, 1), a + k * x, b + l * g];\n          G(d) && e.push(m ? \"M\" : \"L\", a + d * x, b + d * g, \"A\", d, d, 0, w, 0, a + d * r, b + d * c);\n          e.push(m ? \"\" : \"Z\");\n          return e;\n        },\n        callout: function (a, b, d, m, e) {\n          var w = Math.min(e && e.r || 0, d, m),\n            k = w + 6,\n            l = e && e.anchorX;\n          e = e && e.anchorY;\n          var g = [\"M\", a + w, b, \"L\", a + d - w, b, \"C\", a + d, b, a + d, b, a + d, b + w, \"L\", a + d, b + m - w, \"C\", a + d, b + m, a + d, b + m, a + d - w, b + m, \"L\", a + w, b + m, \"C\", a, b + m, a, b + m, a, b + m - w, \"L\", a, b + w, \"C\", a, b, a, b, a + w, b];\n          l && l > d ? e > b + k && e < b + m - k ? g.splice(13, 3, \"L\", a + d, e - 6, a + d + 6, e, a + d, e + 6, a + d, b + m - w) : g.splice(13, 3, \"L\", a + d, m / 2, l, e, a + d, m / 2, a + d, b + m - w) : l && 0 > l ? e > b + k && e < b + m - k ? g.splice(33, 3, \"L\", a, e + 6, a - 6, e, a, e - 6, a, b + w) : g.splice(33, 3, \"L\", a, m / 2, l, e, a, m / 2, a, b + w) : e && e > m && l > a + k && l < a + d - k ? g.splice(23, 3, \"L\", l + 6, b + m, l, b + m + 6, l - 6, b + m, a + w, b + m) : e && 0 > e && l > a + k && l < a + d - k && g.splice(3, 3, \"L\", l - 6, b, l, b - 6, l + 6, b, d - w, b);\n          return g;\n        }\n      },\n      clipRect: function (a, b, d, m) {\n        var e = c.uniqueKey() + \"-\",\n          w = this.createElement(\"clipPath\").attr({\n            id: e\n          }).add(this.defs);\n        a = this.rect(a, b, d, m, 0).add(w);\n        a.id = e;\n        a.clipPath = w;\n        a.count = 0;\n        return a;\n      },\n      text: function (a, b, d, m) {\n        var e = {};\n        if (m && (this.allowHTML || !this.forExport)) return this.html(a, b, d);\n        e.x = Math.round(b || 0);\n        d && (e.y = Math.round(d));\n        G(a) && (e.text = a);\n        a = this.createElement(\"text\").attr(e);\n        m || (a.xSetter = function (a, b, d) {\n          var m = d.getElementsByTagName(\"tspan\"),\n            e = d.getAttribute(b),\n            w;\n          for (w = 0; w < m.length; w++) {\n            var k = m[w];\n            k.getAttribute(b) === e && k.setAttribute(b, a);\n          }\n          d.setAttribute(b, a);\n        });\n        return a;\n      },\n      fontMetrics: function (a, b) {\n        a = !this.styledMode && /px/.test(a) || !Q.getComputedStyle ? a || b && b.style && b.style.fontSize || this.style && this.style.fontSize : b && O.prototype.getStyle.call(b, \"font-size\");\n        a = /px/.test(a) ? q(a) : 12;\n        b = 24 > a ? a + 3 : Math.round(1.2 * a);\n        return {\n          h: b,\n          b: Math.round(.8 * b),\n          f: a\n        };\n      },\n      rotCorr: function (a, b, d) {\n        var m = a;\n        b && d && (m = Math.max(m * Math.cos(b * E), 4));\n        return {\n          x: -a / 3 * Math.sin(b * E),\n          y: m\n        };\n      },\n      label: function (a, b, d, e, w, k, l, g, r) {\n        var c = this,\n          x = c.styledMode,\n          J = c.g(\"button\" !== r && \"label\"),\n          p = J.text = c.text(\"\", 0, 0, l).attr({\n            zIndex: 1\n          }),\n          K,\n          h,\n          D = 0,\n          u = 3,\n          L = 0,\n          n,\n          N,\n          E,\n          U,\n          f,\n          q = {},\n          T,\n          S,\n          v = /^url\\((.*?)\\)$/.test(e),\n          Q = x || v,\n          y = function () {\n            return x ? K.strokeWidth() % 2 / 2 : (T ? parseInt(T, 10) : 0) % 2 / 2;\n          };\n        r && J.addClass(\"highcharts-\" + r);\n        var R = function () {\n          var a = p.element.style,\n            b = {};\n          h = (void 0 === n || void 0 === N || f) && G(p.textStr) && p.getBBox();\n          J.width = (n || h.width || 0) + 2 * u + L;\n          J.height = (N || h.height || 0) + 2 * u;\n          S = u + Math.min(c.fontMetrics(a && a.fontSize, p).b, h ? h.height : Infinity);\n          Q && (K || (J.box = K = c.symbols[e] || v ? c.symbol(e) : c.rect(), K.addClass((\"button\" === r ? \"\" : \"highcharts-label-box\") + (r ? \" highcharts-\" + r + \"-box\" : \"\")), K.add(J), a = y(), b.x = a, b.y = (g ? -S : 0) + a), b.width = Math.round(J.width), b.height = Math.round(J.height), K.attr(t(b, q)), q = {});\n        };\n        var B = function () {\n          var a = L + u;\n          var b = g ? 0 : S;\n          G(n) && h && (\"center\" === f || \"right\" === f) && (a += {\n            center: .5,\n            right: 1\n          }[f] * (n - h.width));\n          if (a !== p.x || b !== p.y) p.attr(\"x\", a), p.hasBoxWidthChanged && (h = p.getBBox(!0), R()), void 0 !== b && p.attr(\"y\", b);\n          p.x = a;\n          p.y = b;\n        };\n        var V = function (a, b) {\n          K ? K.attr(a, b) : q[a] = b;\n        };\n        J.onAdd = function () {\n          p.add(J);\n          J.attr({\n            text: a || 0 === a ? a : \"\",\n            x: b,\n            y: d\n          });\n          K && G(w) && J.attr({\n            anchorX: w,\n            anchorY: k\n          });\n        };\n        J.widthSetter = function (a) {\n          n = C(a) ? a : null;\n        };\n        J.heightSetter = function (a) {\n          N = a;\n        };\n        J[\"text-alignSetter\"] = function (a) {\n          f = a;\n        };\n        J.paddingSetter = function (a) {\n          G(a) && a !== u && (u = J.padding = a, B());\n        };\n        J.paddingLeftSetter = function (a) {\n          G(a) && a !== L && (L = a, B());\n        };\n        J.alignSetter = function (a) {\n          a = {\n            left: 0,\n            center: .5,\n            right: 1\n          }[a];\n          a !== D && (D = a, h && J.attr({\n            x: E\n          }));\n        };\n        J.textSetter = function (a) {\n          void 0 !== a && p.attr({\n            text: a\n          });\n          R();\n          B();\n        };\n        J[\"stroke-widthSetter\"] = function (a, b) {\n          a && (Q = !0);\n          T = this[\"stroke-width\"] = a;\n          V(b, a);\n        };\n        x ? J.rSetter = function (a, b) {\n          V(b, a);\n        } : J.strokeSetter = J.fillSetter = J.rSetter = function (a, b) {\n          \"r\" !== b && (\"fill\" === b && a && (Q = !0), J[b] = a);\n          V(b, a);\n        };\n        J.anchorXSetter = function (a, b) {\n          w = J.anchorX = a;\n          V(b, Math.round(a) - y() - E);\n        };\n        J.anchorYSetter = function (a, b) {\n          k = J.anchorY = a;\n          V(b, a - U);\n        };\n        J.xSetter = function (a) {\n          J.x = a;\n          D && (a -= D * ((n || h.width) + 2 * u), J[\"forceAnimate:x\"] = !0);\n          E = Math.round(a);\n          J.attr(\"translateX\", E);\n        };\n        J.ySetter = function (a) {\n          U = J.y = Math.round(a);\n          J.attr(\"translateY\", U);\n        };\n        var H = J.css;\n        l = {\n          css: function (a) {\n            if (a) {\n              var b = {};\n              a = A(a);\n              J.textProps.forEach(function (d) {\n                void 0 !== a[d] && (b[d] = a[d], delete a[d]);\n              });\n              p.css(b);\n              \"width\" in b && R();\n              \"fontSize\" in b && (R(), B());\n            }\n            return H.call(J, a);\n          },\n          getBBox: function () {\n            return {\n              width: h.width + 2 * u,\n              height: h.height + 2 * u,\n              x: h.x - u,\n              y: h.y - u\n            };\n          },\n          destroy: function () {\n            m(J.element, \"mouseenter\");\n            m(J.element, \"mouseleave\");\n            p && (p = p.destroy());\n            K && (K = K.destroy());\n            O.prototype.destroy.call(J);\n            J = c = R = B = V = null;\n          }\n        };\n        x || (l.shadow = function (a) {\n          a && (R(), K && K.shadow(a));\n          return J;\n        });\n        return t(J, l);\n      }\n    });\n    c.Renderer = f;\n  });\n  M(I, \"parts/Html.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.attr,\n      G = f.defined,\n      z = f.extend,\n      B = f.pick,\n      t = f.pInt,\n      v = c.createElement,\n      C = c.css,\n      H = c.isFirefox,\n      y = c.isMS,\n      h = c.isWebKit,\n      n = c.SVGElement;\n    f = c.SVGRenderer;\n    var q = c.win;\n    z(n.prototype, {\n      htmlCss: function (g) {\n        var b = \"SPAN\" === this.element.tagName && g && \"width\" in g,\n          a = B(b && g.width, void 0);\n        if (b) {\n          delete g.width;\n          this.textWidth = a;\n          var d = !0;\n        }\n        g && \"ellipsis\" === g.textOverflow && (g.whiteSpace = \"nowrap\", g.overflow = \"hidden\");\n        this.styles = z(this.styles, g);\n        C(this.element, g);\n        d && this.htmlUpdateTransform();\n        return this;\n      },\n      htmlGetBBox: function () {\n        var g = this.element;\n        return {\n          x: g.offsetLeft,\n          y: g.offsetTop,\n          width: g.offsetWidth,\n          height: g.offsetHeight\n        };\n      },\n      htmlUpdateTransform: function () {\n        if (this.added) {\n          var g = this.renderer,\n            b = this.element,\n            a = this.translateX || 0,\n            d = this.translateY || 0,\n            e = this.x || 0,\n            l = this.y || 0,\n            c = this.textAlign || \"left\",\n            h = {\n              left: 0,\n              center: .5,\n              right: 1\n            }[c],\n            p = this.styles,\n            u = p && p.whiteSpace;\n          C(b, {\n            marginLeft: a,\n            marginTop: d\n          });\n          !g.styledMode && this.shadows && this.shadows.forEach(function (b) {\n            C(b, {\n              marginLeft: a + 1,\n              marginTop: d + 1\n            });\n          });\n          this.inverted && [].forEach.call(b.childNodes, function (a) {\n            g.invertChild(a, b);\n          });\n          if (\"SPAN\" === b.tagName) {\n            p = this.rotation;\n            var k = this.textWidth && t(this.textWidth),\n              r = [p, c, b.innerHTML, this.textWidth, this.textAlign].join(),\n              x;\n            (x = k !== this.oldTextWidth) && !(x = k > this.oldTextWidth) && ((x = this.textPxLength) || (C(b, {\n              width: \"\",\n              whiteSpace: u || \"nowrap\"\n            }), x = b.offsetWidth), x = x > k);\n            x && (/[ \\-]/.test(b.textContent || b.innerText) || \"ellipsis\" === b.style.textOverflow) ? (C(b, {\n              width: k + \"px\",\n              display: \"block\",\n              whiteSpace: u || \"normal\"\n            }), this.oldTextWidth = k, this.hasBoxWidthChanged = !0) : this.hasBoxWidthChanged = !1;\n            r !== this.cTT && (u = g.fontMetrics(b.style.fontSize, b).b, !G(p) || p === (this.oldRotation || 0) && c === this.oldAlign || this.setSpanRotation(p, h, u), this.getSpanCorrection(!G(p) && this.textPxLength || b.offsetWidth, u, h, p, c));\n            C(b, {\n              left: e + (this.xCorr || 0) + \"px\",\n              top: l + (this.yCorr || 0) + \"px\"\n            });\n            this.cTT = r;\n            this.oldRotation = p;\n            this.oldAlign = c;\n          }\n        } else this.alignOnAdd = !0;\n      },\n      setSpanRotation: function (g, b, a) {\n        var d = {},\n          e = this.renderer.getTransformKey();\n        d[e] = d.transform = \"rotate(\" + g + \"deg)\";\n        d[e + (H ? \"Origin\" : \"-origin\")] = d.transformOrigin = 100 * b + \"% \" + a + \"px\";\n        C(this.element, d);\n      },\n      getSpanCorrection: function (g, b, a) {\n        this.xCorr = -g * a;\n        this.yCorr = -b;\n      }\n    });\n    z(f.prototype, {\n      getTransformKey: function () {\n        return y && !/Edge/.test(q.navigator.userAgent) ? \"-ms-transform\" : h ? \"-webkit-transform\" : H ? \"MozTransform\" : q.opera ? \"-o-transform\" : \"\";\n      },\n      html: function (g, b, a) {\n        var d = this.createElement(\"span\"),\n          e = d.element,\n          l = d.renderer,\n          c = l.isSVG,\n          h = function (a, b) {\n            [\"opacity\", \"visibility\"].forEach(function (d) {\n              a[d + \"Setter\"] = function (e, k, l) {\n                var w = a.div ? a.div.style : b;\n                n.prototype[d + \"Setter\"].call(this, e, k, l);\n                w && (w[k] = e);\n              };\n            });\n            a.addedSetters = !0;\n          };\n        d.textSetter = function (a) {\n          a !== e.innerHTML && (delete this.bBox, delete this.oldTextWidth);\n          this.textStr = a;\n          e.innerHTML = B(a, \"\");\n          d.doTransform = !0;\n        };\n        c && h(d, d.element.style);\n        d.xSetter = d.ySetter = d.alignSetter = d.rotationSetter = function (a, b) {\n          \"align\" === b && (b = \"textAlign\");\n          d[b] = a;\n          d.doTransform = !0;\n        };\n        d.afterSetters = function () {\n          this.doTransform && (this.htmlUpdateTransform(), this.doTransform = !1);\n        };\n        d.attr({\n          text: g,\n          x: Math.round(b),\n          y: Math.round(a)\n        }).css({\n          position: \"absolute\"\n        });\n        l.styledMode || d.css({\n          fontFamily: this.style.fontFamily,\n          fontSize: this.style.fontSize\n        });\n        e.style.whiteSpace = \"nowrap\";\n        d.css = d.htmlCss;\n        c && (d.add = function (a) {\n          var b = l.box.parentNode,\n            k = [];\n          if (this.parentGroup = a) {\n            var g = a.div;\n            if (!g) {\n              for (; a;) k.push(a), a = a.parentGroup;\n              k.reverse().forEach(function (a) {\n                function e(b, d) {\n                  a[d] = b;\n                  \"translateX\" === d ? m.left = b + \"px\" : m.top = b + \"px\";\n                  a.doTransform = !0;\n                }\n                var w = F(a.element, \"class\");\n                g = a.div = a.div || v(\"div\", w ? {\n                  className: w\n                } : void 0, {\n                  position: \"absolute\",\n                  left: (a.translateX || 0) + \"px\",\n                  top: (a.translateY || 0) + \"px\",\n                  display: a.display,\n                  opacity: a.opacity,\n                  pointerEvents: a.styles && a.styles.pointerEvents\n                }, g || b);\n                var m = g.style;\n                z(a, {\n                  classSetter: function (a) {\n                    return function (b) {\n                      this.element.setAttribute(\"class\", b);\n                      a.className = b;\n                    };\n                  }(g),\n                  on: function () {\n                    k[0].div && d.on.apply({\n                      element: k[0].div\n                    }, arguments);\n                    return a;\n                  },\n                  translateXSetter: e,\n                  translateYSetter: e\n                });\n                a.addedSetters || h(a);\n              });\n            }\n          } else g = b;\n          g.appendChild(e);\n          d.added = !0;\n          d.alignOnAdd && d.htmlUpdateTransform();\n          return d;\n        });\n        return d;\n      }\n    });\n  });\n  M(I, \"parts/Time.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.extend,\n      z = f.isObject,\n      B = f.objectEach,\n      t = f.pick,\n      v = f.splat,\n      C = c.merge,\n      H = c.timeUnits,\n      y = c.win;\n    c.Time = function (c) {\n      this.update(c, !1);\n    };\n    c.Time.prototype = {\n      defaultOptions: {\n        Date: void 0,\n        getTimezoneOffset: void 0,\n        timezone: void 0,\n        timezoneOffset: 0,\n        useUTC: !0\n      },\n      update: function (c) {\n        var h = t(c && c.useUTC, !0),\n          f = this;\n        this.options = c = C(!0, this.options || {}, c);\n        this.Date = c.Date || y.Date || Date;\n        this.timezoneOffset = (this.useUTC = h) && c.timezoneOffset;\n        this.getTimezoneOffset = this.timezoneOffsetFunction();\n        (this.variableTimezone = !(h && !c.getTimezoneOffset && !c.timezone)) || this.timezoneOffset ? (this.get = function (g, b) {\n          var a = b.getTime(),\n            d = a - f.getTimezoneOffset(b);\n          b.setTime(d);\n          g = b[\"getUTC\" + g]();\n          b.setTime(a);\n          return g;\n        }, this.set = function (g, b, a) {\n          if (\"Milliseconds\" === g || \"Seconds\" === g || \"Minutes\" === g && 0 === b.getTimezoneOffset() % 60) b[\"set\" + g](a);else {\n            var d = f.getTimezoneOffset(b);\n            d = b.getTime() - d;\n            b.setTime(d);\n            b[\"setUTC\" + g](a);\n            g = f.getTimezoneOffset(b);\n            d = b.getTime() + g;\n            b.setTime(d);\n          }\n        }) : h ? (this.get = function (g, b) {\n          return b[\"getUTC\" + g]();\n        }, this.set = function (g, b, a) {\n          return b[\"setUTC\" + g](a);\n        }) : (this.get = function (g, b) {\n          return b[\"get\" + g]();\n        }, this.set = function (g, b, a) {\n          return b[\"set\" + g](a);\n        });\n      },\n      makeTime: function (h, n, f, g, b, a) {\n        if (this.useUTC) {\n          var d = this.Date.UTC.apply(0, arguments);\n          var e = this.getTimezoneOffset(d);\n          d += e;\n          var l = this.getTimezoneOffset(d);\n          e !== l ? d += l - e : e - 36E5 !== this.getTimezoneOffset(d - 36E5) || c.isSafari || (d -= 36E5);\n        } else d = new this.Date(h, n, t(f, 1), t(g, 0), t(b, 0), t(a, 0)).getTime();\n        return d;\n      },\n      timezoneOffsetFunction: function () {\n        var h = this,\n          n = this.options,\n          f = y.moment;\n        if (!this.useUTC) return function (g) {\n          return 6E4 * new Date(g).getTimezoneOffset();\n        };\n        if (n.timezone) {\n          if (f) return function (g) {\n            return 6E4 * -f.tz(g, n.timezone).utcOffset();\n          };\n          c.error(25);\n        }\n        return this.useUTC && n.getTimezoneOffset ? function (g) {\n          return 6E4 * n.getTimezoneOffset(g);\n        } : function () {\n          return 6E4 * (h.timezoneOffset || 0);\n        };\n      },\n      dateFormat: function (h, n, f) {\n        if (!F(n) || isNaN(n)) return c.defaultOptions.lang.invalidDate || \"\";\n        h = t(h, \"%Y-%m-%d %H:%M:%S\");\n        var g = this,\n          b = new this.Date(n),\n          a = this.get(\"Hours\", b),\n          d = this.get(\"Day\", b),\n          e = this.get(\"Date\", b),\n          l = this.get(\"Month\", b),\n          L = this.get(\"FullYear\", b),\n          E = c.defaultOptions.lang,\n          p = E.weekdays,\n          u = E.shortWeekdays,\n          k = c.pad;\n        b = G({\n          a: u ? u[d] : p[d].substr(0, 3),\n          A: p[d],\n          d: k(e),\n          e: k(e, 2, \" \"),\n          w: d,\n          b: E.shortMonths[l],\n          B: E.months[l],\n          m: k(l + 1),\n          o: l + 1,\n          y: L.toString().substr(2, 2),\n          Y: L,\n          H: k(a),\n          k: a,\n          I: k(a % 12 || 12),\n          l: a % 12 || 12,\n          M: k(g.get(\"Minutes\", b)),\n          p: 12 > a ? \"AM\" : \"PM\",\n          P: 12 > a ? \"am\" : \"pm\",\n          S: k(b.getSeconds()),\n          L: k(Math.floor(n % 1E3), 3)\n        }, c.dateFormats);\n        B(b, function (a, b) {\n          for (; -1 !== h.indexOf(\"%\" + b);) h = h.replace(\"%\" + b, \"function\" === typeof a ? a.call(g, n) : a);\n        });\n        return f ? h.substr(0, 1).toUpperCase() + h.substr(1) : h;\n      },\n      resolveDTLFormat: function (c) {\n        return z(c, !0) ? c : (c = v(c), {\n          main: c[0],\n          from: c[1],\n          to: c[2]\n        });\n      },\n      getTimeTicks: function (c, n, f, g) {\n        var b = this,\n          a = [],\n          d = {};\n        var e = new b.Date(n);\n        var l = c.unitRange,\n          h = c.count || 1,\n          E;\n        g = t(g, 1);\n        if (F(n)) {\n          b.set(\"Milliseconds\", e, l >= H.second ? 0 : h * Math.floor(b.get(\"Milliseconds\", e) / h));\n          l >= H.second && b.set(\"Seconds\", e, l >= H.minute ? 0 : h * Math.floor(b.get(\"Seconds\", e) / h));\n          l >= H.minute && b.set(\"Minutes\", e, l >= H.hour ? 0 : h * Math.floor(b.get(\"Minutes\", e) / h));\n          l >= H.hour && b.set(\"Hours\", e, l >= H.day ? 0 : h * Math.floor(b.get(\"Hours\", e) / h));\n          l >= H.day && b.set(\"Date\", e, l >= H.month ? 1 : Math.max(1, h * Math.floor(b.get(\"Date\", e) / h)));\n          if (l >= H.month) {\n            b.set(\"Month\", e, l >= H.year ? 0 : h * Math.floor(b.get(\"Month\", e) / h));\n            var p = b.get(\"FullYear\", e);\n          }\n          l >= H.year && b.set(\"FullYear\", e, p - p % h);\n          l === H.week && (p = b.get(\"Day\", e), b.set(\"Date\", e, b.get(\"Date\", e) - p + g + (p < g ? -7 : 0)));\n          p = b.get(\"FullYear\", e);\n          g = b.get(\"Month\", e);\n          var u = b.get(\"Date\", e),\n            k = b.get(\"Hours\", e);\n          n = e.getTime();\n          b.variableTimezone && (E = f - n > 4 * H.month || b.getTimezoneOffset(n) !== b.getTimezoneOffset(f));\n          n = e.getTime();\n          for (e = 1; n < f;) a.push(n), n = l === H.year ? b.makeTime(p + e * h, 0) : l === H.month ? b.makeTime(p, g + e * h) : !E || l !== H.day && l !== H.week ? E && l === H.hour && 1 < h ? b.makeTime(p, g, u, k + e * h) : n + l * h : b.makeTime(p, g, u + e * h * (l === H.day ? 1 : 7)), e++;\n          a.push(n);\n          l <= H.hour && 1E4 > a.length && a.forEach(function (a) {\n            0 === a % 18E5 && \"000000000\" === b.dateFormat(\"%H%M%S%L\", a) && (d[a] = \"day\");\n          });\n        }\n        a.info = G(c, {\n          higherRanks: d,\n          totalRange: l * h\n        });\n        return a;\n      }\n    };\n  });\n  M(I, \"parts/Options.js\", [I[\"parts/Globals.js\"]], function (c) {\n    var f = c.color,\n      F = c.merge;\n    c.defaultOptions = {\n      colors: \"#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1\".split(\" \"),\n      symbols: [\"circle\", \"diamond\", \"square\", \"triangle\", \"triangle-down\"],\n      lang: {\n        loading: \"Loading...\",\n        months: \"January February March April May June July August September October November December\".split(\" \"),\n        shortMonths: \"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\".split(\" \"),\n        weekdays: \"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),\n        decimalPoint: \".\",\n        numericSymbols: \"kMGTPE\".split(\"\"),\n        resetZoom: \"Reset zoom\",\n        resetZoomTitle: \"Reset zoom level 1:1\",\n        thousandsSep: \" \"\n      },\n      global: {},\n      time: c.Time.prototype.defaultOptions,\n      chart: {\n        styledMode: !1,\n        borderRadius: 0,\n        colorCount: 10,\n        defaultSeriesType: \"line\",\n        ignoreHiddenSeries: !0,\n        spacing: [10, 10, 15, 10],\n        resetZoomButton: {\n          theme: {\n            zIndex: 6\n          },\n          position: {\n            align: \"right\",\n            x: -10,\n            y: 10\n          }\n        },\n        width: null,\n        height: null,\n        borderColor: \"#335cad\",\n        backgroundColor: \"#ffffff\",\n        plotBorderColor: \"#cccccc\"\n      },\n      title: {\n        text: \"Chart title\",\n        align: \"center\",\n        margin: 15,\n        widthAdjust: -44\n      },\n      subtitle: {\n        text: \"\",\n        align: \"center\",\n        widthAdjust: -44\n      },\n      caption: {\n        margin: 15,\n        text: \"\",\n        align: \"left\",\n        verticalAlign: \"bottom\"\n      },\n      plotOptions: {},\n      labels: {\n        style: {\n          position: \"absolute\",\n          color: \"#333333\"\n        }\n      },\n      legend: {\n        enabled: !0,\n        align: \"center\",\n        alignColumns: !0,\n        layout: \"horizontal\",\n        labelFormatter: function () {\n          return this.name;\n        },\n        borderColor: \"#999999\",\n        borderRadius: 0,\n        navigation: {\n          activeColor: \"#003399\",\n          inactiveColor: \"#cccccc\"\n        },\n        itemStyle: {\n          color: \"#333333\",\n          cursor: \"pointer\",\n          fontSize: \"12px\",\n          fontWeight: \"bold\",\n          textOverflow: \"ellipsis\"\n        },\n        itemHoverStyle: {\n          color: \"#000000\"\n        },\n        itemHiddenStyle: {\n          color: \"#cccccc\"\n        },\n        shadow: !1,\n        itemCheckboxStyle: {\n          position: \"absolute\",\n          width: \"13px\",\n          height: \"13px\"\n        },\n        squareSymbol: !0,\n        symbolPadding: 5,\n        verticalAlign: \"bottom\",\n        x: 0,\n        y: 0,\n        title: {\n          style: {\n            fontWeight: \"bold\"\n          }\n        }\n      },\n      loading: {\n        labelStyle: {\n          fontWeight: \"bold\",\n          position: \"relative\",\n          top: \"45%\"\n        },\n        style: {\n          position: \"absolute\",\n          backgroundColor: \"#ffffff\",\n          opacity: .5,\n          textAlign: \"center\"\n        }\n      },\n      tooltip: {\n        enabled: !0,\n        animation: c.svg,\n        borderRadius: 3,\n        dateTimeLabelFormats: {\n          millisecond: \"%A, %b %e, %H:%M:%S.%L\",\n          second: \"%A, %b %e, %H:%M:%S\",\n          minute: \"%A, %b %e, %H:%M\",\n          hour: \"%A, %b %e, %H:%M\",\n          day: \"%A, %b %e, %Y\",\n          week: \"Week from %A, %b %e, %Y\",\n          month: \"%B %Y\",\n          year: \"%Y\"\n        },\n        footerFormat: \"\",\n        padding: 8,\n        snap: c.isTouchDevice ? 25 : 10,\n        headerFormat: '<span style=\"font-size: 10px\">{point.key}</span><br/>',\n        pointFormat: '<span style=\"color:{point.color}\">\\u25cf</span> {series.name}: <b>{point.y}</b><br/>',\n        backgroundColor: f(\"#f7f7f7\").setOpacity(.85).get(),\n        borderWidth: 1,\n        shadow: !0,\n        style: {\n          color: \"#333333\",\n          cursor: \"default\",\n          fontSize: \"12px\",\n          pointerEvents: \"none\",\n          whiteSpace: \"nowrap\"\n        }\n      },\n      credits: {\n        enabled: !0,\n        href: \"https://www.highcharts.com?credits\",\n        position: {\n          align: \"right\",\n          x: -10,\n          verticalAlign: \"bottom\",\n          y: -5\n        },\n        style: {\n          cursor: \"pointer\",\n          color: \"#999999\",\n          fontSize: \"9px\"\n        },\n        text: \"Highcharts.com\"\n      }\n    };\n    c.setOptions = function (f) {\n      c.defaultOptions = F(!0, c.defaultOptions, f);\n      (f.time || f.global) && c.time.update(F(c.defaultOptions.global, c.defaultOptions.time, f.global, f.time));\n      return c.defaultOptions;\n    };\n    c.getOptions = function () {\n      return c.defaultOptions;\n    };\n    c.defaultPlotOptions = c.defaultOptions.plotOptions;\n    c.time = new c.Time(F(c.defaultOptions.global, c.defaultOptions.time));\n    c.dateFormat = function (f, z, B) {\n      return c.time.dateFormat(f, z, B);\n    };\n    \"\";\n  });\n  M(I, \"parts/Tick.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.destroyObjectProperties,\n      z = f.extend,\n      B = f.isNumber,\n      t = f.pick,\n      v = c.correctFloat,\n      C = c.fireEvent,\n      H = c.merge,\n      y = c.deg2rad;\n    c.Tick = function (c, n, f, g, b) {\n      this.axis = c;\n      this.pos = n;\n      this.type = f || \"\";\n      this.isNewLabel = this.isNew = !0;\n      this.parameters = b || {};\n      this.tickmarkOffset = this.parameters.tickmarkOffset;\n      this.options = this.parameters.options;\n      f || g || this.addLabel();\n    };\n    c.Tick.prototype = {\n      addLabel: function () {\n        var c = this,\n          n = c.axis,\n          f = n.options,\n          g = n.chart,\n          b = n.categories,\n          a = n.names,\n          d = c.pos,\n          e = t(c.options && c.options.labels, f.labels),\n          l = n.tickPositions,\n          L = d === l[0],\n          E = d === l[l.length - 1];\n        b = this.parameters.category || (b ? t(b[d], a[d], d) : d);\n        var p = c.label;\n        l = l.info;\n        var u, k;\n        if (n.isDatetimeAxis && l) {\n          var r = g.time.resolveDTLFormat(f.dateTimeLabelFormats[!f.grid && l.higherRanks[d] || l.unitName]);\n          var x = r.main;\n        }\n        c.isFirst = L;\n        c.isLast = E;\n        c.formatCtx = {\n          axis: n,\n          chart: g,\n          isFirst: L,\n          isLast: E,\n          dateTimeLabelFormat: x,\n          tickPositionInfo: l,\n          value: n.isLog ? v(n.lin2log(b)) : b,\n          pos: d\n        };\n        f = n.labelFormatter.call(c.formatCtx, this.formatCtx);\n        if (k = r && r.list) c.shortenLabel = function () {\n          for (u = 0; u < k.length; u++) if (p.attr({\n            text: n.labelFormatter.call(z(c.formatCtx, {\n              dateTimeLabelFormat: k[u]\n            }))\n          }), p.getBBox().width < n.getSlotWidth(c) - 2 * t(e.padding, 5)) return;\n          p.attr({\n            text: \"\"\n          });\n        };\n        if (F(p)) p && p.textStr !== f && (!p.textWidth || e.style && e.style.width || p.styles.width || p.css({\n          width: null\n        }), p.attr({\n          text: f\n        }), p.textPxLength = p.getBBox().width);else {\n          if (c.label = p = F(f) && e.enabled ? g.renderer.text(f, 0, 0, e.useHTML).add(n.labelGroup) : null) g.styledMode || p.css(H(e.style)), p.textPxLength = p.getBBox().width;\n          c.rotation = 0;\n        }\n      },\n      getLabelSize: function () {\n        return this.label ? this.label.getBBox()[this.axis.horiz ? \"height\" : \"width\"] : 0;\n      },\n      handleOverflow: function (c) {\n        var h = this.axis,\n          f = h.options.labels,\n          g = c.x,\n          b = h.chart.chartWidth,\n          a = h.chart.spacing,\n          d = t(h.labelLeft, Math.min(h.pos, a[3]));\n        a = t(h.labelRight, Math.max(h.isRadial ? 0 : h.pos + h.len, b - a[1]));\n        var e = this.label,\n          l = this.rotation,\n          L = {\n            left: 0,\n            center: .5,\n            right: 1\n          }[h.labelAlign || e.attr(\"align\")],\n          E = e.getBBox().width,\n          p = h.getSlotWidth(this),\n          u = p,\n          k = 1,\n          r,\n          x = {};\n        if (l || \"justify\" !== t(f.overflow, \"justify\")) 0 > l && g - L * E < d ? r = Math.round(g / Math.cos(l * y) - d) : 0 < l && g + L * E > a && (r = Math.round((b - g) / Math.cos(l * y)));else if (b = g + (1 - L) * E, g - L * E < d ? u = c.x + u * (1 - L) - d : b > a && (u = a - c.x + u * L, k = -1), u = Math.min(p, u), u < p && \"center\" === h.labelAlign && (c.x += k * (p - u - L * (p - Math.min(E, u)))), E > u || h.autoRotation && (e.styles || {}).width) r = u;\n        r && (this.shortenLabel ? this.shortenLabel() : (x.width = Math.floor(r), (f.style || {}).textOverflow || (x.textOverflow = \"ellipsis\"), e.css(x)));\n      },\n      getPosition: function (h, n, f, g) {\n        var b = this.axis,\n          a = b.chart,\n          d = g && a.oldChartHeight || a.chartHeight;\n        h = {\n          x: h ? c.correctFloat(b.translate(n + f, null, null, g) + b.transB) : b.left + b.offset + (b.opposite ? (g && a.oldChartWidth || a.chartWidth) - b.right - b.left : 0),\n          y: h ? d - b.bottom + b.offset - (b.opposite ? b.height : 0) : c.correctFloat(d - b.translate(n + f, null, null, g) - b.transB)\n        };\n        h.y = Math.max(Math.min(h.y, 1E5), -1E5);\n        C(this, \"afterGetPosition\", {\n          pos: h\n        });\n        return h;\n      },\n      getLabelPosition: function (c, n, f, g, b, a, d, e) {\n        var l = this.axis,\n          h = l.transA,\n          E = l.isLinked && l.linkedParent ? l.linkedParent.reversed : l.reversed,\n          p = l.staggerLines,\n          u = l.tickRotCorr || {\n            x: 0,\n            y: 0\n          },\n          k = b.y,\n          r = g || l.reserveSpaceDefault ? 0 : -l.labelOffset * (\"center\" === l.labelAlign ? .5 : 1),\n          x = {};\n        F(k) || (k = 0 === l.side ? f.rotation ? -8 : -f.getBBox().height : 2 === l.side ? u.y + 8 : Math.cos(f.rotation * y) * (u.y - f.getBBox(!1, 0).height / 2));\n        c = c + b.x + r + u.x - (a && g ? a * h * (E ? -1 : 1) : 0);\n        n = n + k - (a && !g ? a * h * (E ? 1 : -1) : 0);\n        p && (f = d / (e || 1) % p, l.opposite && (f = p - f - 1), n += l.labelOffset / p * f);\n        x.x = c;\n        x.y = Math.round(n);\n        C(this, \"afterGetLabelPosition\", {\n          pos: x,\n          tickmarkOffset: a,\n          index: d\n        });\n        return x;\n      },\n      getMarkPath: function (c, n, f, g, b, a) {\n        return a.crispLine([\"M\", c, n, \"L\", c + (b ? 0 : -f), n + (b ? f : 0)], g);\n      },\n      renderGridLine: function (c, n, f) {\n        var g = this.axis,\n          b = g.options,\n          a = this.gridLine,\n          d = {},\n          e = this.pos,\n          l = this.type,\n          h = t(this.tickmarkOffset, g.tickmarkOffset),\n          E = g.chart.renderer,\n          p = l ? l + \"Grid\" : \"grid\",\n          u = b[p + \"LineWidth\"],\n          k = b[p + \"LineColor\"];\n        b = b[p + \"LineDashStyle\"];\n        a || (g.chart.styledMode || (d.stroke = k, d[\"stroke-width\"] = u, b && (d.dashstyle = b)), l || (d.zIndex = 1), c && (n = 0), this.gridLine = a = E.path().attr(d).addClass(\"highcharts-\" + (l ? l + \"-\" : \"\") + \"grid-line\").add(g.gridGroup));\n        if (a && (f = g.getPlotLinePath({\n          value: e + h,\n          lineWidth: a.strokeWidth() * f,\n          force: \"pass\",\n          old: c\n        }))) a[c || this.isNew ? \"attr\" : \"animate\"]({\n          d: f,\n          opacity: n\n        });\n      },\n      renderMark: function (c, n, f) {\n        var g = this.axis,\n          b = g.options,\n          a = g.chart.renderer,\n          d = this.type,\n          e = d ? d + \"Tick\" : \"tick\",\n          l = g.tickSize(e),\n          h = this.mark,\n          E = !h,\n          p = c.x;\n        c = c.y;\n        var u = t(b[e + \"Width\"], !d && g.isXAxis ? 1 : 0);\n        b = b[e + \"Color\"];\n        l && (g.opposite && (l[0] = -l[0]), E && (this.mark = h = a.path().addClass(\"highcharts-\" + (d ? d + \"-\" : \"\") + \"tick\").add(g.axisGroup), g.chart.styledMode || h.attr({\n          stroke: b,\n          \"stroke-width\": u\n        })), h[E ? \"attr\" : \"animate\"]({\n          d: this.getMarkPath(p, c, l[0], h.strokeWidth() * f, g.horiz, a),\n          opacity: n\n        }));\n      },\n      renderLabel: function (c, n, f, g) {\n        var b = this.axis,\n          a = b.horiz,\n          d = b.options,\n          e = this.label,\n          l = d.labels,\n          h = l.step;\n        b = t(this.tickmarkOffset, b.tickmarkOffset);\n        var E = !0,\n          p = c.x;\n        c = c.y;\n        e && B(p) && (e.xy = c = this.getLabelPosition(p, c, e, a, l, b, g, h), this.isFirst && !this.isLast && !t(d.showFirstLabel, 1) || this.isLast && !this.isFirst && !t(d.showLastLabel, 1) ? E = !1 : !a || l.step || l.rotation || n || 0 === f || this.handleOverflow(c), h && g % h && (E = !1), E && B(c.y) ? (c.opacity = f, e[this.isNewLabel ? \"attr\" : \"animate\"](c), this.isNewLabel = !1) : (e.attr(\"y\", -9999), this.isNewLabel = !0));\n      },\n      render: function (h, n, f) {\n        var g = this.axis,\n          b = g.horiz,\n          a = this.pos,\n          d = t(this.tickmarkOffset, g.tickmarkOffset);\n        a = this.getPosition(b, a, d, n);\n        d = a.x;\n        var e = a.y;\n        g = b && d === g.pos + g.len || !b && e === g.pos ? -1 : 1;\n        f = t(f, 1);\n        this.isActive = !0;\n        this.renderGridLine(n, f, g);\n        this.renderMark(a, f, g);\n        this.renderLabel(a, n, f, h);\n        this.isNew = !1;\n        c.fireEvent(this, \"afterRender\");\n      },\n      destroy: function () {\n        G(this, this.axis);\n      }\n    };\n  });\n  M(I, \"parts/Axis.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.arrayMax,\n      G = f.arrayMin,\n      z = f.defined,\n      B = f.destroyObjectProperties,\n      t = f.extend,\n      v = f.isArray,\n      C = f.isNumber,\n      H = f.isString,\n      y = f.objectEach,\n      h = f.pick,\n      n = f.splat,\n      q = f.syncTimeout,\n      g = c.addEvent,\n      b = c.animObject,\n      a = c.color,\n      d = c.correctFloat,\n      e = c.defaultOptions,\n      l = c.deg2rad,\n      L = c.fireEvent,\n      E = c.format,\n      p = c.getMagnitude,\n      u = c.merge,\n      k = c.normalizeTickInterval,\n      r = c.removeEvent,\n      x = c.seriesTypes,\n      A = c.Tick;\n    f = function () {\n      this.init.apply(this, arguments);\n    };\n    t(f.prototype, {\n      defaultOptions: {\n        dateTimeLabelFormats: {\n          millisecond: {\n            main: \"%H:%M:%S.%L\",\n            range: !1\n          },\n          second: {\n            main: \"%H:%M:%S\",\n            range: !1\n          },\n          minute: {\n            main: \"%H:%M\",\n            range: !1\n          },\n          hour: {\n            main: \"%H:%M\",\n            range: !1\n          },\n          day: {\n            main: \"%e. %b\"\n          },\n          week: {\n            main: \"%e. %b\"\n          },\n          month: {\n            main: \"%b '%y\"\n          },\n          year: {\n            main: \"%Y\"\n          }\n        },\n        endOnTick: !1,\n        labels: {\n          enabled: !0,\n          indentation: 10,\n          x: 0,\n          style: {\n            color: \"#666666\",\n            cursor: \"default\",\n            fontSize: \"11px\"\n          }\n        },\n        maxPadding: .01,\n        minorTickLength: 2,\n        minorTickPosition: \"outside\",\n        minPadding: .01,\n        showEmpty: !0,\n        startOfWeek: 1,\n        startOnTick: !1,\n        tickLength: 10,\n        tickPixelInterval: 100,\n        tickmarkPlacement: \"between\",\n        tickPosition: \"outside\",\n        title: {\n          align: \"middle\",\n          style: {\n            color: \"#666666\"\n          }\n        },\n        type: \"linear\",\n        minorGridLineColor: \"#f2f2f2\",\n        minorGridLineWidth: 1,\n        minorTickColor: \"#999999\",\n        lineColor: \"#ccd6eb\",\n        lineWidth: 1,\n        gridLineColor: \"#e6e6e6\",\n        tickColor: \"#ccd6eb\"\n      },\n      defaultYAxisOptions: {\n        endOnTick: !0,\n        maxPadding: .05,\n        minPadding: .05,\n        tickPixelInterval: 72,\n        showLastLabel: !0,\n        labels: {\n          x: -8\n        },\n        startOnTick: !0,\n        title: {\n          rotation: 270,\n          text: \"Values\"\n        },\n        stackLabels: {\n          allowOverlap: !1,\n          enabled: !1,\n          crop: !0,\n          overflow: \"justify\",\n          formatter: function () {\n            return c.numberFormat(this.total, -1);\n          },\n          style: {\n            color: \"#000000\",\n            fontSize: \"11px\",\n            fontWeight: \"bold\",\n            textOutline: \"1px contrast\"\n          }\n        },\n        gridLineWidth: 1,\n        lineWidth: 0\n      },\n      defaultLeftAxisOptions: {\n        labels: {\n          x: -15\n        },\n        title: {\n          rotation: 270\n        }\n      },\n      defaultRightAxisOptions: {\n        labels: {\n          x: 15\n        },\n        title: {\n          rotation: 90\n        }\n      },\n      defaultBottomAxisOptions: {\n        labels: {\n          autoRotation: [-45],\n          x: 0\n        },\n        margin: 15,\n        title: {\n          rotation: 0\n        }\n      },\n      defaultTopAxisOptions: {\n        labels: {\n          autoRotation: [-45],\n          x: 0\n        },\n        margin: 15,\n        title: {\n          rotation: 0\n        }\n      },\n      init: function (a, b) {\n        var d = b.isX,\n          m = this;\n        m.chart = a;\n        m.horiz = a.inverted && !m.isZAxis ? !d : d;\n        m.isXAxis = d;\n        m.coll = m.coll || (d ? \"xAxis\" : \"yAxis\");\n        L(this, \"init\", {\n          userOptions: b\n        });\n        m.opposite = b.opposite;\n        m.side = b.side || (m.horiz ? m.opposite ? 0 : 2 : m.opposite ? 1 : 3);\n        m.setOptions(b);\n        var e = this.options,\n          w = e.type;\n        m.labelFormatter = e.labels.formatter || m.defaultLabelFormatter;\n        m.userOptions = b;\n        m.minPixelPadding = 0;\n        m.reversed = e.reversed;\n        m.visible = !1 !== e.visible;\n        m.zoomEnabled = !1 !== e.zoomEnabled;\n        m.hasNames = \"category\" === w || !0 === e.categories;\n        m.categories = e.categories || m.hasNames;\n        m.names || (m.names = [], m.names.keys = {});\n        m.plotLinesAndBandsGroups = {};\n        m.isLog = \"logarithmic\" === w;\n        m.isDatetimeAxis = \"datetime\" === w;\n        m.positiveValuesOnly = m.isLog && !m.allowNegativeLog;\n        m.isLinked = z(e.linkedTo);\n        m.ticks = {};\n        m.labelEdge = [];\n        m.minorTicks = {};\n        m.plotLinesAndBands = [];\n        m.alternateBands = {};\n        m.len = 0;\n        m.minRange = m.userMinRange = e.minRange || e.maxZoom;\n        m.range = e.range;\n        m.offset = e.offset || 0;\n        m.stacks = {};\n        m.oldStacks = {};\n        m.stacksTouched = 0;\n        m.max = null;\n        m.min = null;\n        m.crosshair = h(e.crosshair, n(a.options.tooltip.crosshairs)[d ? 0 : 1], !1);\n        b = m.options.events;\n        -1 === a.axes.indexOf(m) && (d ? a.axes.splice(a.xAxis.length, 0, m) : a.axes.push(m), a[m.coll].push(m));\n        m.series = m.series || [];\n        a.inverted && !m.isZAxis && d && void 0 === m.reversed && (m.reversed = !0);\n        y(b, function (a, b) {\n          c.isFunction(a) && g(m, b, a);\n        });\n        m.lin2log = e.linearToLogConverter || m.lin2log;\n        m.isLog && (m.val2lin = m.log2lin, m.lin2val = m.lin2log);\n        L(this, \"afterInit\");\n      },\n      setOptions: function (a) {\n        this.options = u(this.defaultOptions, \"yAxis\" === this.coll && this.defaultYAxisOptions, [this.defaultTopAxisOptions, this.defaultRightAxisOptions, this.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side], u(e[this.coll], a));\n        L(this, \"afterSetOptions\", {\n          userOptions: a\n        });\n      },\n      defaultLabelFormatter: function () {\n        var a = this.axis,\n          b = this.value,\n          d = a.chart.time,\n          k = a.categories,\n          l = this.dateTimeLabelFormat,\n          g = e.lang,\n          r = g.numericSymbols;\n        g = g.numericSymbolMagnitude || 1E3;\n        var x = r && r.length,\n          p = a.options.labels.format;\n        a = a.isLog ? Math.abs(b) : a.tickInterval;\n        if (p) var h = E(p, this, d);else if (k) h = b;else if (l) h = d.dateFormat(l, b);else if (x && 1E3 <= a) for (; x-- && void 0 === h;) d = Math.pow(g, x + 1), a >= d && 0 === 10 * b % d && null !== r[x] && 0 !== b && (h = c.numberFormat(b / d, -1) + r[x]);\n        void 0 === h && (h = 1E4 <= Math.abs(b) ? c.numberFormat(b, -1) : c.numberFormat(b, -1, void 0, \"\"));\n        return h;\n      },\n      getSeriesExtremes: function () {\n        var a = this,\n          b = a.chart,\n          d;\n        L(this, \"getSeriesExtremes\", null, function () {\n          a.hasVisibleSeries = !1;\n          a.dataMin = a.dataMax = a.threshold = null;\n          a.softThreshold = !a.isXAxis;\n          a.buildStacks && a.buildStacks();\n          a.series.forEach(function (m) {\n            if (m.visible || !b.options.chart.ignoreHiddenSeries) {\n              var e = m.options,\n                w = e.threshold;\n              a.hasVisibleSeries = !0;\n              a.positiveValuesOnly && 0 >= w && (w = null);\n              if (a.isXAxis) {\n                if (e = m.xData, e.length) {\n                  d = m.getXExtremes(e);\n                  var k = d.min;\n                  var c = d.max;\n                  C(k) || k instanceof Date || (e = e.filter(C), d = m.getXExtremes(e), k = d.min, c = d.max);\n                  e.length && (a.dataMin = Math.min(h(a.dataMin, k), k), a.dataMax = Math.max(h(a.dataMax, c), c));\n                }\n              } else if (m.getExtremes(), c = m.dataMax, k = m.dataMin, z(k) && z(c) && (a.dataMin = Math.min(h(a.dataMin, k), k), a.dataMax = Math.max(h(a.dataMax, c), c)), z(w) && (a.threshold = w), !e.softThreshold || a.positiveValuesOnly) a.softThreshold = !1;\n            }\n          });\n        });\n        L(this, \"afterGetSeriesExtremes\");\n      },\n      translate: function (a, b, d, e, k, c) {\n        var m = this.linkedParent || this,\n          w = 1,\n          l = 0,\n          g = e ? m.oldTransA : m.transA;\n        e = e ? m.oldMin : m.min;\n        var r = m.minPixelPadding;\n        k = (m.isOrdinal || m.isBroken || m.isLog && k) && m.lin2val;\n        g || (g = m.transA);\n        d && (w *= -1, l = m.len);\n        m.reversed && (w *= -1, l -= w * (m.sector || m.len));\n        b ? (a = (a * w + l - r) / g + e, k && (a = m.lin2val(a))) : (k && (a = m.val2lin(a)), a = C(e) ? w * (a - e) * g + l + w * r + (C(c) ? g * c : 0) : void 0);\n        return a;\n      },\n      toPixels: function (a, b) {\n        return this.translate(a, !1, !this.horiz, null, !0) + (b ? 0 : this.pos);\n      },\n      toValue: function (a, b) {\n        return this.translate(a - (b ? 0 : this.pos), !0, !this.horiz, null, !0);\n      },\n      getPlotLinePath: function (a) {\n        var b = this,\n          d = b.chart,\n          e = b.left,\n          w = b.top,\n          k = a.old,\n          c = a.value,\n          l = a.translatedValue,\n          g = a.lineWidth,\n          r = a.force,\n          x,\n          p,\n          A,\n          u,\n          f = k && d.oldChartHeight || d.chartHeight,\n          n = k && d.oldChartWidth || d.chartWidth,\n          E,\n          q = b.transB,\n          v = function (a, b, d) {\n            if (\"pass\" !== r && a < b || a > d) r ? a = Math.min(Math.max(b, a), d) : E = !0;\n            return a;\n          };\n        a = {\n          value: c,\n          lineWidth: g,\n          old: k,\n          force: r,\n          acrossPanes: a.acrossPanes,\n          translatedValue: l\n        };\n        L(this, \"getPlotLinePath\", a, function (a) {\n          l = h(l, b.translate(c, null, null, k));\n          l = Math.min(Math.max(-1E5, l), 1E5);\n          x = A = Math.round(l + q);\n          p = u = Math.round(f - l - q);\n          C(l) ? b.horiz ? (p = w, u = f - b.bottom, x = A = v(x, e, e + b.width)) : (x = e, A = n - b.right, p = u = v(p, w, w + b.height)) : (E = !0, r = !1);\n          a.path = E && !r ? null : d.renderer.crispLine([\"M\", x, p, \"L\", A, u], g || 1);\n        });\n        return a.path;\n      },\n      getLinearTickPositions: function (a, b, e) {\n        var m = d(Math.floor(b / a) * a);\n        e = d(Math.ceil(e / a) * a);\n        var w = [],\n          k;\n        d(m + a) === m && (k = 20);\n        if (this.single) return [b];\n        for (b = m; b <= e;) {\n          w.push(b);\n          b = d(b + a, k);\n          if (b === c) break;\n          var c = b;\n        }\n        return w;\n      },\n      getMinorTickInterval: function () {\n        var a = this.options;\n        return !0 === a.minorTicks ? h(a.minorTickInterval, \"auto\") : !1 === a.minorTicks ? null : a.minorTickInterval;\n      },\n      getMinorTickPositions: function () {\n        var a = this,\n          b = a.options,\n          d = a.tickPositions,\n          e = a.minorTickInterval,\n          k = [],\n          c = a.pointRangePadding || 0,\n          l = a.min - c;\n        c = a.max + c;\n        var g = c - l;\n        if (g && g / e < a.len / 3) if (a.isLog) this.paddedTicks.forEach(function (b, d, m) {\n          d && k.push.apply(k, a.getLogTickPositions(e, m[d - 1], m[d], !0));\n        });else if (a.isDatetimeAxis && \"auto\" === this.getMinorTickInterval()) k = k.concat(a.getTimeTicks(a.normalizeTimeTickInterval(e), l, c, b.startOfWeek));else for (b = l + (d[0] - l) % e; b <= c && b !== k[0]; b += e) k.push(b);\n        0 !== k.length && a.trimTicks(k);\n        return k;\n      },\n      adjustForMinRange: function () {\n        var a = this.options,\n          b = this.min,\n          d = this.max,\n          e,\n          k,\n          c,\n          l,\n          g;\n        this.isXAxis && void 0 === this.minRange && !this.isLog && (z(a.min) || z(a.max) ? this.minRange = null : (this.series.forEach(function (a) {\n          l = a.xData;\n          for (k = g = a.xIncrement ? 1 : l.length - 1; 0 < k; k--) if (c = l[k] - l[k - 1], void 0 === e || c < e) e = c;\n        }), this.minRange = Math.min(5 * e, this.dataMax - this.dataMin)));\n        if (d - b < this.minRange) {\n          var r = this.dataMax - this.dataMin >= this.minRange;\n          var x = this.minRange;\n          var p = (x - d + b) / 2;\n          p = [b - p, h(a.min, b - p)];\n          r && (p[2] = this.isLog ? this.log2lin(this.dataMin) : this.dataMin);\n          b = F(p);\n          d = [b + x, h(a.max, b + x)];\n          r && (d[2] = this.isLog ? this.log2lin(this.dataMax) : this.dataMax);\n          d = G(d);\n          d - b < x && (p[0] = d - x, p[1] = h(a.min, d - x), b = F(p));\n        }\n        this.min = b;\n        this.max = d;\n      },\n      getClosest: function () {\n        var a;\n        this.categories ? a = 1 : this.series.forEach(function (b) {\n          var d = b.closestPointRange,\n            m = b.visible || !b.chart.options.chart.ignoreHiddenSeries;\n          !b.noSharedTooltip && z(d) && m && (a = z(a) ? Math.min(a, d) : d);\n        });\n        return a;\n      },\n      nameToX: function (a) {\n        var b = v(this.categories),\n          d = b ? this.categories : this.names,\n          e = a.options.x;\n        a.series.requireSorting = !1;\n        z(e) || (e = !1 === this.options.uniqueNames ? a.series.autoIncrement() : b ? d.indexOf(a.name) : h(d.keys[a.name], -1));\n        if (-1 === e) {\n          if (!b) var k = d.length;\n        } else k = e;\n        void 0 !== k && (this.names[k] = a.name, this.names.keys[a.name] = k);\n        return k;\n      },\n      updateNames: function () {\n        var a = this,\n          b = this.names;\n        0 < b.length && (Object.keys(b.keys).forEach(function (a) {\n          delete b.keys[a];\n        }), b.length = 0, this.minRange = this.userMinRange, (this.series || []).forEach(function (b) {\n          b.xIncrement = null;\n          if (!b.points || b.isDirtyData) a.max = Math.max(a.max, b.xData.length - 1), b.processData(), b.generatePoints();\n          b.data.forEach(function (d, e) {\n            if (d && d.options && void 0 !== d.name) {\n              var m = a.nameToX(d);\n              void 0 !== m && m !== d.x && (d.x = m, b.xData[e] = m);\n            }\n          });\n        }));\n      },\n      setAxisTranslation: function (a) {\n        var b = this,\n          d = b.max - b.min,\n          e = b.axisPointRange || 0,\n          k = 0,\n          w = 0,\n          c = b.linkedParent,\n          l = !!b.categories,\n          g = b.transA,\n          r = b.isXAxis;\n        if (r || l || e) {\n          var p = b.getClosest();\n          c ? (k = c.minPointOffset, w = c.pointRangePadding) : b.series.forEach(function (a) {\n            var d = l ? 1 : r ? h(a.options.pointRange, p, 0) : b.axisPointRange || 0,\n              m = a.options.pointPlacement;\n            e = Math.max(e, d);\n            if (!b.single || l) a = x.xrange && a instanceof x.xrange ? !r : r, k = Math.max(k, a && H(m) ? 0 : d / 2), w = Math.max(w, a && \"on\" === m ? 0 : d);\n          });\n          c = b.ordinalSlope && p ? b.ordinalSlope / p : 1;\n          b.minPointOffset = k *= c;\n          b.pointRangePadding = w *= c;\n          b.pointRange = Math.min(e, b.single && l ? 1 : d);\n          r && (b.closestPointRange = p);\n        }\n        a && (b.oldTransA = g);\n        b.translationSlope = b.transA = g = b.staticScale || b.len / (d + w || 1);\n        b.transB = b.horiz ? b.left : b.bottom;\n        b.minPixelPadding = g * k;\n        L(this, \"afterSetAxisTranslation\");\n      },\n      minFromRange: function () {\n        return this.max - this.range;\n      },\n      setTickInterval: function (a) {\n        var b = this,\n          e = b.chart,\n          w = b.options,\n          l = b.isLog,\n          g = b.isDatetimeAxis,\n          r = b.isXAxis,\n          x = b.isLinked,\n          A = w.maxPadding,\n          u = w.minPadding,\n          f = w.tickInterval,\n          n = w.tickPixelInterval,\n          E = b.categories,\n          q = C(b.threshold) ? b.threshold : null,\n          v = b.softThreshold;\n        g || E || x || this.getTickAmount();\n        var t = h(b.userMin, w.min);\n        var y = h(b.userMax, w.max);\n        if (x) {\n          b.linkedParent = e[b.coll][w.linkedTo];\n          var B = b.linkedParent.getExtremes();\n          b.min = h(B.min, B.dataMin);\n          b.max = h(B.max, B.dataMax);\n          w.type !== b.linkedParent.options.type && c.error(11, 1, e);\n        } else {\n          if (!v && z(q)) if (b.dataMin >= q) B = q, u = 0;else if (b.dataMax <= q) {\n            var H = q;\n            A = 0;\n          }\n          b.min = h(t, B, b.dataMin);\n          b.max = h(y, H, b.dataMax);\n        }\n        l && (b.positiveValuesOnly && !a && 0 >= Math.min(b.min, h(b.dataMin, b.min)) && c.error(10, 1, e), b.min = d(b.log2lin(b.min), 16), b.max = d(b.log2lin(b.max), 16));\n        b.range && z(b.max) && (b.userMin = b.min = t = Math.max(b.dataMin, b.minFromRange()), b.userMax = y = b.max, b.range = null);\n        L(b, \"foundExtremes\");\n        b.beforePadding && b.beforePadding();\n        b.adjustForMinRange();\n        !(E || b.axisPointRange || b.usePercentage || x) && z(b.min) && z(b.max) && (e = b.max - b.min) && (!z(t) && u && (b.min -= e * u), !z(y) && A && (b.max += e * A));\n        C(w.softMin) && !C(b.userMin) && w.softMin < b.min && (b.min = t = w.softMin);\n        C(w.softMax) && !C(b.userMax) && w.softMax > b.max && (b.max = y = w.softMax);\n        C(w.floor) && (b.min = Math.min(Math.max(b.min, w.floor), Number.MAX_VALUE));\n        C(w.ceiling) && (b.max = Math.max(Math.min(b.max, w.ceiling), h(b.userMax, -Number.MAX_VALUE)));\n        v && z(b.dataMin) && (q = q || 0, !z(t) && b.min < q && b.dataMin >= q ? b.min = b.options.minRange ? Math.min(q, b.max - b.minRange) : q : !z(y) && b.max > q && b.dataMax <= q && (b.max = b.options.minRange ? Math.max(q, b.min + b.minRange) : q));\n        b.tickInterval = b.min === b.max || void 0 === b.min || void 0 === b.max ? 1 : x && !f && n === b.linkedParent.options.tickPixelInterval ? f = b.linkedParent.tickInterval : h(f, this.tickAmount ? (b.max - b.min) / Math.max(this.tickAmount - 1, 1) : void 0, E ? 1 : (b.max - b.min) * n / Math.max(b.len, n));\n        r && !a && b.series.forEach(function (a) {\n          a.processData(b.min !== b.oldMin || b.max !== b.oldMax);\n        });\n        b.setAxisTranslation(!0);\n        b.beforeSetTickPositions && b.beforeSetTickPositions();\n        b.postProcessTickInterval && (b.tickInterval = b.postProcessTickInterval(b.tickInterval));\n        b.pointRange && !f && (b.tickInterval = Math.max(b.pointRange, b.tickInterval));\n        a = h(w.minTickInterval, b.isDatetimeAxis && b.closestPointRange);\n        !f && b.tickInterval < a && (b.tickInterval = a);\n        g || l || f || (b.tickInterval = k(b.tickInterval, null, p(b.tickInterval), h(w.allowDecimals, !(.5 < b.tickInterval && 5 > b.tickInterval && 1E3 < b.max && 9999 > b.max)), !!this.tickAmount));\n        this.tickAmount || (b.tickInterval = b.unsquish());\n        this.setTickPositions();\n      },\n      setTickPositions: function () {\n        var a = this.options,\n          b = a.tickPositions;\n        var d = this.getMinorTickInterval();\n        var e = a.tickPositioner,\n          k = a.startOnTick,\n          l = a.endOnTick;\n        this.tickmarkOffset = this.categories && \"between\" === a.tickmarkPlacement && 1 === this.tickInterval ? .5 : 0;\n        this.minorTickInterval = \"auto\" === d && this.tickInterval ? this.tickInterval / 5 : d;\n        this.single = this.min === this.max && z(this.min) && !this.tickAmount && (parseInt(this.min, 10) === this.min || !1 !== a.allowDecimals);\n        this.tickPositions = d = b && b.slice();\n        !d && (!this.ordinalPositions && (this.max - this.min) / this.tickInterval > Math.max(2 * this.len, 200) ? (d = [this.min, this.max], c.error(19, !1, this.chart)) : d = this.isDatetimeAxis ? this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval, a.units), this.min, this.max, a.startOfWeek, this.ordinalPositions, this.closestPointRange, !0) : this.isLog ? this.getLogTickPositions(this.tickInterval, this.min, this.max) : this.getLinearTickPositions(this.tickInterval, this.min, this.max), d.length > this.len && (d = [d[0], d.pop()], d[0] === d[1] && (d.length = 1)), this.tickPositions = d, e && (e = e.apply(this, [this.min, this.max]))) && (this.tickPositions = d = e);\n        this.paddedTicks = d.slice(0);\n        this.trimTicks(d, k, l);\n        this.isLinked || (this.single && 2 > d.length && !this.categories && (this.min -= .5, this.max += .5), b || e || this.adjustTickAmount());\n        L(this, \"afterSetTickPositions\");\n      },\n      trimTicks: function (a, b, d) {\n        var e = a[0],\n          m = a[a.length - 1],\n          k = this.minPointOffset || 0;\n        L(this, \"trimTicks\");\n        if (!this.isLinked) {\n          if (b && -Infinity !== e) this.min = e;else for (; this.min - k > a[0];) a.shift();\n          if (d) this.max = m;else for (; this.max + k < a[a.length - 1];) a.pop();\n          0 === a.length && z(e) && !this.options.tickPositions && a.push((m + e) / 2);\n        }\n      },\n      alignToOthers: function () {\n        var a = {},\n          b,\n          d = this.options;\n        !1 === this.chart.options.chart.alignTicks || !1 === d.alignTicks || !1 === d.startOnTick || !1 === d.endOnTick || this.isLog || this.chart[this.coll].forEach(function (d) {\n          var e = d.options;\n          e = [d.horiz ? e.left : e.top, e.width, e.height, e.pane].join();\n          d.series.length && (a[e] ? b = !0 : a[e] = 1);\n        });\n        return b;\n      },\n      getTickAmount: function () {\n        var a = this.options,\n          b = a.tickAmount,\n          d = a.tickPixelInterval;\n        !z(a.tickInterval) && this.len < d && !this.isRadial && !this.isLog && a.startOnTick && a.endOnTick && (b = 2);\n        !b && this.alignToOthers() && (b = Math.ceil(this.len / d) + 1);\n        4 > b && (this.finalTickAmt = b, b = 5);\n        this.tickAmount = b;\n      },\n      adjustTickAmount: function () {\n        var a = this.options,\n          b = this.tickInterval,\n          e = this.tickPositions,\n          k = this.tickAmount,\n          c = this.finalTickAmt,\n          l = e && e.length,\n          g = h(this.threshold, this.softThreshold ? 0 : null),\n          r;\n        if (this.hasData()) {\n          if (l < k) {\n            for (r = this.min; e.length < k;) e.length % 2 || r === g ? e.push(d(e[e.length - 1] + b)) : e.unshift(d(e[0] - b));\n            this.transA *= (l - 1) / (k - 1);\n            this.min = a.startOnTick ? e[0] : Math.min(this.min, e[0]);\n            this.max = a.endOnTick ? e[e.length - 1] : Math.max(this.max, e[e.length - 1]);\n          } else l > k && (this.tickInterval *= 2, this.setTickPositions());\n          if (z(c)) {\n            for (b = a = e.length; b--;) (3 === c && 1 === b % 2 || 2 >= c && 0 < b && b < a - 1) && e.splice(b, 1);\n            this.finalTickAmt = void 0;\n          }\n        }\n      },\n      setScale: function () {\n        var a = this.series.some(function (a) {\n            return a.isDirtyData || a.isDirty || a.xAxis && a.xAxis.isDirty;\n          }),\n          b;\n        this.oldMin = this.min;\n        this.oldMax = this.max;\n        this.oldAxisLength = this.len;\n        this.setAxisSize();\n        (b = this.len !== this.oldAxisLength) || a || this.isLinked || this.forceRedraw || this.userMin !== this.oldUserMin || this.userMax !== this.oldUserMax || this.alignToOthers() ? (this.resetStacks && this.resetStacks(), this.forceRedraw = !1, this.getSeriesExtremes(), this.setTickInterval(), this.oldUserMin = this.userMin, this.oldUserMax = this.userMax, this.isDirty || (this.isDirty = b || this.min !== this.oldMin || this.max !== this.oldMax)) : this.cleanStacks && this.cleanStacks();\n        L(this, \"afterSetScale\");\n      },\n      setExtremes: function (a, b, d, e, k) {\n        var m = this,\n          w = m.chart;\n        d = h(d, !0);\n        m.series.forEach(function (a) {\n          delete a.kdTree;\n        });\n        k = t(k, {\n          min: a,\n          max: b\n        });\n        L(m, \"setExtremes\", k, function () {\n          m.userMin = a;\n          m.userMax = b;\n          m.eventArgs = k;\n          d && w.redraw(e);\n        });\n      },\n      zoom: function (a, b) {\n        var d = this.dataMin,\n          e = this.dataMax,\n          m = this.options,\n          k = Math.min(d, h(m.min, d)),\n          w = Math.max(e, h(m.max, e));\n        a = {\n          newMin: a,\n          newMax: b\n        };\n        L(this, \"zoom\", a, function (a) {\n          var b = a.newMin,\n            m = a.newMax;\n          if (b !== this.min || m !== this.max) this.allowZoomOutside || (z(d) && (b < k && (b = k), b > w && (b = w)), z(e) && (m < k && (m = k), m > w && (m = w))), this.displayBtn = void 0 !== b || void 0 !== m, this.setExtremes(b, m, !1, void 0, {\n            trigger: \"zoom\"\n          });\n          a.zoomed = !0;\n        });\n        return a.zoomed;\n      },\n      setAxisSize: function () {\n        var a = this.chart,\n          b = this.options,\n          d = b.offsets || [0, 0, 0, 0],\n          e = this.horiz,\n          k = this.width = Math.round(c.relativeLength(h(b.width, a.plotWidth - d[3] + d[1]), a.plotWidth)),\n          l = this.height = Math.round(c.relativeLength(h(b.height, a.plotHeight - d[0] + d[2]), a.plotHeight)),\n          g = this.top = Math.round(c.relativeLength(h(b.top, a.plotTop + d[0]), a.plotHeight, a.plotTop));\n        b = this.left = Math.round(c.relativeLength(h(b.left, a.plotLeft + d[3]), a.plotWidth, a.plotLeft));\n        this.bottom = a.chartHeight - l - g;\n        this.right = a.chartWidth - k - b;\n        this.len = Math.max(e ? k : l, 0);\n        this.pos = e ? b : g;\n      },\n      getExtremes: function () {\n        var a = this.isLog;\n        return {\n          min: a ? d(this.lin2log(this.min)) : this.min,\n          max: a ? d(this.lin2log(this.max)) : this.max,\n          dataMin: this.dataMin,\n          dataMax: this.dataMax,\n          userMin: this.userMin,\n          userMax: this.userMax\n        };\n      },\n      getThreshold: function (a) {\n        var b = this.isLog,\n          d = b ? this.lin2log(this.min) : this.min;\n        b = b ? this.lin2log(this.max) : this.max;\n        null === a || -Infinity === a ? a = d : Infinity === a ? a = b : d > a ? a = d : b < a && (a = b);\n        return this.translate(a, 0, 1, 0, 1);\n      },\n      autoLabelAlign: function (a) {\n        var b = (h(a, 0) - 90 * this.side + 720) % 360;\n        a = {\n          align: \"center\"\n        };\n        L(this, \"autoLabelAlign\", a, function (a) {\n          15 < b && 165 > b ? a.align = \"right\" : 195 < b && 345 > b && (a.align = \"left\");\n        });\n        return a.align;\n      },\n      tickSize: function (a) {\n        var b = this.options,\n          d = b[a + \"Length\"],\n          e = h(b[a + \"Width\"], \"tick\" === a && this.isXAxis && !this.categories ? 1 : 0);\n        if (e && d) {\n          \"inside\" === b[a + \"Position\"] && (d = -d);\n          var k = [d, e];\n        }\n        a = {\n          tickSize: k\n        };\n        L(this, \"afterTickSize\", a);\n        return a.tickSize;\n      },\n      labelMetrics: function () {\n        var a = this.tickPositions && this.tickPositions[0] || 0;\n        return this.chart.renderer.fontMetrics(this.options.labels.style && this.options.labels.style.fontSize, this.ticks[a] && this.ticks[a].label);\n      },\n      unsquish: function () {\n        var a = this.options.labels,\n          b = this.horiz,\n          e = this.tickInterval,\n          k = e,\n          c = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / e),\n          g,\n          r = a.rotation,\n          x = this.labelMetrics(),\n          p,\n          A = Number.MAX_VALUE,\n          u,\n          f = this.max - this.min,\n          n = function (a) {\n            var b = a / (c || 1);\n            b = 1 < b ? Math.ceil(b) : 1;\n            b * e > f && Infinity !== a && Infinity !== c && f && (b = Math.ceil(f / e));\n            return d(b * e);\n          };\n        b ? (u = !a.staggerLines && !a.step && (z(r) ? [r] : c < h(a.autoRotationLimit, 80) && a.autoRotation)) && u.forEach(function (a) {\n          if (a === r || a && -90 <= a && 90 >= a) {\n            p = n(Math.abs(x.h / Math.sin(l * a)));\n            var b = p + Math.abs(a / 360);\n            b < A && (A = b, g = a, k = p);\n          }\n        }) : a.step || (k = n(x.h));\n        this.autoRotation = u;\n        this.labelRotation = h(g, r);\n        return k;\n      },\n      getSlotWidth: function (a) {\n        var b = this.chart,\n          d = this.horiz,\n          e = this.options.labels,\n          k = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1),\n          c = b.margin[3];\n        return a && a.slotWidth || d && 2 > (e.step || 0) && !e.rotation && (this.staggerLines || 1) * this.len / k || !d && (e.style && parseInt(e.style.width, 10) || c && c - b.spacing[3] || .33 * b.chartWidth);\n      },\n      renderUnsquish: function () {\n        var a = this.chart,\n          b = a.renderer,\n          d = this.tickPositions,\n          e = this.ticks,\n          k = this.options.labels,\n          c = k && k.style || {},\n          l = this.horiz,\n          g = this.getSlotWidth(),\n          r = Math.max(1, Math.round(g - 2 * (k.padding || 5))),\n          x = {},\n          p = this.labelMetrics(),\n          h = k.style && k.style.textOverflow,\n          A = 0;\n        H(k.rotation) || (x.rotation = k.rotation || 0);\n        d.forEach(function (a) {\n          (a = e[a]) && a.label && a.label.textPxLength > A && (A = a.label.textPxLength);\n        });\n        this.maxLabelLength = A;\n        if (this.autoRotation) A > r && A > p.h ? x.rotation = this.labelRotation : this.labelRotation = 0;else if (g) {\n          var u = r;\n          if (!h) {\n            var f = \"clip\";\n            for (r = d.length; !l && r--;) {\n              var n = d[r];\n              if (n = e[n].label) n.styles && \"ellipsis\" === n.styles.textOverflow ? n.css({\n                textOverflow: \"clip\"\n              }) : n.textPxLength > g && n.css({\n                width: g + \"px\"\n              }), n.getBBox().height > this.len / d.length - (p.h - p.f) && (n.specificTextOverflow = \"ellipsis\");\n            }\n          }\n        }\n        x.rotation && (u = A > .5 * a.chartHeight ? .33 * a.chartHeight : A, h || (f = \"ellipsis\"));\n        if (this.labelAlign = k.align || this.autoLabelAlign(this.labelRotation)) x.align = this.labelAlign;\n        d.forEach(function (a) {\n          var b = (a = e[a]) && a.label,\n            d = c.width,\n            k = {};\n          b && (b.attr(x), a.shortenLabel ? a.shortenLabel() : u && !d && \"nowrap\" !== c.whiteSpace && (u < b.textPxLength || \"SPAN\" === b.element.tagName) ? (k.width = u, h || (k.textOverflow = b.specificTextOverflow || f), b.css(k)) : b.styles && b.styles.width && !k.width && !d && b.css({\n            width: null\n          }), delete b.specificTextOverflow, a.rotation = x.rotation);\n        }, this);\n        this.tickRotCorr = b.rotCorr(p.b, this.labelRotation || 0, 0 !== this.side);\n      },\n      hasData: function () {\n        return this.series.some(function (a) {\n          return a.hasData();\n        }) || this.options.showEmpty && z(this.min) && z(this.max);\n      },\n      addTitle: function (a) {\n        var b = this.chart.renderer,\n          d = this.horiz,\n          e = this.opposite,\n          k = this.options.title,\n          c,\n          l = this.chart.styledMode;\n        this.axisTitle || ((c = k.textAlign) || (c = (d ? {\n          low: \"left\",\n          middle: \"center\",\n          high: \"right\"\n        } : {\n          low: e ? \"right\" : \"left\",\n          middle: \"center\",\n          high: e ? \"left\" : \"right\"\n        })[k.align]), this.axisTitle = b.text(k.text, 0, 0, k.useHTML).attr({\n          zIndex: 7,\n          rotation: k.rotation || 0,\n          align: c\n        }).addClass(\"highcharts-axis-title\"), l || this.axisTitle.css(u(k.style)), this.axisTitle.add(this.axisGroup), this.axisTitle.isNew = !0);\n        l || k.style.width || this.isRadial || this.axisTitle.css({\n          width: this.len\n        });\n        this.axisTitle[a ? \"show\" : \"hide\"](a);\n      },\n      generateTick: function (a) {\n        var b = this.ticks;\n        b[a] ? b[a].addLabel() : b[a] = new A(this, a);\n      },\n      getOffset: function () {\n        var a = this,\n          b = a.chart,\n          d = b.renderer,\n          e = a.options,\n          k = a.tickPositions,\n          c = a.ticks,\n          l = a.horiz,\n          g = a.side,\n          r = b.inverted && !a.isZAxis ? [1, 0, 3, 2][g] : g,\n          x,\n          p = 0,\n          A = 0,\n          u = e.title,\n          n = e.labels,\n          f = 0,\n          E = b.axisOffset;\n        b = b.clipOffset;\n        var q = [-1, 1, 1, -1][g],\n          v = e.className,\n          t = a.axisParent;\n        var C = a.hasData();\n        a.showAxis = x = C || h(e.showEmpty, !0);\n        a.staggerLines = a.horiz && n.staggerLines;\n        a.axisGroup || (a.gridGroup = d.g(\"grid\").attr({\n          zIndex: e.gridZIndex || 1\n        }).addClass(\"highcharts-\" + this.coll.toLowerCase() + \"-grid \" + (v || \"\")).add(t), a.axisGroup = d.g(\"axis\").attr({\n          zIndex: e.zIndex || 2\n        }).addClass(\"highcharts-\" + this.coll.toLowerCase() + \" \" + (v || \"\")).add(t), a.labelGroup = d.g(\"axis-labels\").attr({\n          zIndex: n.zIndex || 7\n        }).addClass(\"highcharts-\" + a.coll.toLowerCase() + \"-labels \" + (v || \"\")).add(t));\n        C || a.isLinked ? (k.forEach(function (b, d) {\n          a.generateTick(b, d);\n        }), a.renderUnsquish(), a.reserveSpaceDefault = 0 === g || 2 === g || {\n          1: \"left\",\n          3: \"right\"\n        }[g] === a.labelAlign, h(n.reserveSpace, \"center\" === a.labelAlign ? !0 : null, a.reserveSpaceDefault) && k.forEach(function (a) {\n          f = Math.max(c[a].getLabelSize(), f);\n        }), a.staggerLines && (f *= a.staggerLines), a.labelOffset = f * (a.opposite ? -1 : 1)) : y(c, function (a, b) {\n          a.destroy();\n          delete c[b];\n        });\n        if (u && u.text && !1 !== u.enabled && (a.addTitle(x), x && !1 !== u.reserveSpace)) {\n          a.titleOffset = p = a.axisTitle.getBBox()[l ? \"height\" : \"width\"];\n          var B = u.offset;\n          A = z(B) ? 0 : h(u.margin, l ? 5 : 10);\n        }\n        a.renderLine();\n        a.offset = q * h(e.offset, E[g] ? E[g] + (e.margin || 0) : 0);\n        a.tickRotCorr = a.tickRotCorr || {\n          x: 0,\n          y: 0\n        };\n        d = 0 === g ? -a.labelMetrics().h : 2 === g ? a.tickRotCorr.y : 0;\n        A = Math.abs(f) + A;\n        f && (A = A - d + q * (l ? h(n.y, a.tickRotCorr.y + 8 * q) : n.x));\n        a.axisTitleMargin = h(B, A);\n        a.getMaxLabelDimensions && (a.maxLabelDimensions = a.getMaxLabelDimensions(c, k));\n        l = this.tickSize(\"tick\");\n        E[g] = Math.max(E[g], a.axisTitleMargin + p + q * a.offset, A, k && k.length && l ? l[0] + q * a.offset : 0);\n        e = e.offset ? 0 : 2 * Math.floor(a.axisLine.strokeWidth() / 2);\n        b[r] = Math.max(b[r], e);\n        L(this, \"afterGetOffset\");\n      },\n      getLinePath: function (a) {\n        var b = this.chart,\n          d = this.opposite,\n          e = this.offset,\n          k = this.horiz,\n          c = this.left + (d ? this.width : 0) + e;\n        e = b.chartHeight - this.bottom - (d ? this.height : 0) + e;\n        d && (a *= -1);\n        return b.renderer.crispLine([\"M\", k ? this.left : c, k ? e : this.top, \"L\", k ? b.chartWidth - this.right : c, k ? e : b.chartHeight - this.bottom], a);\n      },\n      renderLine: function () {\n        this.axisLine || (this.axisLine = this.chart.renderer.path().addClass(\"highcharts-axis-line\").add(this.axisGroup), this.chart.styledMode || this.axisLine.attr({\n          stroke: this.options.lineColor,\n          \"stroke-width\": this.options.lineWidth,\n          zIndex: 7\n        }));\n      },\n      getTitlePosition: function () {\n        var a = this.horiz,\n          b = this.left,\n          d = this.top,\n          e = this.len,\n          k = this.options.title,\n          c = a ? b : d,\n          l = this.opposite,\n          g = this.offset,\n          r = k.x || 0,\n          x = k.y || 0,\n          p = this.axisTitle,\n          A = this.chart.renderer.fontMetrics(k.style && k.style.fontSize, p);\n        p = Math.max(p.getBBox(null, 0).height - A.h - 1, 0);\n        e = {\n          low: c + (a ? 0 : e),\n          middle: c + e / 2,\n          high: c + (a ? e : 0)\n        }[k.align];\n        b = (a ? d + this.height : b) + (a ? 1 : -1) * (l ? -1 : 1) * this.axisTitleMargin + [-p, p, A.f, -p][this.side];\n        a = {\n          x: a ? e + r : b + (l ? this.width : 0) + g + r,\n          y: a ? b + x - (l ? this.height : 0) + g : e + x\n        };\n        L(this, \"afterGetTitlePosition\", {\n          titlePosition: a\n        });\n        return a;\n      },\n      renderMinorTick: function (a) {\n        var b = this.chart.hasRendered && C(this.oldMin),\n          d = this.minorTicks;\n        d[a] || (d[a] = new A(this, a, \"minor\"));\n        b && d[a].isNew && d[a].render(null, !0);\n        d[a].render(null, !1, 1);\n      },\n      renderTick: function (a, b) {\n        var d = this.isLinked,\n          e = this.ticks,\n          k = this.chart.hasRendered && C(this.oldMin);\n        if (!d || a >= this.min && a <= this.max) e[a] || (e[a] = new A(this, a)), k && e[a].isNew && e[a].render(b, !0, -1), e[a].render(b);\n      },\n      render: function () {\n        var a = this,\n          d = a.chart,\n          e = a.options,\n          k = a.isLog,\n          l = a.isLinked,\n          g = a.tickPositions,\n          r = a.axisTitle,\n          x = a.ticks,\n          p = a.minorTicks,\n          h = a.alternateBands,\n          u = e.stackLabels,\n          f = e.alternateGridColor,\n          n = a.tickmarkOffset,\n          E = a.axisLine,\n          v = a.showAxis,\n          t = b(d.renderer.globalAnimation),\n          B,\n          H;\n        a.labelEdge.length = 0;\n        a.overlap = !1;\n        [x, p, h].forEach(function (a) {\n          y(a, function (a) {\n            a.isActive = !1;\n          });\n        });\n        if (a.hasData() || l) a.minorTickInterval && !a.categories && a.getMinorTickPositions().forEach(function (b) {\n          a.renderMinorTick(b);\n        }), g.length && (g.forEach(function (b, d) {\n          a.renderTick(b, d);\n        }), n && (0 === a.min || a.single) && (x[-1] || (x[-1] = new A(a, -1, null, !0)), x[-1].render(-1))), f && g.forEach(function (b, e) {\n          H = void 0 !== g[e + 1] ? g[e + 1] + n : a.max - n;\n          0 === e % 2 && b < a.max && H <= a.max + (d.polar ? -n : n) && (h[b] || (h[b] = new c.PlotLineOrBand(a)), B = b + n, h[b].options = {\n            from: k ? a.lin2log(B) : B,\n            to: k ? a.lin2log(H) : H,\n            color: f\n          }, h[b].render(), h[b].isActive = !0);\n        }), a._addedPlotLB || ((e.plotLines || []).concat(e.plotBands || []).forEach(function (b) {\n          a.addPlotBandOrLine(b);\n        }), a._addedPlotLB = !0);\n        [x, p, h].forEach(function (a) {\n          var b,\n            e = [],\n            k = t.duration;\n          y(a, function (a, b) {\n            a.isActive || (a.render(b, !1, 0), a.isActive = !1, e.push(b));\n          });\n          q(function () {\n            for (b = e.length; b--;) a[e[b]] && !a[e[b]].isActive && (a[e[b]].destroy(), delete a[e[b]]);\n          }, a !== h && d.hasRendered && k ? k : 0);\n        });\n        E && (E[E.isPlaced ? \"animate\" : \"attr\"]({\n          d: this.getLinePath(E.strokeWidth())\n        }), E.isPlaced = !0, E[v ? \"show\" : \"hide\"](v));\n        r && v && (e = a.getTitlePosition(), C(e.y) ? (r[r.isNew ? \"attr\" : \"animate\"](e), r.isNew = !1) : (r.attr(\"y\", -9999), r.isNew = !0));\n        u && u.enabled && a.renderStackTotals();\n        a.isDirty = !1;\n        L(this, \"afterRender\");\n      },\n      redraw: function () {\n        this.visible && (this.render(), this.plotLinesAndBands.forEach(function (a) {\n          a.render();\n        }));\n        this.series.forEach(function (a) {\n          a.isDirty = !0;\n        });\n      },\n      keepProps: \"extKey hcEvents names series userMax userMin\".split(\" \"),\n      destroy: function (a) {\n        var b = this,\n          d = b.stacks,\n          e = b.plotLinesAndBands,\n          k;\n        L(this, \"destroy\", {\n          keepEvents: a\n        });\n        a || r(b);\n        y(d, function (a, b) {\n          B(a);\n          d[b] = null;\n        });\n        [b.ticks, b.minorTicks, b.alternateBands].forEach(function (a) {\n          B(a);\n        });\n        if (e) for (a = e.length; a--;) e[a].destroy();\n        \"stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar\".split(\" \").forEach(function (a) {\n          b[a] && (b[a] = b[a].destroy());\n        });\n        for (k in b.plotLinesAndBandsGroups) b.plotLinesAndBandsGroups[k] = b.plotLinesAndBandsGroups[k].destroy();\n        y(b, function (a, d) {\n          -1 === b.keepProps.indexOf(d) && delete b[d];\n        });\n      },\n      drawCrosshair: function (b, d) {\n        var e,\n          k = this.crosshair,\n          c = h(k.snap, !0),\n          l,\n          g = this.cross;\n        L(this, \"drawCrosshair\", {\n          e: b,\n          point: d\n        });\n        b || (b = this.cross && this.cross.e);\n        if (this.crosshair && !1 !== (z(d) || !c)) {\n          c ? z(d) && (l = h(\"colorAxis\" !== this.coll ? d.crosshairPos : null, this.isXAxis ? d.plotX : this.len - d.plotY)) : l = b && (this.horiz ? b.chartX - this.pos : this.len - b.chartY + this.pos);\n          z(l) && (e = this.getPlotLinePath({\n            value: d && (this.isXAxis ? d.x : h(d.stackY, d.y)),\n            translatedValue: l\n          }) || null);\n          if (!z(e)) {\n            this.hideCrosshair();\n            return;\n          }\n          c = this.categories && !this.isRadial;\n          g || (this.cross = g = this.chart.renderer.path().addClass(\"highcharts-crosshair highcharts-crosshair-\" + (c ? \"category \" : \"thin \") + k.className).attr({\n            zIndex: h(k.zIndex, 2)\n          }).add(), this.chart.styledMode || (g.attr({\n            stroke: k.color || (c ? a(\"#ccd6eb\").setOpacity(.25).get() : \"#cccccc\"),\n            \"stroke-width\": h(k.width, 1)\n          }).css({\n            \"pointer-events\": \"none\"\n          }), k.dashStyle && g.attr({\n            dashstyle: k.dashStyle\n          })));\n          g.show().attr({\n            d: e\n          });\n          c && !k.width && g.attr({\n            \"stroke-width\": this.transA\n          });\n          this.cross.e = b;\n        } else this.hideCrosshair();\n        L(this, \"afterDrawCrosshair\", {\n          e: b,\n          point: d\n        });\n      },\n      hideCrosshair: function () {\n        this.cross && this.cross.hide();\n        L(this, \"afterHideCrosshair\");\n      }\n    });\n    return c.Axis = f;\n  });\n  M(I, \"parts/DateTimeAxis.js\", [I[\"parts/Globals.js\"]], function (c) {\n    var f = c.Axis,\n      F = c.getMagnitude,\n      G = c.normalizeTickInterval,\n      z = c.timeUnits;\n    f.prototype.getTimeTicks = function () {\n      return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);\n    };\n    f.prototype.normalizeTimeTickInterval = function (c, f) {\n      var v = f || [[\"millisecond\", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], [\"second\", [1, 2, 5, 10, 15, 30]], [\"minute\", [1, 2, 5, 10, 15, 30]], [\"hour\", [1, 2, 3, 4, 6, 8, 12]], [\"day\", [1, 2]], [\"week\", [1, 2]], [\"month\", [1, 2, 3, 4, 6]], [\"year\", null]];\n      f = v[v.length - 1];\n      var t = z[f[0]],\n        B = f[1],\n        y;\n      for (y = 0; y < v.length && !(f = v[y], t = z[f[0]], B = f[1], v[y + 1] && c <= (t * B[B.length - 1] + z[v[y + 1][0]]) / 2); y++);\n      t === z.year && c < 5 * t && (B = [1, 2, 5]);\n      c = G(c / t, B, \"year\" === f[0] ? Math.max(F(c / t), 1) : 1);\n      return {\n        unitRange: t,\n        count: c,\n        unitName: f[0]\n      };\n    };\n  });\n  M(I, \"parts/LogarithmicAxis.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.pick;\n    f = c.Axis;\n    var G = c.getMagnitude,\n      z = c.normalizeTickInterval;\n    f.prototype.getLogTickPositions = function (c, f, v, C) {\n      var t = this.options,\n        y = this.len,\n        h = [];\n      C || (this._minorAutoInterval = null);\n      if (.5 <= c) c = Math.round(c), h = this.getLinearTickPositions(c, f, v);else if (.08 <= c) {\n        y = Math.floor(f);\n        var n, q;\n        for (t = .3 < c ? [1, 2, 4] : .15 < c ? [1, 2, 4, 6, 8] : [1, 2, 3, 4, 5, 6, 7, 8, 9]; y < v + 1 && !q; y++) {\n          var g = t.length;\n          for (n = 0; n < g && !q; n++) {\n            var b = this.log2lin(this.lin2log(y) * t[n]);\n            b > f && (!C || a <= v) && void 0 !== a && h.push(a);\n            a > v && (q = !0);\n            var a = b;\n          }\n        }\n      } else f = this.lin2log(f), v = this.lin2log(v), c = C ? this.getMinorTickInterval() : t.tickInterval, c = F(\"auto\" === c ? null : c, this._minorAutoInterval, t.tickPixelInterval / (C ? 5 : 1) * (v - f) / ((C ? y / this.tickPositions.length : y) || 1)), c = z(c, null, G(c)), h = this.getLinearTickPositions(c, f, v).map(this.log2lin), C || (this._minorAutoInterval = c / 5);\n      C || (this.tickInterval = c);\n      return h;\n    };\n    f.prototype.log2lin = function (c) {\n      return Math.log(c) / Math.LN10;\n    };\n    f.prototype.lin2log = function (c) {\n      return Math.pow(10, c);\n    };\n  });\n  M(I, \"parts/PlotLineOrBand.js\", [I[\"parts/Globals.js\"], I[\"parts/Axis.js\"], I[\"parts/Utilities.js\"]], function (c, f, F) {\n    var G = F.arrayMax,\n      z = F.arrayMin,\n      B = F.defined,\n      t = F.destroyObjectProperties,\n      v = F.erase,\n      C = F.extend,\n      H = F.objectEach,\n      y = F.pick,\n      h = c.merge;\n    c.PlotLineOrBand = function (c, h) {\n      this.axis = c;\n      h && (this.options = h, this.id = h.id);\n    };\n    c.PlotLineOrBand.prototype = {\n      render: function () {\n        c.fireEvent(this, \"render\");\n        var f = this,\n          q = f.axis,\n          g = q.horiz,\n          b = f.options,\n          a = b.label,\n          d = f.label,\n          e = b.to,\n          l = b.from,\n          L = b.value,\n          E = B(l) && B(e),\n          p = B(L),\n          u = f.svgElem,\n          k = !u,\n          r = [],\n          x = b.color,\n          A = y(b.zIndex, 0),\n          w = b.events;\n        r = {\n          \"class\": \"highcharts-plot-\" + (E ? \"band \" : \"line \") + (b.className || \"\")\n        };\n        var m = {},\n          K = q.chart.renderer,\n          J = E ? \"bands\" : \"lines\";\n        q.isLog && (l = q.log2lin(l), e = q.log2lin(e), L = q.log2lin(L));\n        q.chart.styledMode || (p ? (r.stroke = x || \"#999999\", r[\"stroke-width\"] = y(b.width, 1), b.dashStyle && (r.dashstyle = b.dashStyle)) : E && (r.fill = x || \"#e6ebf5\", b.borderWidth && (r.stroke = b.borderColor, r[\"stroke-width\"] = b.borderWidth)));\n        m.zIndex = A;\n        J += \"-\" + A;\n        (x = q.plotLinesAndBandsGroups[J]) || (q.plotLinesAndBandsGroups[J] = x = K.g(\"plot-\" + J).attr(m).add());\n        k && (f.svgElem = u = K.path().attr(r).add(x));\n        if (p) r = q.getPlotLinePath({\n          value: L,\n          lineWidth: u.strokeWidth(),\n          acrossPanes: b.acrossPanes\n        });else if (E) r = q.getPlotBandPath(l, e, b);else return;\n        (k || !u.d) && r && r.length ? (u.attr({\n          d: r\n        }), w && H(w, function (a, b) {\n          u.on(b, function (a) {\n            w[b].apply(f, [a]);\n          });\n        })) : u && (r ? (u.show(!0), u.animate({\n          d: r\n        })) : u.d && (u.hide(), d && (f.label = d = d.destroy())));\n        a && (B(a.text) || B(a.formatter)) && r && r.length && 0 < q.width && 0 < q.height && !r.isFlat ? (a = h({\n          align: g && E && \"center\",\n          x: g ? !E && 4 : 10,\n          verticalAlign: !g && E && \"middle\",\n          y: g ? E ? 16 : 10 : E ? 6 : -4,\n          rotation: g && !E && 90\n        }, a), this.renderLabel(a, r, E, A)) : d && d.hide();\n        return f;\n      },\n      renderLabel: function (c, h, g, b) {\n        var a = this.label,\n          d = this.axis.chart.renderer;\n        a || (a = {\n          align: c.textAlign || c.align,\n          rotation: c.rotation,\n          \"class\": \"highcharts-plot-\" + (g ? \"band\" : \"line\") + \"-label \" + (c.className || \"\")\n        }, a.zIndex = b, b = this.getLabelText(c), this.label = a = d.text(b, 0, 0, c.useHTML).attr(a).add(), this.axis.chart.styledMode || a.css(c.style));\n        d = h.xBounds || [h[1], h[4], g ? h[6] : h[1]];\n        h = h.yBounds || [h[2], h[5], g ? h[7] : h[2]];\n        g = z(d);\n        b = z(h);\n        a.align(c, !1, {\n          x: g,\n          y: b,\n          width: G(d) - g,\n          height: G(h) - b\n        });\n        a.show(!0);\n      },\n      getLabelText: function (c) {\n        return B(c.formatter) ? c.formatter.call(this) : c.text;\n      },\n      destroy: function () {\n        v(this.axis.plotLinesAndBands, this);\n        delete this.axis;\n        t(this);\n      }\n    };\n    C(f.prototype, {\n      getPlotBandPath: function (c, h) {\n        var g = this.getPlotLinePath({\n            value: h,\n            force: !0,\n            acrossPanes: this.options.acrossPanes\n          }),\n          b = this.getPlotLinePath({\n            value: c,\n            force: !0,\n            acrossPanes: this.options.acrossPanes\n          }),\n          a = [],\n          d = this.horiz,\n          e = 1;\n        c = c < this.min && h < this.min || c > this.max && h > this.max;\n        if (b && g) {\n          if (c) {\n            var l = b.toString() === g.toString();\n            e = 0;\n          }\n          for (c = 0; c < b.length; c += 6) d && g[c + 1] === b[c + 1] ? (g[c + 1] += e, g[c + 4] += e) : d || g[c + 2] !== b[c + 2] || (g[c + 2] += e, g[c + 5] += e), a.push(\"M\", b[c + 1], b[c + 2], \"L\", b[c + 4], b[c + 5], g[c + 4], g[c + 5], g[c + 1], g[c + 2], \"z\"), a.isFlat = l;\n        }\n        return a;\n      },\n      addPlotBand: function (c) {\n        return this.addPlotBandOrLine(c, \"plotBands\");\n      },\n      addPlotLine: function (c) {\n        return this.addPlotBandOrLine(c, \"plotLines\");\n      },\n      addPlotBandOrLine: function (h, f) {\n        var g = new c.PlotLineOrBand(this, h).render(),\n          b = this.userOptions;\n        if (g) {\n          if (f) {\n            var a = b[f] || [];\n            a.push(h);\n            b[f] = a;\n          }\n          this.plotLinesAndBands.push(g);\n        }\n        return g;\n      },\n      removePlotBandOrLine: function (c) {\n        for (var h = this.plotLinesAndBands, g = this.options, b = this.userOptions, a = h.length; a--;) h[a].id === c && h[a].destroy();\n        [g.plotLines || [], b.plotLines || [], g.plotBands || [], b.plotBands || []].forEach(function (b) {\n          for (a = b.length; a--;) b[a].id === c && v(b, b[a]);\n        });\n      },\n      removePlotBand: function (c) {\n        this.removePlotBandOrLine(c);\n      },\n      removePlotLine: function (c) {\n        this.removePlotBandOrLine(c);\n      }\n    });\n  });\n  M(I, \"parts/Tooltip.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.discardElement,\n      z = f.extend,\n      B = f.isNumber,\n      t = f.isString,\n      v = f.pick,\n      C = f.splat,\n      H = f.syncTimeout;\n    \"\";\n    var y = c.doc,\n      h = c.format,\n      n = c.merge,\n      q = c.timeUnits;\n    c.Tooltip = function () {\n      this.init.apply(this, arguments);\n    };\n    c.Tooltip.prototype = {\n      init: function (c, b) {\n        this.chart = c;\n        this.options = b;\n        this.crosshairs = [];\n        this.now = {\n          x: 0,\n          y: 0\n        };\n        this.isHidden = !0;\n        this.split = b.split && !c.inverted;\n        this.shared = b.shared || this.split;\n        this.outside = v(b.outside, !(!c.scrollablePixelsX && !c.scrollablePixelsY));\n      },\n      cleanSplit: function (c) {\n        this.chart.series.forEach(function (b) {\n          var a = b && b.tt;\n          a && (!a.isActive || c ? b.tt = a.destroy() : a.isActive = !1);\n        });\n      },\n      applyFilter: function () {\n        var c = this.chart;\n        c.renderer.definition({\n          tagName: \"filter\",\n          id: \"drop-shadow-\" + c.index,\n          opacity: .5,\n          children: [{\n            tagName: \"feGaussianBlur\",\n            \"in\": \"SourceAlpha\",\n            stdDeviation: 1\n          }, {\n            tagName: \"feOffset\",\n            dx: 1,\n            dy: 1\n          }, {\n            tagName: \"feComponentTransfer\",\n            children: [{\n              tagName: \"feFuncA\",\n              type: \"linear\",\n              slope: .3\n            }]\n          }, {\n            tagName: \"feMerge\",\n            children: [{\n              tagName: \"feMergeNode\"\n            }, {\n              tagName: \"feMergeNode\",\n              \"in\": \"SourceGraphic\"\n            }]\n          }]\n        });\n        c.renderer.definition({\n          tagName: \"style\",\n          textContent: \".highcharts-tooltip-\" + c.index + \"{filter:url(#drop-shadow-\" + c.index + \")}\"\n        });\n      },\n      getLabel: function () {\n        var g = this,\n          b = this.chart.renderer,\n          a = this.chart.styledMode,\n          d = this.options,\n          e = \"tooltip\" + (F(d.className) ? \" \" + d.className : \"\"),\n          l;\n        if (!this.label) {\n          this.outside && (this.container = l = c.doc.createElement(\"div\"), l.className = \"highcharts-tooltip-container\", c.css(l, {\n            position: \"absolute\",\n            top: \"1px\",\n            pointerEvents: d.style && d.style.pointerEvents,\n            zIndex: 3\n          }), c.doc.body.appendChild(l), this.renderer = b = new c.Renderer(l, 0, 0, {}, void 0, void 0, b.styledMode));\n          this.split ? this.label = b.g(e) : (this.label = b.label(\"\", 0, 0, d.shape || \"callout\", null, null, d.useHTML, null, e).attr({\n            padding: d.padding,\n            r: d.borderRadius\n          }), a || this.label.attr({\n            fill: d.backgroundColor,\n            \"stroke-width\": d.borderWidth\n          }).css(d.style).shadow(d.shadow));\n          a && (this.applyFilter(), this.label.addClass(\"highcharts-tooltip-\" + this.chart.index));\n          if (g.outside && !g.split) {\n            var h = {\n              x: this.label.xSetter,\n              y: this.label.ySetter\n            };\n            this.label.xSetter = function (a, b) {\n              h[b].call(this.label, g.distance);\n              l.style.left = a + \"px\";\n            };\n            this.label.ySetter = function (a, b) {\n              h[b].call(this.label, g.distance);\n              l.style.top = a + \"px\";\n            };\n          }\n          this.label.attr({\n            zIndex: 8\n          }).add();\n        }\n        return this.label;\n      },\n      update: function (c) {\n        this.destroy();\n        n(!0, this.chart.options.tooltip.userOptions, c);\n        this.init(this.chart, n(!0, this.options, c));\n      },\n      destroy: function () {\n        this.label && (this.label = this.label.destroy());\n        this.split && this.tt && (this.cleanSplit(this.chart, !0), this.tt = this.tt.destroy());\n        this.renderer && (this.renderer = this.renderer.destroy(), G(this.container));\n        c.clearTimeout(this.hideTimer);\n        c.clearTimeout(this.tooltipTimeout);\n      },\n      move: function (g, b, a, d) {\n        var e = this,\n          l = e.now,\n          h = !1 !== e.options.animation && !e.isHidden && (1 < Math.abs(g - l.x) || 1 < Math.abs(b - l.y)),\n          f = e.followPointer || 1 < e.len;\n        z(l, {\n          x: h ? (2 * l.x + g) / 3 : g,\n          y: h ? (l.y + b) / 2 : b,\n          anchorX: f ? void 0 : h ? (2 * l.anchorX + a) / 3 : a,\n          anchorY: f ? void 0 : h ? (l.anchorY + d) / 2 : d\n        });\n        e.getLabel().attr(l);\n        h && (c.clearTimeout(this.tooltipTimeout), this.tooltipTimeout = setTimeout(function () {\n          e && e.move(g, b, a, d);\n        }, 32));\n      },\n      hide: function (g) {\n        var b = this;\n        c.clearTimeout(this.hideTimer);\n        g = v(g, this.options.hideDelay, 500);\n        this.isHidden || (this.hideTimer = H(function () {\n          b.getLabel()[g ? \"fadeOut\" : \"hide\"]();\n          b.isHidden = !0;\n        }, g));\n      },\n      getAnchor: function (c, b) {\n        var a = this.chart,\n          d = a.pointer,\n          e = a.inverted,\n          l = a.plotTop,\n          g = a.plotLeft,\n          h = 0,\n          p = 0,\n          f,\n          k;\n        c = C(c);\n        this.followPointer && b ? (void 0 === b.chartX && (b = d.normalize(b)), c = [b.chartX - a.plotLeft, b.chartY - l]) : c[0].tooltipPos ? c = c[0].tooltipPos : (c.forEach(function (a) {\n          f = a.series.yAxis;\n          k = a.series.xAxis;\n          h += a.plotX + (!e && k ? k.left - g : 0);\n          p += (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) + (!e && f ? f.top - l : 0);\n        }), h /= c.length, p /= c.length, c = [e ? a.plotWidth - p : h, this.shared && !e && 1 < c.length && b ? b.chartY - l : e ? a.plotHeight - h : p]);\n        return c.map(Math.round);\n      },\n      getPosition: function (c, b, a) {\n        var d = this.chart,\n          e = this.distance,\n          l = {},\n          g = d.inverted && a.h || 0,\n          h,\n          p = this.outside,\n          f = p ? y.documentElement.clientWidth - 2 * e : d.chartWidth,\n          k = p ? Math.max(y.body.scrollHeight, y.documentElement.scrollHeight, y.body.offsetHeight, y.documentElement.offsetHeight, y.documentElement.clientHeight) : d.chartHeight,\n          r = d.pointer.getChartPosition(),\n          x = d.containerScaling,\n          A = function (a) {\n            return x ? a * x.scaleX : a;\n          },\n          w = function (a) {\n            return x ? a * x.scaleY : a;\n          },\n          m = function (l) {\n            var m = \"x\" === l;\n            return [l, m ? f : k, m ? c : b].concat(p ? [m ? A(c) : w(b), m ? r.left - e + A(a.plotX + d.plotLeft) : r.top - e + w(a.plotY + d.plotTop), 0, m ? f : k] : [m ? c : b, m ? a.plotX + d.plotLeft : a.plotY + d.plotTop, m ? d.plotLeft : d.plotTop, m ? d.plotLeft + d.plotWidth : d.plotTop + d.plotHeight]);\n          },\n          n = m(\"y\"),\n          J = m(\"x\"),\n          q = !this.followPointer && v(a.ttBelow, !d.inverted === !!a.negative),\n          t = function (a, b, d, c, k, m, r) {\n            var x = \"y\" === a ? w(e) : A(e),\n              p = (d - c) / 2,\n              h = c < k - e,\n              f = k + e + c < b,\n              u = k - x - d + p;\n            k = k + x - p;\n            if (q && f) l[a] = k;else if (!q && h) l[a] = u;else if (h) l[a] = Math.min(r - c, 0 > u - g ? u : u - g);else if (f) l[a] = Math.max(m, k + g + d > b ? k : k + g);else return !1;\n          },\n          C = function (a, b, d, k, c) {\n            var m;\n            c < e || c > b - e ? m = !1 : l[a] = c < d / 2 ? 1 : c > b - k / 2 ? b - k - 2 : c - d / 2;\n            return m;\n          },\n          O = function (a) {\n            var b = n;\n            n = J;\n            J = b;\n            h = a;\n          },\n          D = function () {\n            !1 !== t.apply(0, n) ? !1 !== C.apply(0, J) || h || (O(!0), D()) : h ? l.x = l.y = 0 : (O(!0), D());\n          };\n        (d.inverted || 1 < this.len) && O();\n        D();\n        return l;\n      },\n      defaultFormatter: function (c) {\n        var b = this.points || C(this);\n        var a = [c.tooltipFooterHeaderFormatter(b[0])];\n        a = a.concat(c.bodyFormatter(b));\n        a.push(c.tooltipFooterHeaderFormatter(b[0], !0));\n        return a;\n      },\n      refresh: function (g, b) {\n        var a = this.chart,\n          d = this.options,\n          e = g,\n          l = {},\n          h = [],\n          f = d.formatter || this.defaultFormatter;\n        l = this.shared;\n        var p = a.styledMode;\n        if (d.enabled) {\n          c.clearTimeout(this.hideTimer);\n          this.followPointer = C(e)[0].series.tooltipOptions.followPointer;\n          var u = this.getAnchor(e, b);\n          b = u[0];\n          var k = u[1];\n          !l || e.series && e.series.noSharedTooltip ? l = e.getLabelConfig() : (a.pointer.applyInactiveState(e), e.forEach(function (a) {\n            a.setState(\"hover\");\n            h.push(a.getLabelConfig());\n          }), l = {\n            x: e[0].category,\n            y: e[0].y\n          }, l.points = h, e = e[0]);\n          this.len = h.length;\n          a = f.call(l, this);\n          f = e.series;\n          this.distance = v(f.tooltipOptions.distance, 16);\n          !1 === a ? this.hide() : (this.split ? this.renderSplit(a, C(g)) : (g = this.getLabel(), d.style.width && !p || g.css({\n            width: this.chart.spacingBox.width\n          }), g.attr({\n            text: a && a.join ? a.join(\"\") : a\n          }), g.removeClass(/highcharts-color-[\\d]+/g).addClass(\"highcharts-color-\" + v(e.colorIndex, f.colorIndex)), p || g.attr({\n            stroke: d.borderColor || e.color || f.color || \"#666666\"\n          }), this.updatePosition({\n            plotX: b,\n            plotY: k,\n            negative: e.negative,\n            ttBelow: e.ttBelow,\n            h: u[2] || 0\n          })), this.isHidden && this.label && this.label.attr({\n            opacity: 1\n          }).show(), this.isHidden = !1);\n          c.fireEvent(this, \"refresh\");\n        }\n      },\n      renderSplit: function (g, b) {\n        var a = this,\n          d = [],\n          e = this.chart,\n          l = e.renderer,\n          h = !0,\n          f = this.options,\n          p = 0,\n          u,\n          k = this.getLabel(),\n          r = e.plotTop;\n        t(g) && (g = [!1, g]);\n        g.slice(0, b.length + 1).forEach(function (c, m) {\n          if (!1 !== c && \"\" !== c) {\n            m = b[m - 1] || {\n              isHeader: !0,\n              plotX: b[0].plotX,\n              plotY: e.plotHeight\n            };\n            var g = m.series || a,\n              x = g.tt,\n              w = m.series || {},\n              A = \"highcharts-color-\" + v(m.colorIndex, w.colorIndex, \"none\");\n            x || (x = {\n              padding: f.padding,\n              r: f.borderRadius\n            }, e.styledMode || (x.fill = f.backgroundColor, x[\"stroke-width\"] = f.borderWidth), g.tt = x = l.label(null, null, null, (m.isHeader ? f.headerShape : f.shape) || \"callout\", null, null, f.useHTML).addClass(m.isHeader ? \"highcharts-tooltip-header \" : \"highcharts-tooltip-box \" + A).attr(x).add(k));\n            x.isActive = !0;\n            x.attr({\n              text: c\n            });\n            e.styledMode || x.css(f.style).shadow(f.shadow).attr({\n              stroke: f.borderColor || m.color || w.color || \"#333333\"\n            });\n            c = x.getBBox();\n            A = c.width + x.strokeWidth();\n            m.isHeader ? (p = c.height, e.xAxis[0].opposite && (u = !0, r -= p), c = Math.max(0, Math.min(m.plotX + e.plotLeft - A / 2, e.chartWidth + (e.scrollablePixelsX ? e.scrollablePixelsX - e.marginRight : 0) - A))) : c = m.plotX + e.plotLeft - v(f.distance, 16) - A;\n            0 > c && (h = !1);\n            m.isHeader ? w = u ? -p : e.plotHeight + p : (w = w.yAxis, w = w.pos - r + Math.max(0, Math.min(m.plotY || 0, w.len)));\n            d.push({\n              target: w,\n              rank: m.isHeader ? 1 : 0,\n              size: g.tt.getBBox().height + 1,\n              point: m,\n              x: c,\n              tt: x\n            });\n          }\n        });\n        this.cleanSplit();\n        f.positioner && d.forEach(function (b) {\n          var d = f.positioner.call(a, b.tt.getBBox().width, b.size, b.point);\n          b.x = d.x;\n          b.align = 0;\n          b.target = d.y;\n          b.rank = v(d.rank, b.rank);\n        });\n        c.distribute(d, e.plotHeight + p);\n        d.forEach(function (b) {\n          var d = b.point,\n            c = d.series,\n            k = c && c.yAxis;\n          b.tt.attr({\n            visibility: void 0 === b.pos ? \"hidden\" : \"inherit\",\n            x: h || d.isHeader || f.positioner ? b.x : d.plotX + e.plotLeft + a.distance,\n            y: b.pos + r,\n            anchorX: d.isHeader ? d.plotX + e.plotLeft : d.plotX + c.xAxis.pos,\n            anchorY: d.isHeader ? e.plotTop + e.plotHeight / 2 : k.pos + Math.max(0, Math.min(d.plotY, k.len))\n          });\n        });\n        var x = a.container;\n        g = a.renderer;\n        if (a.outside && x && g) {\n          var A = e.pointer.getChartPosition();\n          x.style.left = A.left + \"px\";\n          x.style.top = A.top + \"px\";\n          x = k.getBBox();\n          g.setSize(x.width + x.x, x.height + x.y, !1);\n        }\n      },\n      updatePosition: function (g) {\n        var b = this.chart,\n          a = b.pointer,\n          d = this.getLabel(),\n          e = g.plotX + b.plotLeft,\n          l = g.plotY + b.plotTop;\n        a = a.getChartPosition();\n        g = (this.options.positioner || this.getPosition).call(this, d.width, d.height, g);\n        if (this.outside) {\n          var h = (this.options.borderWidth || 0) + 2 * this.distance;\n          this.renderer.setSize(d.width + h, d.height + h, !1);\n          if (b = b.containerScaling) c.css(this.container, {\n            transform: \"scale(\" + b.scaleX + \", \" + b.scaleY + \")\"\n          }), e *= b.scaleX, l *= b.scaleY;\n          e += a.left - g.x;\n          l += a.top - g.y;\n        }\n        this.move(Math.round(g.x), Math.round(g.y || 0), e, l);\n      },\n      getDateFormat: function (c, b, a, d) {\n        var e = this.chart.time,\n          l = e.dateFormat(\"%m-%d %H:%M:%S.%L\", b),\n          g = {\n            millisecond: 15,\n            second: 12,\n            minute: 9,\n            hour: 6,\n            day: 3\n          },\n          h = \"millisecond\";\n        for (p in q) {\n          if (c === q.week && +e.dateFormat(\"%w\", b) === a && \"00:00:00.000\" === l.substr(6)) {\n            var p = \"week\";\n            break;\n          }\n          if (q[p] > c) {\n            p = h;\n            break;\n          }\n          if (g[p] && l.substr(g[p]) !== \"01-01 00:00:00.000\".substr(g[p])) break;\n          \"week\" !== p && (h = p);\n        }\n        if (p) var f = e.resolveDTLFormat(d[p]).main;\n        return f;\n      },\n      getXDateFormat: function (c, b, a) {\n        b = b.dateTimeLabelFormats;\n        var d = a && a.closestPointRange;\n        return (d ? this.getDateFormat(d, c.x, a.options.startOfWeek, b) : b.day) || b.year;\n      },\n      tooltipFooterHeaderFormatter: function (g, b) {\n        var a = b ? \"footer\" : \"header\",\n          d = g.series,\n          e = d.tooltipOptions,\n          l = e.xDateFormat,\n          f = d.xAxis,\n          n = f && \"datetime\" === f.options.type && B(g.key),\n          p = e[a + \"Format\"];\n        b = {\n          isFooter: b,\n          labelConfig: g\n        };\n        c.fireEvent(this, \"headerFormatter\", b, function (a) {\n          n && !l && (l = this.getXDateFormat(g, e, f));\n          n && l && (g.point && g.point.tooltipDateKeys || [\"key\"]).forEach(function (a) {\n            p = p.replace(\"{point.\" + a + \"}\", \"{point.\" + a + \":\" + l + \"}\");\n          });\n          d.chart.styledMode && (p = this.styledModeFormat(p));\n          a.text = h(p, {\n            point: g,\n            series: d\n          }, this.chart.time);\n        });\n        return b.text;\n      },\n      bodyFormatter: function (c) {\n        return c.map(function (b) {\n          var a = b.series.tooltipOptions;\n          return (a[(b.point.formatPrefix || \"point\") + \"Formatter\"] || b.point.tooltipFormatter).call(b.point, a[(b.point.formatPrefix || \"point\") + \"Format\"] || \"\");\n        });\n      },\n      styledModeFormat: function (c) {\n        return c.replace('style=\"font-size: 10px\"', 'class=\"highcharts-header\"').replace(/style=\"color:{(point|series)\\.color}\"/g, 'class=\"highcharts-color-{$1.colorIndex}\"');\n      }\n    };\n  });\n  M(I, \"parts/Pointer.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.attr,\n      G = f.defined,\n      z = f.extend,\n      B = f.isNumber,\n      t = f.isObject,\n      v = f.objectEach,\n      C = f.pick,\n      H = f.splat,\n      y = c.addEvent,\n      h = c.charts,\n      n = c.color,\n      q = c.css,\n      g = c.find,\n      b = c.fireEvent,\n      a = c.offset,\n      d = c.Tooltip;\n    c.Pointer = function (a, b) {\n      this.init(a, b);\n    };\n    c.Pointer.prototype = {\n      init: function (a, b) {\n        this.options = b;\n        this.chart = a;\n        this.runChartClick = b.chart.events && !!b.chart.events.click;\n        this.pinchDown = [];\n        this.lastValidTouch = {};\n        d && (a.tooltip = new d(a, b.tooltip), this.followTouchMove = C(b.tooltip.followTouchMove, !0));\n        this.setDOMEvents();\n      },\n      zoomOption: function (a) {\n        var b = this.chart,\n          d = b.options.chart,\n          e = d.zoomType || \"\";\n        b = b.inverted;\n        /touch/.test(a.type) && (e = C(d.pinchType, e));\n        this.zoomX = a = /x/.test(e);\n        this.zoomY = e = /y/.test(e);\n        this.zoomHor = a && !b || e && b;\n        this.zoomVert = e && !b || a && b;\n        this.hasZoom = a || e;\n      },\n      getChartPosition: function () {\n        return this.chartPosition || (this.chartPosition = a(this.chart.container));\n      },\n      normalize: function (a, b) {\n        var d = a.touches ? a.touches.length ? a.touches.item(0) : a.changedTouches[0] : a;\n        b || (b = this.getChartPosition());\n        var e = d.pageX - b.left;\n        b = d.pageY - b.top;\n        if (d = this.chart.containerScaling) e /= d.scaleX, b /= d.scaleY;\n        return z(a, {\n          chartX: Math.round(e),\n          chartY: Math.round(b)\n        });\n      },\n      getCoordinates: function (a) {\n        var b = {\n          xAxis: [],\n          yAxis: []\n        };\n        this.chart.axes.forEach(function (d) {\n          b[d.isXAxis ? \"xAxis\" : \"yAxis\"].push({\n            axis: d,\n            value: d.toValue(a[d.horiz ? \"chartX\" : \"chartY\"])\n          });\n        });\n        return b;\n      },\n      findNearestKDPoint: function (a, b, d) {\n        var e;\n        a.forEach(function (a) {\n          var c = !(a.noSharedTooltip && b) && 0 > a.options.findNearestPointBy.indexOf(\"y\");\n          a = a.searchPoint(d, c);\n          if ((c = t(a, !0)) && !(c = !t(e, !0))) {\n            c = e.distX - a.distX;\n            var k = e.dist - a.dist,\n              l = (a.series.group && a.series.group.zIndex) - (e.series.group && e.series.group.zIndex);\n            c = 0 < (0 !== c && b ? c : 0 !== k ? k : 0 !== l ? l : e.series.index > a.series.index ? -1 : 1);\n          }\n          c && (e = a);\n        });\n        return e;\n      },\n      getPointFromEvent: function (a) {\n        a = a.target;\n        for (var b; a && !b;) b = a.point, a = a.parentNode;\n        return b;\n      },\n      getChartCoordinatesFromPoint: function (a, b) {\n        var d = a.series,\n          e = d.xAxis;\n        d = d.yAxis;\n        var c = C(a.clientX, a.plotX),\n          l = a.shapeArgs;\n        if (e && d) return b ? {\n          chartX: e.len + e.pos - c,\n          chartY: d.len + d.pos - a.plotY\n        } : {\n          chartX: c + e.pos,\n          chartY: a.plotY + d.pos\n        };\n        if (l && l.x && l.y) return {\n          chartX: l.x,\n          chartY: l.y\n        };\n      },\n      getHoverData: function (a, b, d, c, h, f) {\n        var e,\n          l = [];\n        c = !(!c || !a);\n        var x = b && !b.stickyTracking ? [b] : d.filter(function (a) {\n          return a.visible && !(!h && a.directTouch) && C(a.options.enableMouseTracking, !0) && a.stickyTracking;\n        });\n        b = (e = c || !f ? a : this.findNearestKDPoint(x, h, f)) && e.series;\n        e && (h && !b.noSharedTooltip ? (x = d.filter(function (a) {\n          return a.visible && !(!h && a.directTouch) && C(a.options.enableMouseTracking, !0) && !a.noSharedTooltip;\n        }), x.forEach(function (a) {\n          var b = g(a.points, function (a) {\n            return a.x === e.x && !a.isNull;\n          });\n          t(b) && (a.chart.isBoosting && (b = a.getPoint(b)), l.push(b));\n        })) : l.push(e));\n        return {\n          hoverPoint: e,\n          hoverSeries: b,\n          hoverPoints: l\n        };\n      },\n      runPointActions: function (a, b) {\n        var d = this.chart,\n          e = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0,\n          l = e ? e.shared : !1,\n          g = b || d.hoverPoint,\n          k = g && g.series || d.hoverSeries;\n        k = this.getHoverData(g, k, d.series, (!a || \"touchmove\" !== a.type) && (!!b || k && k.directTouch && this.isDirectTouch), l, a);\n        g = k.hoverPoint;\n        var r = k.hoverPoints;\n        b = (k = k.hoverSeries) && k.tooltipOptions.followPointer;\n        l = l && k && !k.noSharedTooltip;\n        if (g && (g !== d.hoverPoint || e && e.isHidden)) {\n          (d.hoverPoints || []).forEach(function (a) {\n            -1 === r.indexOf(a) && a.setState();\n          });\n          if (d.hoverSeries !== k) k.onMouseOver();\n          this.applyInactiveState(r);\n          (r || []).forEach(function (a) {\n            a.setState(\"hover\");\n          });\n          d.hoverPoint && d.hoverPoint.firePointEvent(\"mouseOut\");\n          if (!g.series) return;\n          g.firePointEvent(\"mouseOver\");\n          d.hoverPoints = r;\n          d.hoverPoint = g;\n          e && e.refresh(l ? r : g, a);\n        } else b && e && !e.isHidden && (g = e.getAnchor([{}], a), e.updatePosition({\n          plotX: g[0],\n          plotY: g[1]\n        }));\n        this.unDocMouseMove || (this.unDocMouseMove = y(d.container.ownerDocument, \"mousemove\", function (a) {\n          var b = h[c.hoverChartIndex];\n          if (b) b.pointer.onDocumentMouseMove(a);\n        }));\n        d.axes.forEach(function (b) {\n          var d = C(b.crosshair.snap, !0),\n            e = d ? c.find(r, function (a) {\n              return a.series[b.coll] === b;\n            }) : void 0;\n          e || !d ? b.drawCrosshair(a, e) : b.hideCrosshair();\n        });\n      },\n      applyInactiveState: function (a) {\n        var b = [],\n          d;\n        (a || []).forEach(function (a) {\n          d = a.series;\n          b.push(d);\n          d.linkedParent && b.push(d.linkedParent);\n          d.linkedSeries && (b = b.concat(d.linkedSeries));\n          d.navigatorSeries && b.push(d.navigatorSeries);\n        });\n        this.chart.series.forEach(function (a) {\n          -1 === b.indexOf(a) ? a.setState(\"inactive\", !0) : a.options.inactiveOtherPoints && a.setAllPointsToState(\"inactive\");\n        });\n      },\n      reset: function (a, b) {\n        var d = this.chart,\n          e = d.hoverSeries,\n          c = d.hoverPoint,\n          g = d.hoverPoints,\n          k = d.tooltip,\n          l = k && k.shared ? g : c;\n        a && l && H(l).forEach(function (b) {\n          b.series.isCartesian && void 0 === b.plotX && (a = !1);\n        });\n        if (a) k && l && H(l).length && (k.refresh(l), k.shared && g ? g.forEach(function (a) {\n          a.setState(a.state, !0);\n          a.series.isCartesian && (a.series.xAxis.crosshair && a.series.xAxis.drawCrosshair(null, a), a.series.yAxis.crosshair && a.series.yAxis.drawCrosshair(null, a));\n        }) : c && (c.setState(c.state, !0), d.axes.forEach(function (a) {\n          a.crosshair && a.drawCrosshair(null, c);\n        })));else {\n          if (c) c.onMouseOut();\n          g && g.forEach(function (a) {\n            a.setState();\n          });\n          if (e) e.onMouseOut();\n          k && k.hide(b);\n          this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove());\n          d.axes.forEach(function (a) {\n            a.hideCrosshair();\n          });\n          this.hoverX = d.hoverPoints = d.hoverPoint = null;\n        }\n      },\n      scaleGroups: function (a, b) {\n        var d = this.chart,\n          e;\n        d.series.forEach(function (c) {\n          e = a || c.getPlotBox();\n          c.xAxis && c.xAxis.zoomEnabled && c.group && (c.group.attr(e), c.markerGroup && (c.markerGroup.attr(e), c.markerGroup.clip(b ? d.clipRect : null)), c.dataLabelsGroup && c.dataLabelsGroup.attr(e));\n        });\n        d.clipRect.attr(b || d.clipBox);\n      },\n      dragStart: function (a) {\n        var b = this.chart;\n        b.mouseIsDown = a.type;\n        b.cancelClick = !1;\n        b.mouseDownX = this.mouseDownX = a.chartX;\n        b.mouseDownY = this.mouseDownY = a.chartY;\n      },\n      drag: function (a) {\n        var b = this.chart,\n          d = b.options.chart,\n          e = a.chartX,\n          c = a.chartY,\n          g = this.zoomHor,\n          k = this.zoomVert,\n          r = b.plotLeft,\n          h = b.plotTop,\n          A = b.plotWidth,\n          w = b.plotHeight,\n          m = this.selectionMarker,\n          f = this.mouseDownX,\n          J = this.mouseDownY,\n          v = d.panKey && a[d.panKey + \"Key\"];\n        if (!m || !m.touch) if (e < r ? e = r : e > r + A && (e = r + A), c < h ? c = h : c > h + w && (c = h + w), this.hasDragged = Math.sqrt(Math.pow(f - e, 2) + Math.pow(J - c, 2)), 10 < this.hasDragged) {\n          var q = b.isInsidePlot(f - r, J - h);\n          b.hasCartesianSeries && (this.zoomX || this.zoomY) && q && !v && !m && (this.selectionMarker = m = b.renderer.rect(r, h, g ? 1 : A, k ? 1 : w, 0).attr({\n            \"class\": \"highcharts-selection-marker\",\n            zIndex: 7\n          }).add(), b.styledMode || m.attr({\n            fill: d.selectionMarkerFill || n(\"#335cad\").setOpacity(.25).get()\n          }));\n          m && g && (e -= f, m.attr({\n            width: Math.abs(e),\n            x: (0 < e ? 0 : e) + f\n          }));\n          m && k && (e = c - J, m.attr({\n            height: Math.abs(e),\n            y: (0 < e ? 0 : e) + J\n          }));\n          q && !m && d.panning && b.pan(a, d.panning);\n        }\n      },\n      drop: function (a) {\n        var d = this,\n          e = this.chart,\n          c = this.hasPinched;\n        if (this.selectionMarker) {\n          var g = {\n              originalEvent: a,\n              xAxis: [],\n              yAxis: []\n            },\n            h = this.selectionMarker,\n            k = h.attr ? h.attr(\"x\") : h.x,\n            r = h.attr ? h.attr(\"y\") : h.y,\n            x = h.attr ? h.attr(\"width\") : h.width,\n            A = h.attr ? h.attr(\"height\") : h.height,\n            w;\n          if (this.hasDragged || c) e.axes.forEach(function (b) {\n            if (b.zoomEnabled && G(b.min) && (c || d[{\n              xAxis: \"zoomX\",\n              yAxis: \"zoomY\"\n            }[b.coll]])) {\n              var e = b.horiz,\n                m = \"touchend\" === a.type ? b.minPixelPadding : 0,\n                l = b.toValue((e ? k : r) + m);\n              e = b.toValue((e ? k + x : r + A) - m);\n              g[b.coll].push({\n                axis: b,\n                min: Math.min(l, e),\n                max: Math.max(l, e)\n              });\n              w = !0;\n            }\n          }), w && b(e, \"selection\", g, function (a) {\n            e.zoom(z(a, c ? {\n              animation: !1\n            } : null));\n          });\n          B(e.index) && (this.selectionMarker = this.selectionMarker.destroy());\n          c && this.scaleGroups();\n        }\n        e && B(e.index) && (q(e.container, {\n          cursor: e._cursor\n        }), e.cancelClick = 10 < this.hasDragged, e.mouseIsDown = this.hasDragged = this.hasPinched = !1, this.pinchDown = []);\n      },\n      onContainerMouseDown: function (a) {\n        a = this.normalize(a);\n        2 !== a.button && (this.zoomOption(a), a.preventDefault && a.preventDefault(), this.dragStart(a));\n      },\n      onDocumentMouseUp: function (a) {\n        h[c.hoverChartIndex] && h[c.hoverChartIndex].pointer.drop(a);\n      },\n      onDocumentMouseMove: function (a) {\n        var b = this.chart,\n          d = this.chartPosition;\n        a = this.normalize(a, d);\n        !d || this.inClass(a.target, \"highcharts-tracker\") || b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) || this.reset();\n      },\n      onContainerMouseLeave: function (a) {\n        var b = h[c.hoverChartIndex];\n        b && (a.relatedTarget || a.toElement) && (b.pointer.reset(), b.pointer.chartPosition = void 0);\n      },\n      onContainerMouseMove: function (a) {\n        var b = this.chart;\n        G(c.hoverChartIndex) && h[c.hoverChartIndex] && h[c.hoverChartIndex].mouseIsDown || (c.hoverChartIndex = b.index);\n        a = this.normalize(a);\n        a.preventDefault || (a.returnValue = !1);\n        \"mousedown\" === b.mouseIsDown && this.drag(a);\n        !this.inClass(a.target, \"highcharts-tracker\") && !b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) || b.openMenu || this.runPointActions(a);\n      },\n      inClass: function (a, b) {\n        for (var d; a;) {\n          if (d = F(a, \"class\")) {\n            if (-1 !== d.indexOf(b)) return !0;\n            if (-1 !== d.indexOf(\"highcharts-container\")) return !1;\n          }\n          a = a.parentNode;\n        }\n      },\n      onTrackerMouseOut: function (a) {\n        var b = this.chart.hoverSeries;\n        a = a.relatedTarget || a.toElement;\n        this.isDirectTouch = !1;\n        if (!(!b || !a || b.stickyTracking || this.inClass(a, \"highcharts-tooltip\") || this.inClass(a, \"highcharts-series-\" + b.index) && this.inClass(a, \"highcharts-tracker\"))) b.onMouseOut();\n      },\n      onContainerClick: function (a) {\n        var d = this.chart,\n          e = d.hoverPoint,\n          c = d.plotLeft,\n          g = d.plotTop;\n        a = this.normalize(a);\n        d.cancelClick || (e && this.inClass(a.target, \"highcharts-tracker\") ? (b(e.series, \"click\", z(a, {\n          point: e\n        })), d.hoverPoint && e.firePointEvent(\"click\", a)) : (z(a, this.getCoordinates(a)), d.isInsidePlot(a.chartX - c, a.chartY - g) && b(d, \"click\", a)));\n      },\n      setDOMEvents: function () {\n        var a = this,\n          b = a.chart.container,\n          d = b.ownerDocument;\n        b.onmousedown = function (b) {\n          a.onContainerMouseDown(b);\n        };\n        b.onmousemove = function (b) {\n          a.onContainerMouseMove(b);\n        };\n        b.onclick = function (b) {\n          a.onContainerClick(b);\n        };\n        this.unbindContainerMouseLeave = y(b, \"mouseleave\", a.onContainerMouseLeave);\n        c.unbindDocumentMouseUp || (c.unbindDocumentMouseUp = y(d, \"mouseup\", a.onDocumentMouseUp));\n        c.hasTouch && (y(b, \"touchstart\", function (b) {\n          a.onContainerTouchStart(b);\n        }), y(b, \"touchmove\", function (b) {\n          a.onContainerTouchMove(b);\n        }), c.unbindDocumentTouchEnd || (c.unbindDocumentTouchEnd = y(d, \"touchend\", a.onDocumentTouchEnd)));\n      },\n      destroy: function () {\n        var a = this;\n        a.unDocMouseMove && a.unDocMouseMove();\n        this.unbindContainerMouseLeave();\n        c.chartCount || (c.unbindDocumentMouseUp && (c.unbindDocumentMouseUp = c.unbindDocumentMouseUp()), c.unbindDocumentTouchEnd && (c.unbindDocumentTouchEnd = c.unbindDocumentTouchEnd()));\n        clearInterval(a.tooltipTimeout);\n        v(a, function (b, d) {\n          a[d] = null;\n        });\n      }\n    };\n  });\n  M(I, \"parts/TouchPointer.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.extend,\n      G = f.pick,\n      z = c.charts,\n      B = c.noop;\n    F(c.Pointer.prototype, {\n      pinchTranslate: function (c, f, C, B, y, h) {\n        this.zoomHor && this.pinchTranslateDirection(!0, c, f, C, B, y, h);\n        this.zoomVert && this.pinchTranslateDirection(!1, c, f, C, B, y, h);\n      },\n      pinchTranslateDirection: function (c, f, C, B, y, h, n, q) {\n        var g = this.chart,\n          b = c ? \"x\" : \"y\",\n          a = c ? \"X\" : \"Y\",\n          d = \"chart\" + a,\n          e = c ? \"width\" : \"height\",\n          l = g[\"plot\" + (c ? \"Left\" : \"Top\")],\n          v,\n          t,\n          p = q || 1,\n          u = g.inverted,\n          k = g.bounds[c ? \"h\" : \"v\"],\n          r = 1 === f.length,\n          x = f[0][d],\n          A = C[0][d],\n          w = !r && f[1][d],\n          m = !r && C[1][d];\n        C = function () {\n          !r && 20 < Math.abs(x - w) && (p = q || Math.abs(A - m) / Math.abs(x - w));\n          t = (l - A) / p + x;\n          v = g[\"plot\" + (c ? \"Width\" : \"Height\")] / p;\n        };\n        C();\n        f = t;\n        if (f < k.min) {\n          f = k.min;\n          var K = !0;\n        } else f + v > k.max && (f = k.max - v, K = !0);\n        K ? (A -= .8 * (A - n[b][0]), r || (m -= .8 * (m - n[b][1])), C()) : n[b] = [A, m];\n        u || (h[b] = t - l, h[e] = v);\n        h = u ? 1 / p : p;\n        y[e] = v;\n        y[b] = f;\n        B[u ? c ? \"scaleY\" : \"scaleX\" : \"scale\" + a] = p;\n        B[\"translate\" + a] = h * l + (A - h * x);\n      },\n      pinch: function (c) {\n        var f = this,\n          t = f.chart,\n          z = f.pinchDown,\n          y = c.touches,\n          h = y.length,\n          n = f.lastValidTouch,\n          q = f.hasZoom,\n          g = f.selectionMarker,\n          b = {},\n          a = 1 === h && (f.inClass(c.target, \"highcharts-tracker\") && t.runTrackerClick || f.runChartClick),\n          d = {};\n        1 < h && (f.initiated = !0);\n        q && f.initiated && !a && c.preventDefault();\n        [].map.call(y, function (a) {\n          return f.normalize(a);\n        });\n        \"touchstart\" === c.type ? ([].forEach.call(y, function (a, b) {\n          z[b] = {\n            chartX: a.chartX,\n            chartY: a.chartY\n          };\n        }), n.x = [z[0].chartX, z[1] && z[1].chartX], n.y = [z[0].chartY, z[1] && z[1].chartY], t.axes.forEach(function (a) {\n          if (a.zoomEnabled) {\n            var b = t.bounds[a.horiz ? \"h\" : \"v\"],\n              d = a.minPixelPadding,\n              e = a.toPixels(Math.min(G(a.options.min, a.dataMin), a.dataMin)),\n              c = a.toPixels(Math.max(G(a.options.max, a.dataMax), a.dataMax)),\n              g = Math.max(e, c);\n            b.min = Math.min(a.pos, Math.min(e, c) - d);\n            b.max = Math.max(a.pos + a.len, g + d);\n          }\n        }), f.res = !0) : f.followTouchMove && 1 === h ? this.runPointActions(f.normalize(c)) : z.length && (g || (f.selectionMarker = g = F({\n          destroy: B,\n          touch: !0\n        }, t.plotBox)), f.pinchTranslate(z, y, b, g, d, n), f.hasPinched = q, f.scaleGroups(b, d), f.res && (f.res = !1, this.reset(!1, 0)));\n      },\n      touch: function (f, v) {\n        var t = this.chart,\n          z;\n        if (t.index !== c.hoverChartIndex) this.onContainerMouseLeave({\n          relatedTarget: !0\n        });\n        c.hoverChartIndex = t.index;\n        if (1 === f.touches.length) {\n          if (f = this.normalize(f), (z = t.isInsidePlot(f.chartX - t.plotLeft, f.chartY - t.plotTop)) && !t.openMenu) {\n            v && this.runPointActions(f);\n            if (\"touchmove\" === f.type) {\n              v = this.pinchDown;\n              var y = v[0] ? 4 <= Math.sqrt(Math.pow(v[0].chartX - f.chartX, 2) + Math.pow(v[0].chartY - f.chartY, 2)) : !1;\n            }\n            G(y, !0) && this.pinch(f);\n          } else v && this.reset();\n        } else 2 === f.touches.length && this.pinch(f);\n      },\n      onContainerTouchStart: function (c) {\n        this.zoomOption(c);\n        this.touch(c, !0);\n      },\n      onContainerTouchMove: function (c) {\n        this.touch(c);\n      },\n      onDocumentTouchEnd: function (f) {\n        z[c.hoverChartIndex] && z[c.hoverChartIndex].pointer.drop(f);\n      }\n    });\n  });\n  M(I, \"parts/MSPointer.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.extend,\n      G = f.objectEach,\n      z = c.addEvent,\n      B = c.charts,\n      t = c.css,\n      v = c.doc,\n      C = c.noop;\n    f = c.Pointer;\n    var H = c.removeEvent,\n      y = c.win,\n      h = c.wrap;\n    if (!c.hasTouch && (y.PointerEvent || y.MSPointerEvent)) {\n      var n = {},\n        q = !!y.PointerEvent,\n        g = function () {\n          var a = [];\n          a.item = function (a) {\n            return this[a];\n          };\n          G(n, function (b) {\n            a.push({\n              pageX: b.pageX,\n              pageY: b.pageY,\n              target: b.target\n            });\n          });\n          return a;\n        },\n        b = function (a, b, e, l) {\n          \"touch\" !== a.pointerType && a.pointerType !== a.MSPOINTER_TYPE_TOUCH || !B[c.hoverChartIndex] || (l(a), l = B[c.hoverChartIndex].pointer, l[b]({\n            type: e,\n            target: a.currentTarget,\n            preventDefault: C,\n            touches: g()\n          }));\n        };\n      F(f.prototype, {\n        onContainerPointerDown: function (a) {\n          b(a, \"onContainerTouchStart\", \"touchstart\", function (a) {\n            n[a.pointerId] = {\n              pageX: a.pageX,\n              pageY: a.pageY,\n              target: a.currentTarget\n            };\n          });\n        },\n        onContainerPointerMove: function (a) {\n          b(a, \"onContainerTouchMove\", \"touchmove\", function (a) {\n            n[a.pointerId] = {\n              pageX: a.pageX,\n              pageY: a.pageY\n            };\n            n[a.pointerId].target || (n[a.pointerId].target = a.currentTarget);\n          });\n        },\n        onDocumentPointerUp: function (a) {\n          b(a, \"onDocumentTouchEnd\", \"touchend\", function (a) {\n            delete n[a.pointerId];\n          });\n        },\n        batchMSEvents: function (a) {\n          a(this.chart.container, q ? \"pointerdown\" : \"MSPointerDown\", this.onContainerPointerDown);\n          a(this.chart.container, q ? \"pointermove\" : \"MSPointerMove\", this.onContainerPointerMove);\n          a(v, q ? \"pointerup\" : \"MSPointerUp\", this.onDocumentPointerUp);\n        }\n      });\n      h(f.prototype, \"init\", function (a, b, e) {\n        a.call(this, b, e);\n        this.hasZoom && t(b.container, {\n          \"-ms-touch-action\": \"none\",\n          \"touch-action\": \"none\"\n        });\n      });\n      h(f.prototype, \"setDOMEvents\", function (a) {\n        a.apply(this);\n        (this.hasZoom || this.followTouchMove) && this.batchMSEvents(z);\n      });\n      h(f.prototype, \"destroy\", function (a) {\n        this.batchMSEvents(H);\n        a.call(this);\n      });\n    }\n  });\n  M(I, \"parts/Legend.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.discardElement,\n      z = f.isNumber,\n      B = f.pick,\n      t = f.setAnimation,\n      v = c.addEvent,\n      C = c.css,\n      H = c.fireEvent;\n    f = c.isFirefox;\n    var y = c.marginNames,\n      h = c.merge,\n      n = c.stableSort,\n      q = c.win,\n      g = c.wrap;\n    c.Legend = function (b, a) {\n      this.init(b, a);\n    };\n    c.Legend.prototype = {\n      init: function (b, a) {\n        this.chart = b;\n        this.setOptions(a);\n        a.enabled && (this.render(), v(this.chart, \"endResize\", function () {\n          this.legend.positionCheckboxes();\n        }), this.proximate ? this.unchartrender = v(this.chart, \"render\", function () {\n          this.legend.proximatePositions();\n          this.legend.positionItems();\n        }) : this.unchartrender && this.unchartrender());\n      },\n      setOptions: function (b) {\n        var a = B(b.padding, 8);\n        this.options = b;\n        this.chart.styledMode || (this.itemStyle = b.itemStyle, this.itemHiddenStyle = h(this.itemStyle, b.itemHiddenStyle));\n        this.itemMarginTop = b.itemMarginTop || 0;\n        this.itemMarginBottom = b.itemMarginBottom || 0;\n        this.padding = a;\n        this.initialItemY = a - 5;\n        this.symbolWidth = B(b.symbolWidth, 16);\n        this.pages = [];\n        this.proximate = \"proximate\" === b.layout && !this.chart.inverted;\n      },\n      update: function (b, a) {\n        var d = this.chart;\n        this.setOptions(h(!0, this.options, b));\n        this.destroy();\n        d.isDirtyLegend = d.isDirtyBox = !0;\n        B(a, !0) && d.redraw();\n        H(this, \"afterUpdate\");\n      },\n      colorizeItem: function (b, a) {\n        b.legendGroup[a ? \"removeClass\" : \"addClass\"](\"highcharts-legend-item-hidden\");\n        if (!this.chart.styledMode) {\n          var d = this.options,\n            e = b.legendItem,\n            c = b.legendLine,\n            g = b.legendSymbol,\n            h = this.itemHiddenStyle.color;\n          d = a ? d.itemStyle.color : h;\n          var f = a ? b.color || h : h,\n            u = b.options && b.options.marker,\n            k = {\n              fill: f\n            };\n          e && e.css({\n            fill: d,\n            color: d\n          });\n          c && c.attr({\n            stroke: f\n          });\n          g && (u && g.isMarker && (k = b.pointAttribs(), a || (k.stroke = k.fill = h)), g.attr(k));\n        }\n        H(this, \"afterColorizeItem\", {\n          item: b,\n          visible: a\n        });\n      },\n      positionItems: function () {\n        this.allItems.forEach(this.positionItem, this);\n        this.chart.isResizing || this.positionCheckboxes();\n      },\n      positionItem: function (b) {\n        var a = this.options,\n          d = a.symbolPadding;\n        a = !a.rtl;\n        var e = b._legendItemPos,\n          c = e[0];\n        e = e[1];\n        var g = b.checkbox;\n        if ((b = b.legendGroup) && b.element) b[F(b.translateY) ? \"animate\" : \"attr\"]({\n          translateX: a ? c : this.legendWidth - c - 2 * d - 4,\n          translateY: e\n        });\n        g && (g.x = c, g.y = e);\n      },\n      destroyItem: function (b) {\n        var a = b.checkbox;\n        [\"legendItem\", \"legendLine\", \"legendSymbol\", \"legendGroup\"].forEach(function (a) {\n          b[a] && (b[a] = b[a].destroy());\n        });\n        a && G(b.checkbox);\n      },\n      destroy: function () {\n        function b(a) {\n          this[a] && (this[a] = this[a].destroy());\n        }\n        this.getAllItems().forEach(function (a) {\n          [\"legendItem\", \"legendGroup\"].forEach(b, a);\n        });\n        \"clipRect up down pager nav box title group\".split(\" \").forEach(b, this);\n        this.display = null;\n      },\n      positionCheckboxes: function () {\n        var b = this.group && this.group.alignAttr,\n          a = this.clipHeight || this.legendHeight,\n          d = this.titleHeight;\n        if (b) {\n          var e = b.translateY;\n          this.allItems.forEach(function (c) {\n            var g = c.checkbox;\n            if (g) {\n              var l = e + d + g.y + (this.scrollOffset || 0) + 3;\n              C(g, {\n                left: b.translateX + c.checkboxOffset + g.x - 20 + \"px\",\n                top: l + \"px\",\n                display: this.proximate || l > e - 6 && l < e + a - 6 ? \"\" : \"none\"\n              });\n            }\n          }, this);\n        }\n      },\n      renderTitle: function () {\n        var b = this.options,\n          a = this.padding,\n          d = b.title,\n          e = 0;\n        d.text && (this.title || (this.title = this.chart.renderer.label(d.text, a - 3, a - 4, null, null, null, b.useHTML, null, \"legend-title\").attr({\n          zIndex: 1\n        }), this.chart.styledMode || this.title.css(d.style), this.title.add(this.group)), d.width || this.title.css({\n          width: this.maxLegendWidth + \"px\"\n        }), b = this.title.getBBox(), e = b.height, this.offsetWidth = b.width, this.contentGroup.attr({\n          translateY: e\n        }));\n        this.titleHeight = e;\n      },\n      setText: function (b) {\n        var a = this.options;\n        b.legendItem.attr({\n          text: a.labelFormat ? c.format(a.labelFormat, b, this.chart.time) : a.labelFormatter.call(b)\n        });\n      },\n      renderItem: function (b) {\n        var a = this.chart,\n          d = a.renderer,\n          e = this.options,\n          c = this.symbolWidth,\n          g = e.symbolPadding,\n          f = this.itemStyle,\n          p = this.itemHiddenStyle,\n          u = \"horizontal\" === e.layout ? B(e.itemDistance, 20) : 0,\n          k = !e.rtl,\n          r = b.legendItem,\n          x = !b.series,\n          A = !x && b.series.drawLegendSymbol ? b.series : b,\n          w = A.options;\n        w = this.createCheckboxForItem && w && w.showCheckbox;\n        u = c + g + u + (w ? 20 : 0);\n        var m = e.useHTML,\n          n = b.options.className;\n        r || (b.legendGroup = d.g(\"legend-item\").addClass(\"highcharts-\" + A.type + \"-series highcharts-color-\" + b.colorIndex + (n ? \" \" + n : \"\") + (x ? \" highcharts-series-\" + b.index : \"\")).attr({\n          zIndex: 1\n        }).add(this.scrollGroup), b.legendItem = r = d.text(\"\", k ? c + g : -g, this.baseline || 0, m), a.styledMode || r.css(h(b.visible ? f : p)), r.attr({\n          align: k ? \"left\" : \"right\",\n          zIndex: 2\n        }).add(b.legendGroup), this.baseline || (this.fontMetrics = d.fontMetrics(a.styledMode ? 12 : f.fontSize, r), this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop, r.attr(\"y\", this.baseline)), this.symbolHeight = e.symbolHeight || this.fontMetrics.f, A.drawLegendSymbol(this, b), this.setItemEvents && this.setItemEvents(b, r, m));\n        w && !b.checkbox && this.createCheckboxForItem(b);\n        this.colorizeItem(b, b.visible);\n        !a.styledMode && f.width || r.css({\n          width: (e.itemWidth || this.widthOption || a.spacingBox.width) - u\n        });\n        this.setText(b);\n        a = r.getBBox();\n        b.itemWidth = b.checkboxOffset = e.itemWidth || b.legendItemWidth || a.width + u;\n        this.maxItemWidth = Math.max(this.maxItemWidth, b.itemWidth);\n        this.totalItemWidth += b.itemWidth;\n        this.itemHeight = b.itemHeight = Math.round(b.legendItemHeight || a.height || this.symbolHeight);\n      },\n      layoutItem: function (b) {\n        var a = this.options,\n          d = this.padding,\n          e = \"horizontal\" === a.layout,\n          c = b.itemHeight,\n          g = this.itemMarginBottom,\n          h = this.itemMarginTop,\n          f = e ? B(a.itemDistance, 20) : 0,\n          u = this.maxLegendWidth;\n        a = a.alignColumns && this.totalItemWidth > u ? this.maxItemWidth : b.itemWidth;\n        e && this.itemX - d + a > u && (this.itemX = d, this.lastLineHeight && (this.itemY += h + this.lastLineHeight + g), this.lastLineHeight = 0);\n        this.lastItemY = h + this.itemY + g;\n        this.lastLineHeight = Math.max(c, this.lastLineHeight);\n        b._legendItemPos = [this.itemX, this.itemY];\n        e ? this.itemX += a : (this.itemY += h + c + g, this.lastLineHeight = c);\n        this.offsetWidth = this.widthOption || Math.max((e ? this.itemX - d - (b.checkbox ? 0 : f) : a) + d, this.offsetWidth);\n      },\n      getAllItems: function () {\n        var b = [];\n        this.chart.series.forEach(function (a) {\n          var d = a && a.options;\n          a && B(d.showInLegend, F(d.linkedTo) ? !1 : void 0, !0) && (b = b.concat(a.legendItems || (\"point\" === d.legendType ? a.data : a)));\n        });\n        H(this, \"afterGetAllItems\", {\n          allItems: b\n        });\n        return b;\n      },\n      getAlignment: function () {\n        var b = this.options;\n        return this.proximate ? b.align.charAt(0) + \"tv\" : b.floating ? \"\" : b.align.charAt(0) + b.verticalAlign.charAt(0) + b.layout.charAt(0);\n      },\n      adjustMargins: function (b, a) {\n        var d = this.chart,\n          e = this.options,\n          c = this.getAlignment();\n        c && [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/].forEach(function (g, l) {\n          g.test(c) && !F(b[l]) && (d[y[l]] = Math.max(d[y[l]], d.legend[(l + 1) % 2 ? \"legendHeight\" : \"legendWidth\"] + [1, -1, -1, 1][l] * e[l % 2 ? \"x\" : \"y\"] + B(e.margin, 12) + a[l] + (d.titleOffset[l] || 0)));\n        });\n      },\n      proximatePositions: function () {\n        var b = this.chart,\n          a = [],\n          d = \"left\" === this.options.align;\n        this.allItems.forEach(function (e) {\n          var g = d;\n          if (e.yAxis && e.points) {\n            e.xAxis.options.reversed && (g = !g);\n            var h = c.find(g ? e.points : e.points.slice(0).reverse(), function (a) {\n              return z(a.plotY);\n            });\n            g = this.itemMarginTop + e.legendItem.getBBox().height + this.itemMarginBottom;\n            var f = e.yAxis.top - b.plotTop;\n            e.visible ? (h = h ? h.plotY : e.yAxis.height, h += f - .3 * g) : h = f + e.yAxis.height;\n            a.push({\n              target: h,\n              size: g,\n              item: e\n            });\n          }\n        }, this);\n        c.distribute(a, b.plotHeight);\n        a.forEach(function (a) {\n          a.item._legendItemPos[1] = b.plotTop - b.spacing[0] + a.pos;\n        });\n      },\n      render: function () {\n        var b = this.chart,\n          a = b.renderer,\n          d = this.group,\n          e,\n          g = this.box,\n          f = this.options,\n          q = this.padding;\n        this.itemX = q;\n        this.itemY = this.initialItemY;\n        this.lastItemY = this.offsetWidth = 0;\n        this.widthOption = c.relativeLength(f.width, b.spacingBox.width - q);\n        var p = b.spacingBox.width - 2 * q - f.x;\n        -1 < [\"rm\", \"lm\"].indexOf(this.getAlignment().substring(0, 2)) && (p /= 2);\n        this.maxLegendWidth = this.widthOption || p;\n        d || (this.group = d = a.g(\"legend\").attr({\n          zIndex: 7\n        }).add(), this.contentGroup = a.g().attr({\n          zIndex: 1\n        }).add(d), this.scrollGroup = a.g().add(this.contentGroup));\n        this.renderTitle();\n        p = this.getAllItems();\n        n(p, function (a, b) {\n          return (a.options && a.options.legendIndex || 0) - (b.options && b.options.legendIndex || 0);\n        });\n        f.reversed && p.reverse();\n        this.allItems = p;\n        this.display = e = !!p.length;\n        this.itemHeight = this.totalItemWidth = this.maxItemWidth = this.lastLineHeight = 0;\n        p.forEach(this.renderItem, this);\n        p.forEach(this.layoutItem, this);\n        p = (this.widthOption || this.offsetWidth) + q;\n        var u = this.lastItemY + this.lastLineHeight + this.titleHeight;\n        u = this.handleOverflow(u);\n        u += q;\n        g || (this.box = g = a.rect().addClass(\"highcharts-legend-box\").attr({\n          r: f.borderRadius\n        }).add(d), g.isNew = !0);\n        b.styledMode || g.attr({\n          stroke: f.borderColor,\n          \"stroke-width\": f.borderWidth || 0,\n          fill: f.backgroundColor || \"none\"\n        }).shadow(f.shadow);\n        0 < p && 0 < u && (g[g.isNew ? \"attr\" : \"animate\"](g.crisp.call({}, {\n          x: 0,\n          y: 0,\n          width: p,\n          height: u\n        }, g.strokeWidth())), g.isNew = !1);\n        g[e ? \"show\" : \"hide\"]();\n        b.styledMode && \"none\" === d.getStyle(\"display\") && (p = u = 0);\n        this.legendWidth = p;\n        this.legendHeight = u;\n        e && (a = b.spacingBox, g = a.y, /(lth|ct|rth)/.test(this.getAlignment()) && 0 < b.titleOffset[0] ? g += b.titleOffset[0] : /(lbh|cb|rbh)/.test(this.getAlignment()) && 0 < b.titleOffset[2] && (g -= b.titleOffset[2]), g !== a.y && (a = h(a, {\n          y: g\n        })), d.align(h(f, {\n          width: p,\n          height: u,\n          verticalAlign: this.proximate ? \"top\" : f.verticalAlign\n        }), !0, a));\n        this.proximate || this.positionItems();\n        H(this, \"afterRender\");\n      },\n      handleOverflow: function (b) {\n        var a = this,\n          d = this.chart,\n          e = d.renderer,\n          c = this.options,\n          g = c.y,\n          h = this.padding;\n        g = d.spacingBox.height + (\"top\" === c.verticalAlign ? -g : g) - h;\n        var f = c.maxHeight,\n          u,\n          k = this.clipRect,\n          r = c.navigation,\n          x = B(r.animation, !0),\n          A = r.arrowSize || 12,\n          w = this.nav,\n          m = this.pages,\n          n,\n          J = this.allItems,\n          q = function (b) {\n            \"number\" === typeof b ? k.attr({\n              height: b\n            }) : k && (a.clipRect = k.destroy(), a.contentGroup.clip());\n            a.contentGroup.div && (a.contentGroup.div.style.clip = b ? \"rect(\" + h + \"px,9999px,\" + (h + b) + \"px,0)\" : \"auto\");\n          },\n          v = function (b) {\n            a[b] = e.circle(0, 0, 1.3 * A).translate(A / 2, A / 2).add(w);\n            d.styledMode || a[b].attr(\"fill\", \"rgba(0,0,0,0.0001)\");\n            return a[b];\n          };\n        \"horizontal\" !== c.layout || \"middle\" === c.verticalAlign || c.floating || (g /= 2);\n        f && (g = Math.min(g, f));\n        m.length = 0;\n        b > g && !1 !== r.enabled ? (this.clipHeight = u = Math.max(g - 20 - this.titleHeight - h, 0), this.currentPage = B(this.currentPage, 1), this.fullHeight = b, J.forEach(function (a, b) {\n          var d = a._legendItemPos[1],\n            e = Math.round(a.legendItem.getBBox().height),\n            c = m.length;\n          if (!c || d - m[c - 1] > u && (n || d) !== m[c - 1]) m.push(n || d), c++;\n          a.pageIx = c - 1;\n          n && (J[b - 1].pageIx = c - 1);\n          b === J.length - 1 && d + e - m[c - 1] > u && d !== n && (m.push(d), a.pageIx = c);\n          d !== n && (n = d);\n        }), k || (k = a.clipRect = e.clipRect(0, h, 9999, 0), a.contentGroup.clip(k)), q(u), w || (this.nav = w = e.g().attr({\n          zIndex: 1\n        }).add(this.group), this.up = e.symbol(\"triangle\", 0, 0, A, A).add(w), v(\"upTracker\").on(\"click\", function () {\n          a.scroll(-1, x);\n        }), this.pager = e.text(\"\", 15, 10).addClass(\"highcharts-legend-navigation\"), d.styledMode || this.pager.css(r.style), this.pager.add(w), this.down = e.symbol(\"triangle-down\", 0, 0, A, A).add(w), v(\"downTracker\").on(\"click\", function () {\n          a.scroll(1, x);\n        })), a.scroll(0), b = g) : w && (q(), this.nav = w.destroy(), this.scrollGroup.attr({\n          translateY: 1\n        }), this.clipHeight = 0);\n        return b;\n      },\n      scroll: function (b, a) {\n        var d = this.pages,\n          e = d.length,\n          c = this.currentPage + b;\n        b = this.clipHeight;\n        var g = this.options.navigation,\n          h = this.pager,\n          f = this.padding;\n        c > e && (c = e);\n        0 < c && (void 0 !== a && t(a, this.chart), this.nav.attr({\n          translateX: f,\n          translateY: b + this.padding + 7 + this.titleHeight,\n          visibility: \"visible\"\n        }), [this.up, this.upTracker].forEach(function (a) {\n          a.attr({\n            \"class\": 1 === c ? \"highcharts-legend-nav-inactive\" : \"highcharts-legend-nav-active\"\n          });\n        }), h.attr({\n          text: c + \"/\" + e\n        }), [this.down, this.downTracker].forEach(function (a) {\n          a.attr({\n            x: 18 + this.pager.getBBox().width,\n            \"class\": c === e ? \"highcharts-legend-nav-inactive\" : \"highcharts-legend-nav-active\"\n          });\n        }, this), this.chart.styledMode || (this.up.attr({\n          fill: 1 === c ? g.inactiveColor : g.activeColor\n        }), this.upTracker.css({\n          cursor: 1 === c ? \"default\" : \"pointer\"\n        }), this.down.attr({\n          fill: c === e ? g.inactiveColor : g.activeColor\n        }), this.downTracker.css({\n          cursor: c === e ? \"default\" : \"pointer\"\n        })), this.scrollOffset = -d[c - 1] + this.initialItemY, this.scrollGroup.animate({\n          translateY: this.scrollOffset\n        }), this.currentPage = c, this.positionCheckboxes());\n      }\n    };\n    c.LegendSymbolMixin = {\n      drawRectangle: function (b, a) {\n        var d = b.symbolHeight,\n          e = b.options.squareSymbol;\n        a.legendSymbol = this.chart.renderer.rect(e ? (b.symbolWidth - d) / 2 : 0, b.baseline - d + 1, e ? d : b.symbolWidth, d, B(b.options.symbolRadius, d / 2)).addClass(\"highcharts-point\").attr({\n          zIndex: 3\n        }).add(a.legendGroup);\n      },\n      drawLineMarker: function (b) {\n        var a = this.options,\n          d = a.marker,\n          e = b.symbolWidth,\n          c = b.symbolHeight,\n          g = c / 2,\n          f = this.chart.renderer,\n          p = this.legendGroup;\n        b = b.baseline - Math.round(.3 * b.fontMetrics.b);\n        var u = {};\n        this.chart.styledMode || (u = {\n          \"stroke-width\": a.lineWidth || 0\n        }, a.dashStyle && (u.dashstyle = a.dashStyle));\n        this.legendLine = f.path([\"M\", 0, b, \"L\", e, b]).addClass(\"highcharts-graph\").attr(u).add(p);\n        d && !1 !== d.enabled && e && (a = Math.min(B(d.radius, g), g), 0 === this.symbol.indexOf(\"url\") && (d = h(d, {\n          width: c,\n          height: c\n        }), a = 0), this.legendSymbol = d = f.symbol(this.symbol, e / 2 - a, b - a, 2 * a, 2 * a, d).addClass(\"highcharts-point\").add(p), d.isMarker = !0);\n      }\n    };\n    (/Trident\\/7\\.0/.test(q.navigator && q.navigator.userAgent) || f) && g(c.Legend.prototype, \"positionItem\", function (b, a) {\n      var d = this,\n        e = function () {\n          a._legendItemPos && b.call(d, a);\n        };\n      e();\n      d.bubbleLegend || setTimeout(e);\n    });\n  });\n  M(I, \"parts/Chart.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.attr,\n      G = f.defined,\n      z = f.discardElement,\n      B = f.erase,\n      t = f.extend,\n      v = f.isArray,\n      C = f.isNumber,\n      H = f.isObject,\n      y = f.isString,\n      h = f.objectEach,\n      n = f.pick,\n      q = f.pInt,\n      g = f.setAnimation,\n      b = f.splat,\n      a = f.syncTimeout,\n      d = c.addEvent,\n      e = c.animate,\n      l = c.animObject,\n      L = c.doc,\n      E = c.Axis,\n      p = c.createElement,\n      u = c.defaultOptions,\n      k = c.charts,\n      r = c.css,\n      x = c.find,\n      A = c.fireEvent,\n      w = c.Legend,\n      m = c.marginNames,\n      K = c.merge,\n      J = c.Pointer,\n      U = c.removeEvent,\n      S = c.seriesTypes,\n      Q = c.win,\n      O = c.Chart = function () {\n        this.getArgs.apply(this, arguments);\n      };\n    c.chart = function (a, b, d) {\n      return new O(a, b, d);\n    };\n    t(O.prototype, {\n      callbacks: [],\n      getArgs: function () {\n        var a = [].slice.call(arguments);\n        if (y(a[0]) || a[0].nodeName) this.renderTo = a.shift();\n        this.init(a[0], a[1]);\n      },\n      init: function (a, b) {\n        var e,\n          g = a.series,\n          m = a.plotOptions || {};\n        A(this, \"init\", {\n          args: arguments\n        }, function () {\n          a.series = null;\n          e = K(u, a);\n          h(e.plotOptions, function (a, b) {\n            H(a) && (a.tooltip = m[b] && K(m[b].tooltip) || void 0);\n          });\n          e.tooltip.userOptions = a.chart && a.chart.forExport && a.tooltip.userOptions || a.tooltip;\n          e.series = a.series = g;\n          this.userOptions = a;\n          var r = e.chart,\n            l = r.events;\n          this.margin = [];\n          this.spacing = [];\n          this.bounds = {\n            h: {},\n            v: {}\n          };\n          this.labelCollectors = [];\n          this.callback = b;\n          this.isResizing = 0;\n          this.options = e;\n          this.axes = [];\n          this.series = [];\n          this.time = a.time && Object.keys(a.time).length ? new c.Time(a.time) : c.time;\n          this.styledMode = r.styledMode;\n          this.hasCartesianSeries = r.showAxes;\n          var f = this;\n          f.index = k.length;\n          k.push(f);\n          c.chartCount++;\n          l && h(l, function (a, b) {\n            c.isFunction(a) && d(f, b, a);\n          });\n          f.xAxis = [];\n          f.yAxis = [];\n          f.pointCount = f.colorCounter = f.symbolCounter = 0;\n          A(f, \"afterInit\");\n          f.firstRender();\n        });\n      },\n      initSeries: function (a) {\n        var b = this.options.chart;\n        b = a.type || b.type || b.defaultSeriesType;\n        var d = S[b];\n        d || c.error(17, !0, this, {\n          missingModuleFor: b\n        });\n        b = new d();\n        b.init(this, a);\n        return b;\n      },\n      orderSeries: function (a) {\n        var b = this.series;\n        for (a = a || 0; a < b.length; a++) b[a] && (b[a].index = a, b[a].name = b[a].getName());\n      },\n      isInsidePlot: function (a, b, d) {\n        var e = d ? b : a;\n        a = d ? a : b;\n        return 0 <= e && e <= this.plotWidth && 0 <= a && a <= this.plotHeight;\n      },\n      redraw: function (a) {\n        A(this, \"beforeRedraw\");\n        var b = this.axes,\n          d = this.series,\n          e = this.pointer,\n          c = this.legend,\n          k = this.userOptions.legend,\n          m = this.isDirtyLegend,\n          r = this.hasCartesianSeries,\n          h = this.isDirtyBox,\n          l = this.renderer,\n          f = l.isHidden(),\n          x = [];\n        this.setResponsive && this.setResponsive(!1);\n        g(a, this);\n        f && this.temporaryDisplay();\n        this.layOutTitles();\n        for (a = d.length; a--;) {\n          var w = d[a];\n          if (w.options.stacking) {\n            var p = !0;\n            if (w.isDirty) {\n              var u = !0;\n              break;\n            }\n          }\n        }\n        if (u) for (a = d.length; a--;) w = d[a], w.options.stacking && (w.isDirty = !0);\n        d.forEach(function (a) {\n          a.isDirty && (\"point\" === a.options.legendType ? (a.updateTotals && a.updateTotals(), m = !0) : k && (k.labelFormatter || k.labelFormat) && (m = !0));\n          a.isDirtyData && A(a, \"updatedData\");\n        });\n        m && c && c.options.enabled && (c.render(), this.isDirtyLegend = !1);\n        p && this.getStacks();\n        r && b.forEach(function (a) {\n          a.updateNames();\n          a.setScale();\n        });\n        this.getMargins();\n        r && (b.forEach(function (a) {\n          a.isDirty && (h = !0);\n        }), b.forEach(function (a) {\n          var b = a.min + \",\" + a.max;\n          a.extKey !== b && (a.extKey = b, x.push(function () {\n            A(a, \"afterSetExtremes\", t(a.eventArgs, a.getExtremes()));\n            delete a.eventArgs;\n          }));\n          (h || p) && a.redraw();\n        }));\n        h && this.drawChartBox();\n        A(this, \"predraw\");\n        d.forEach(function (a) {\n          (h || a.isDirty) && a.visible && a.redraw();\n          a.isDirtyData = !1;\n        });\n        e && e.reset(!0);\n        l.draw();\n        A(this, \"redraw\");\n        A(this, \"render\");\n        f && this.temporaryDisplay(!0);\n        x.forEach(function (a) {\n          a.call();\n        });\n      },\n      get: function (a) {\n        function b(b) {\n          return b.id === a || b.options && b.options.id === a;\n        }\n        var d = this.series,\n          e;\n        var c = x(this.axes, b) || x(this.series, b);\n        for (e = 0; !c && e < d.length; e++) c = x(d[e].points || [], b);\n        return c;\n      },\n      getAxes: function () {\n        var a = this,\n          d = this.options,\n          e = d.xAxis = b(d.xAxis || {});\n        d = d.yAxis = b(d.yAxis || {});\n        A(this, \"getAxes\");\n        e.forEach(function (a, b) {\n          a.index = b;\n          a.isX = !0;\n        });\n        d.forEach(function (a, b) {\n          a.index = b;\n        });\n        e.concat(d).forEach(function (b) {\n          new E(a, b);\n        });\n        A(this, \"afterGetAxes\");\n      },\n      getSelectedPoints: function () {\n        var a = [];\n        this.series.forEach(function (b) {\n          a = a.concat((b[b.hasGroupedData ? \"points\" : \"data\"] || []).filter(function (a) {\n            return n(a.selectedStaging, a.selected);\n          }));\n        });\n        return a;\n      },\n      getSelectedSeries: function () {\n        return this.series.filter(function (a) {\n          return a.selected;\n        });\n      },\n      setTitle: function (a, b, d) {\n        this.applyDescription(\"title\", a);\n        this.applyDescription(\"subtitle\", b);\n        this.applyDescription(\"caption\", void 0);\n        this.layOutTitles(d);\n      },\n      applyDescription: function (a, b) {\n        var d = this,\n          e = \"title\" === a ? {\n            color: \"#333333\",\n            fontSize: this.options.isStock ? \"16px\" : \"18px\"\n          } : {\n            color: \"#666666\"\n          };\n        e = this.options[a] = K(!this.styledMode && {\n          style: e\n        }, this.options[a], b);\n        var c = this[a];\n        c && b && (this[a] = c = c.destroy());\n        e && !c && (c = this.renderer.text(e.text, 0, 0, e.useHTML).attr({\n          align: e.align,\n          \"class\": \"highcharts-\" + a,\n          zIndex: e.zIndex || 4\n        }).add(), c.update = function (b) {\n          d[{\n            title: \"setTitle\",\n            subtitle: \"setSubtitle\",\n            caption: \"setCaption\"\n          }[a]](b);\n        }, this.styledMode || c.css(e.style), this[a] = c);\n      },\n      layOutTitles: function (a) {\n        var b = [0, 0, 0],\n          d = this.renderer,\n          e = this.spacingBox;\n        [\"title\", \"subtitle\", \"caption\"].forEach(function (a) {\n          var c = this[a],\n            k = this.options[a],\n            g = k.verticalAlign || \"top\";\n          a = \"title\" === a ? -3 : \"top\" === g ? b[0] + 2 : 0;\n          if (c) {\n            if (!this.styledMode) var m = k.style.fontSize;\n            m = d.fontMetrics(m, c).b;\n            c.css({\n              width: (k.width || e.width + (k.widthAdjust || 0)) + \"px\"\n            });\n            var r = Math.round(c.getBBox(k.useHTML).height);\n            c.align(t({\n              y: \"bottom\" === g ? m : a + m,\n              height: r\n            }, k), !1, \"spacingBox\");\n            k.floating || (\"top\" === g ? b[0] = Math.ceil(b[0] + r) : \"bottom\" === g && (b[2] = Math.ceil(b[2] + r)));\n          }\n        }, this);\n        b[0] && \"top\" === (this.options.title.verticalAlign || \"top\") && (b[0] += this.options.title.margin);\n        b[2] && \"bottom\" === this.options.caption.verticalAlign && (b[2] += this.options.caption.margin);\n        var c = !this.titleOffset || this.titleOffset.join(\",\") !== b.join(\",\");\n        this.titleOffset = b;\n        A(this, \"afterLayOutTitles\");\n        !this.isDirtyBox && c && (this.isDirtyBox = this.isDirtyLegend = c, this.hasRendered && n(a, !0) && this.isDirtyBox && this.redraw());\n      },\n      getChartSize: function () {\n        var a = this.options.chart,\n          b = a.width;\n        a = a.height;\n        var d = this.renderTo;\n        G(b) || (this.containerWidth = c.getStyle(d, \"width\"));\n        G(a) || (this.containerHeight = c.getStyle(d, \"height\"));\n        this.chartWidth = Math.max(0, b || this.containerWidth || 600);\n        this.chartHeight = Math.max(0, c.relativeLength(a, this.chartWidth) || (1 < this.containerHeight ? this.containerHeight : 400));\n      },\n      temporaryDisplay: function (a) {\n        var b = this.renderTo;\n        if (a) for (; b && b.style;) b.hcOrigStyle && (c.css(b, b.hcOrigStyle), delete b.hcOrigStyle), b.hcOrigDetached && (L.body.removeChild(b), b.hcOrigDetached = !1), b = b.parentNode;else for (; b && b.style;) {\n          L.body.contains(b) || b.parentNode || (b.hcOrigDetached = !0, L.body.appendChild(b));\n          if (\"none\" === c.getStyle(b, \"display\", !1) || b.hcOricDetached) b.hcOrigStyle = {\n            display: b.style.display,\n            height: b.style.height,\n            overflow: b.style.overflow\n          }, a = {\n            display: \"block\",\n            overflow: \"hidden\"\n          }, b !== this.renderTo && (a.height = 0), c.css(b, a), b.offsetWidth || b.style.setProperty(\"display\", \"block\", \"important\");\n          b = b.parentNode;\n          if (b === L.body) break;\n        }\n      },\n      setClassName: function (a) {\n        this.container.className = \"highcharts-container \" + (a || \"\");\n      },\n      getContainer: function () {\n        var a = this.options,\n          b = a.chart;\n        var d = this.renderTo;\n        var e = c.uniqueKey(),\n          g,\n          m;\n        d || (this.renderTo = d = b.renderTo);\n        y(d) && (this.renderTo = d = L.getElementById(d));\n        d || c.error(13, !0, this);\n        var h = q(F(d, \"data-highcharts-chart\"));\n        C(h) && k[h] && k[h].hasRendered && k[h].destroy();\n        F(d, \"data-highcharts-chart\", this.index);\n        d.innerHTML = \"\";\n        b.skipClone || d.offsetWidth || this.temporaryDisplay();\n        this.getChartSize();\n        h = this.chartWidth;\n        var l = this.chartHeight;\n        r(d, {\n          overflow: \"hidden\"\n        });\n        this.styledMode || (g = t({\n          position: \"relative\",\n          overflow: \"hidden\",\n          width: h + \"px\",\n          height: l + \"px\",\n          textAlign: \"left\",\n          lineHeight: \"normal\",\n          zIndex: 0,\n          \"-webkit-tap-highlight-color\": \"rgba(0,0,0,0)\"\n        }, b.style));\n        this.container = d = p(\"div\", {\n          id: e\n        }, g, d);\n        this._cursor = d.style.cursor;\n        this.renderer = new (c[b.renderer] || c.Renderer)(d, h, l, null, b.forExport, a.exporting && a.exporting.allowHTML, this.styledMode);\n        this.setClassName(b.className);\n        if (this.styledMode) for (m in a.defs) this.renderer.definition(a.defs[m]);else this.renderer.setStyle(b.style);\n        this.renderer.chartIndex = this.index;\n        A(this, \"afterGetContainer\");\n      },\n      getMargins: function (a) {\n        var b = this.spacing,\n          d = this.margin,\n          e = this.titleOffset;\n        this.resetMargins();\n        e[0] && !G(d[0]) && (this.plotTop = Math.max(this.plotTop, e[0] + b[0]));\n        e[2] && !G(d[2]) && (this.marginBottom = Math.max(this.marginBottom, e[2] + b[2]));\n        this.legend && this.legend.display && this.legend.adjustMargins(d, b);\n        A(this, \"getMargins\");\n        a || this.getAxisMargins();\n      },\n      getAxisMargins: function () {\n        var a = this,\n          b = a.axisOffset = [0, 0, 0, 0],\n          d = a.colorAxis,\n          e = a.margin,\n          c = function (a) {\n            a.forEach(function (a) {\n              a.visible && a.getOffset();\n            });\n          };\n        a.hasCartesianSeries ? c(a.axes) : d && d.length && c(d);\n        m.forEach(function (d, c) {\n          G(e[c]) || (a[d] += b[c]);\n        });\n        a.setChartSize();\n      },\n      reflow: function (b) {\n        var d = this,\n          e = d.options.chart,\n          k = d.renderTo,\n          g = G(e.width) && G(e.height),\n          m = e.width || c.getStyle(k, \"width\");\n        e = e.height || c.getStyle(k, \"height\");\n        k = b ? b.target : Q;\n        if (!g && !d.isPrinting && m && e && (k === Q || k === L)) {\n          if (m !== d.containerWidth || e !== d.containerHeight) c.clearTimeout(d.reflowTimeout), d.reflowTimeout = a(function () {\n            d.container && d.setSize(void 0, void 0, !1);\n          }, b ? 100 : 0);\n          d.containerWidth = m;\n          d.containerHeight = e;\n        }\n      },\n      setReflow: function (a) {\n        var b = this;\n        !1 === a || this.unbindReflow ? !1 === a && this.unbindReflow && (this.unbindReflow = this.unbindReflow()) : (this.unbindReflow = d(Q, \"resize\", function (a) {\n          b.options && b.reflow(a);\n        }), d(this, \"destroy\", this.unbindReflow));\n      },\n      setSize: function (b, d, c) {\n        var k = this,\n          m = k.renderer;\n        k.isResizing += 1;\n        g(c, k);\n        k.oldChartHeight = k.chartHeight;\n        k.oldChartWidth = k.chartWidth;\n        void 0 !== b && (k.options.chart.width = b);\n        void 0 !== d && (k.options.chart.height = d);\n        k.getChartSize();\n        if (!k.styledMode) {\n          var h = m.globalAnimation;\n          (h ? e : r)(k.container, {\n            width: k.chartWidth + \"px\",\n            height: k.chartHeight + \"px\"\n          }, h);\n        }\n        k.setChartSize(!0);\n        m.setSize(k.chartWidth, k.chartHeight, c);\n        k.axes.forEach(function (a) {\n          a.isDirty = !0;\n          a.setScale();\n        });\n        k.isDirtyLegend = !0;\n        k.isDirtyBox = !0;\n        k.layOutTitles();\n        k.getMargins();\n        k.redraw(c);\n        k.oldChartHeight = null;\n        A(k, \"resize\");\n        a(function () {\n          k && A(k, \"endResize\", null, function () {\n            --k.isResizing;\n          });\n        }, l(h).duration || 0);\n      },\n      setChartSize: function (a) {\n        var b = this.inverted,\n          d = this.renderer,\n          e = this.chartWidth,\n          c = this.chartHeight,\n          k = this.options.chart,\n          g = this.spacing,\n          m = this.clipOffset,\n          r,\n          h,\n          l,\n          f;\n        this.plotLeft = r = Math.round(this.plotLeft);\n        this.plotTop = h = Math.round(this.plotTop);\n        this.plotWidth = l = Math.max(0, Math.round(e - r - this.marginRight));\n        this.plotHeight = f = Math.max(0, Math.round(c - h - this.marginBottom));\n        this.plotSizeX = b ? f : l;\n        this.plotSizeY = b ? l : f;\n        this.plotBorderWidth = k.plotBorderWidth || 0;\n        this.spacingBox = d.spacingBox = {\n          x: g[3],\n          y: g[0],\n          width: e - g[3] - g[1],\n          height: c - g[0] - g[2]\n        };\n        this.plotBox = d.plotBox = {\n          x: r,\n          y: h,\n          width: l,\n          height: f\n        };\n        e = 2 * Math.floor(this.plotBorderWidth / 2);\n        b = Math.ceil(Math.max(e, m[3]) / 2);\n        d = Math.ceil(Math.max(e, m[0]) / 2);\n        this.clipBox = {\n          x: b,\n          y: d,\n          width: Math.floor(this.plotSizeX - Math.max(e, m[1]) / 2 - b),\n          height: Math.max(0, Math.floor(this.plotSizeY - Math.max(e, m[2]) / 2 - d))\n        };\n        a || this.axes.forEach(function (a) {\n          a.setAxisSize();\n          a.setAxisTranslation();\n        });\n        A(this, \"afterSetChartSize\", {\n          skipAxes: a\n        });\n      },\n      resetMargins: function () {\n        A(this, \"resetMargins\");\n        var a = this,\n          b = a.options.chart;\n        [\"margin\", \"spacing\"].forEach(function (d) {\n          var e = b[d],\n            c = H(e) ? e : [e, e, e, e];\n          [\"Top\", \"Right\", \"Bottom\", \"Left\"].forEach(function (e, k) {\n            a[d][k] = n(b[d + e], c[k]);\n          });\n        });\n        m.forEach(function (b, d) {\n          a[b] = n(a.margin[d], a.spacing[d]);\n        });\n        a.axisOffset = [0, 0, 0, 0];\n        a.clipOffset = [0, 0, 0, 0];\n      },\n      drawChartBox: function () {\n        var a = this.options.chart,\n          b = this.renderer,\n          d = this.chartWidth,\n          e = this.chartHeight,\n          c = this.chartBackground,\n          k = this.plotBackground,\n          g = this.plotBorder,\n          m = this.styledMode,\n          r = this.plotBGImage,\n          h = a.backgroundColor,\n          l = a.plotBackgroundColor,\n          f = a.plotBackgroundImage,\n          x,\n          w = this.plotLeft,\n          p = this.plotTop,\n          u = this.plotWidth,\n          n = this.plotHeight,\n          J = this.plotBox,\n          K = this.clipRect,\n          q = this.clipBox,\n          v = \"animate\";\n        c || (this.chartBackground = c = b.rect().addClass(\"highcharts-background\").add(), v = \"attr\");\n        if (m) var y = x = c.strokeWidth();else {\n          y = a.borderWidth || 0;\n          x = y + (a.shadow ? 8 : 0);\n          h = {\n            fill: h || \"none\"\n          };\n          if (y || c[\"stroke-width\"]) h.stroke = a.borderColor, h[\"stroke-width\"] = y;\n          c.attr(h).shadow(a.shadow);\n        }\n        c[v]({\n          x: x / 2,\n          y: x / 2,\n          width: d - x - y % 2,\n          height: e - x - y % 2,\n          r: a.borderRadius\n        });\n        v = \"animate\";\n        k || (v = \"attr\", this.plotBackground = k = b.rect().addClass(\"highcharts-plot-background\").add());\n        k[v](J);\n        m || (k.attr({\n          fill: l || \"none\"\n        }).shadow(a.plotShadow), f && (r ? r.animate(J) : this.plotBGImage = b.image(f, w, p, u, n).add()));\n        K ? K.animate({\n          width: q.width,\n          height: q.height\n        }) : this.clipRect = b.clipRect(q);\n        v = \"animate\";\n        g || (v = \"attr\", this.plotBorder = g = b.rect().addClass(\"highcharts-plot-border\").attr({\n          zIndex: 1\n        }).add());\n        m || g.attr({\n          stroke: a.plotBorderColor,\n          \"stroke-width\": a.plotBorderWidth || 0,\n          fill: \"none\"\n        });\n        g[v](g.crisp({\n          x: w,\n          y: p,\n          width: u,\n          height: n\n        }, -g.strokeWidth()));\n        this.isDirtyBox = !1;\n        A(this, \"afterDrawChartBox\");\n      },\n      propFromSeries: function () {\n        var a = this,\n          b = a.options.chart,\n          d,\n          e = a.options.series,\n          c,\n          k;\n        [\"inverted\", \"angular\", \"polar\"].forEach(function (g) {\n          d = S[b.type || b.defaultSeriesType];\n          k = b[g] || d && d.prototype[g];\n          for (c = e && e.length; !k && c--;) (d = S[e[c].type]) && d.prototype[g] && (k = !0);\n          a[g] = k;\n        });\n      },\n      linkSeries: function () {\n        var a = this,\n          b = a.series;\n        b.forEach(function (a) {\n          a.linkedSeries.length = 0;\n        });\n        b.forEach(function (b) {\n          var d = b.options.linkedTo;\n          y(d) && (d = \":previous\" === d ? a.series[b.index - 1] : a.get(d)) && d.linkedParent !== b && (d.linkedSeries.push(b), b.linkedParent = d, b.visible = n(b.options.visible, d.options.visible, b.visible));\n        });\n        A(this, \"afterLinkSeries\");\n      },\n      renderSeries: function () {\n        this.series.forEach(function (a) {\n          a.translate();\n          a.render();\n        });\n      },\n      renderLabels: function () {\n        var a = this,\n          b = a.options.labels;\n        b.items && b.items.forEach(function (d) {\n          var e = t(b.style, d.style),\n            c = q(e.left) + a.plotLeft,\n            k = q(e.top) + a.plotTop + 12;\n          delete e.left;\n          delete e.top;\n          a.renderer.text(d.html, c, k).attr({\n            zIndex: 2\n          }).css(e).add();\n        });\n      },\n      render: function () {\n        var a = this.axes,\n          b = this.colorAxis,\n          d = this.renderer,\n          e = this.options,\n          c = 0,\n          k = function (a) {\n            a.forEach(function (a) {\n              a.visible && a.render();\n            });\n          };\n        this.setTitle();\n        this.legend = new w(this, e.legend);\n        this.getStacks && this.getStacks();\n        this.getMargins(!0);\n        this.setChartSize();\n        e = this.plotWidth;\n        a.some(function (a) {\n          if (a.horiz && a.visible && a.options.labels.enabled && a.series.length) return c = 21, !0;\n        });\n        var g = this.plotHeight = Math.max(this.plotHeight - c, 0);\n        a.forEach(function (a) {\n          a.setScale();\n        });\n        this.getAxisMargins();\n        var m = 1.1 < e / this.plotWidth;\n        var r = 1.05 < g / this.plotHeight;\n        if (m || r) a.forEach(function (a) {\n          (a.horiz && m || !a.horiz && r) && a.setTickInterval(!0);\n        }), this.getMargins();\n        this.drawChartBox();\n        this.hasCartesianSeries ? k(a) : b && b.length && k(b);\n        this.seriesGroup || (this.seriesGroup = d.g(\"series-group\").attr({\n          zIndex: 3\n        }).add());\n        this.renderSeries();\n        this.renderLabels();\n        this.addCredits();\n        this.setResponsive && this.setResponsive();\n        this.updateContainerScaling();\n        this.hasRendered = !0;\n      },\n      addCredits: function (a) {\n        var b = this;\n        a = K(!0, this.options.credits, a);\n        a.enabled && !this.credits && (this.credits = this.renderer.text(a.text + (this.mapCredits || \"\"), 0, 0).addClass(\"highcharts-credits\").on(\"click\", function () {\n          a.href && (Q.location.href = a.href);\n        }).attr({\n          align: a.position.align,\n          zIndex: 8\n        }), b.styledMode || this.credits.css(a.style), this.credits.add().align(a.position), this.credits.update = function (a) {\n          b.credits = b.credits.destroy();\n          b.addCredits(a);\n        });\n      },\n      updateContainerScaling: function () {\n        var a = this.container;\n        if (a.offsetWidth && a.offsetHeight && a.getBoundingClientRect) {\n          var b = a.getBoundingClientRect(),\n            d = b.width / a.offsetWidth;\n          a = b.height / a.offsetHeight;\n          1 !== d || 1 !== a ? this.containerScaling = {\n            scaleX: d,\n            scaleY: a\n          } : delete this.containerScaling;\n        }\n      },\n      destroy: function () {\n        var a = this,\n          b = a.axes,\n          d = a.series,\n          e = a.container,\n          g,\n          m = e && e.parentNode;\n        A(a, \"destroy\");\n        a.renderer.forExport ? B(k, a) : k[a.index] = void 0;\n        c.chartCount--;\n        a.renderTo.removeAttribute(\"data-highcharts-chart\");\n        U(a);\n        for (g = b.length; g--;) b[g] = b[g].destroy();\n        this.scroller && this.scroller.destroy && this.scroller.destroy();\n        for (g = d.length; g--;) d[g] = d[g].destroy();\n        \"title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer\".split(\" \").forEach(function (b) {\n          var d = a[b];\n          d && d.destroy && (a[b] = d.destroy());\n        });\n        e && (e.innerHTML = \"\", U(e), m && z(e));\n        h(a, function (b, d) {\n          delete a[d];\n        });\n      },\n      firstRender: function () {\n        var a = this,\n          b = a.options;\n        if (!a.isReadyToRender || a.isReadyToRender()) {\n          a.getContainer();\n          a.resetMargins();\n          a.setChartSize();\n          a.propFromSeries();\n          a.getAxes();\n          (v(b.series) ? b.series : []).forEach(function (b) {\n            a.initSeries(b);\n          });\n          a.linkSeries();\n          A(a, \"beforeRender\");\n          J && (a.pointer = new J(a, b));\n          a.render();\n          if (!a.renderer.imgCount && a.onload) a.onload();\n          a.temporaryDisplay(!0);\n        }\n      },\n      onload: function () {\n        this.callbacks.concat([this.callback]).forEach(function (a) {\n          a && void 0 !== this.index && a.apply(this, [this]);\n        }, this);\n        A(this, \"load\");\n        A(this, \"render\");\n        G(this.index) && this.setReflow(this.options.chart.reflow);\n        this.onload = null;\n      }\n    });\n  });\n  M(I, \"parts/ScrollablePlotArea.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.pick,\n      G = c.addEvent;\n    f = c.Chart;\n    \"\";\n    G(f, \"afterSetChartSize\", function (f) {\n      var z = this.options.chart.scrollablePlotArea,\n        t = z && z.minWidth;\n      z = z && z.minHeight;\n      if (!this.renderer.forExport) {\n        if (t) {\n          if (this.scrollablePixelsX = t = Math.max(0, t - this.chartWidth)) {\n            this.plotWidth += t;\n            this.inverted ? (this.clipBox.height += t, this.plotBox.height += t) : (this.clipBox.width += t, this.plotBox.width += t);\n            var v = {\n              1: {\n                name: \"right\",\n                value: t\n              }\n            };\n          }\n        } else z && (this.scrollablePixelsY = t = Math.max(0, z - this.chartHeight)) && (this.plotHeight += t, this.inverted ? (this.clipBox.width += t, this.plotBox.width += t) : (this.clipBox.height += t, this.plotBox.height += t), v = {\n          2: {\n            name: \"bottom\",\n            value: t\n          }\n        });\n        v && !f.skipAxes && this.axes.forEach(function (f) {\n          v[f.side] ? f.getPlotLinePath = function () {\n            var t = v[f.side].name,\n              y = this[t];\n            this[t] = y - v[f.side].value;\n            var h = c.Axis.prototype.getPlotLinePath.apply(this, arguments);\n            this[t] = y;\n            return h;\n          } : (f.setAxisSize(), f.setAxisTranslation());\n        });\n      }\n    });\n    G(f, \"render\", function () {\n      this.scrollablePixelsX || this.scrollablePixelsY ? (this.setUpScrolling && this.setUpScrolling(), this.applyFixed()) : this.fixedDiv && this.applyFixed();\n    });\n    f.prototype.setUpScrolling = function () {\n      var f = {\n        WebkitOverflowScrolling: \"touch\",\n        overflowX: \"hidden\",\n        overflowY: \"hidden\"\n      };\n      this.scrollablePixelsX && (f.overflowX = \"auto\");\n      this.scrollablePixelsY && (f.overflowY = \"auto\");\n      this.scrollingContainer = c.createElement(\"div\", {\n        className: \"highcharts-scrolling\"\n      }, f, this.renderTo);\n      this.innerContainer = c.createElement(\"div\", {\n        className: \"highcharts-inner-container\"\n      }, null, this.scrollingContainer);\n      this.innerContainer.appendChild(this.container);\n      this.setUpScrolling = null;\n    };\n    f.prototype.moveFixedElements = function () {\n      var c = this.container,\n        f = this.fixedRenderer,\n        t = \".highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-legend-checkbox .highcharts-navigator-series .highcharts-navigator-xaxis .highcharts-navigator-yaxis .highcharts-navigator .highcharts-reset-zoom .highcharts-scrollbar .highcharts-subtitle .highcharts-title\".split(\" \"),\n        v;\n      this.scrollablePixelsX && !this.inverted ? v = \".highcharts-yaxis\" : this.scrollablePixelsX && this.inverted ? v = \".highcharts-xaxis\" : this.scrollablePixelsY && !this.inverted ? v = \".highcharts-xaxis\" : this.scrollablePixelsY && this.inverted && (v = \".highcharts-yaxis\");\n      t.push(v, v + \"-labels\");\n      t.forEach(function (v) {\n        [].forEach.call(c.querySelectorAll(v), function (c) {\n          (c.namespaceURI === f.SVG_NS ? f.box : f.box.parentNode).appendChild(c);\n          c.style.pointerEvents = \"auto\";\n        });\n      });\n    };\n    f.prototype.applyFixed = function () {\n      var f,\n        B = !this.fixedDiv,\n        t = this.options.chart.scrollablePlotArea;\n      B ? (this.fixedDiv = c.createElement(\"div\", {\n        className: \"highcharts-fixed\"\n      }, {\n        position: \"absolute\",\n        overflow: \"hidden\",\n        pointerEvents: \"none\",\n        zIndex: 2\n      }, null, !0), this.renderTo.insertBefore(this.fixedDiv, this.renderTo.firstChild), this.renderTo.style.overflow = \"visible\", this.fixedRenderer = f = new c.Renderer(this.fixedDiv, this.chartWidth, this.chartHeight), this.scrollableMask = f.path().attr({\n        fill: c.color(this.options.chart.backgroundColor || \"#fff\").setOpacity(F(t.opacity, .85)).get(),\n        zIndex: -1\n      }).addClass(\"highcharts-scrollable-mask\").add(), this.moveFixedElements(), G(this, \"afterShowResetZoom\", this.moveFixedElements), G(this, \"afterLayOutTitles\", this.moveFixedElements)) : this.fixedRenderer.setSize(this.chartWidth, this.chartHeight);\n      f = this.chartWidth + (this.scrollablePixelsX || 0);\n      var v = this.chartHeight + (this.scrollablePixelsY || 0);\n      c.stop(this.container);\n      this.container.style.width = f + \"px\";\n      this.container.style.height = v + \"px\";\n      this.renderer.boxWrapper.attr({\n        width: f,\n        height: v,\n        viewBox: [0, 0, f, v].join(\" \")\n      });\n      this.chartBackground.attr({\n        width: f,\n        height: v\n      });\n      this.scrollablePixelsY && (this.scrollingContainer.style.height = this.chartHeight + \"px\");\n      B && (t.scrollPositionX && (this.scrollingContainer.scrollLeft = this.scrollablePixelsX * t.scrollPositionX), t.scrollPositionY && (this.scrollingContainer.scrollTop = this.scrollablePixelsY * t.scrollPositionY));\n      v = this.axisOffset;\n      B = this.plotTop - v[0] - 1;\n      t = this.plotLeft - v[3] - 1;\n      f = this.plotTop + this.plotHeight + v[2] + 1;\n      v = this.plotLeft + this.plotWidth + v[1] + 1;\n      var C = this.plotLeft + this.plotWidth - (this.scrollablePixelsX || 0),\n        H = this.plotTop + this.plotHeight - (this.scrollablePixelsY || 0);\n      B = this.scrollablePixelsX ? [\"M\", 0, B, \"L\", this.plotLeft - 1, B, \"L\", this.plotLeft - 1, f, \"L\", 0, f, \"Z\", \"M\", C, B, \"L\", this.chartWidth, B, \"L\", this.chartWidth, f, \"L\", C, f, \"Z\"] : this.scrollablePixelsY ? [\"M\", t, 0, \"L\", t, this.plotTop - 1, \"L\", v, this.plotTop - 1, \"L\", v, 0, \"Z\", \"M\", t, H, \"L\", t, this.chartHeight, \"L\", v, this.chartHeight, \"L\", v, H, \"Z\"] : [\"M\", 0, 0];\n      \"adjustHeight\" !== this.redrawTrigger && this.scrollableMask.attr({\n        d: B\n      });\n    };\n  });\n  M(I, \"parts/Point.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.erase,\n      z = f.extend,\n      B = f.isArray,\n      t = f.isNumber,\n      v = f.isObject,\n      C = f.pick,\n      H,\n      y = c.fireEvent,\n      h = c.format,\n      n = c.uniqueKey,\n      q = c.removeEvent;\n    c.Point = H = function () {};\n    c.Point.prototype = {\n      init: function (c, b, a) {\n        this.series = c;\n        this.applyOptions(b, a);\n        this.id = F(this.id) ? this.id : n();\n        this.resolveColor();\n        c.chart.pointCount++;\n        y(this, \"afterInit\");\n        return this;\n      },\n      resolveColor: function () {\n        var c = this.series;\n        var b = c.chart.options.chart.colorCount;\n        var a = c.chart.styledMode;\n        a || this.options.color || (this.color = c.color);\n        c.options.colorByPoint ? (a || (b = c.options.colors || c.chart.options.colors, this.color = this.color || b[c.colorCounter], b = b.length), a = c.colorCounter, c.colorCounter++, c.colorCounter === b && (c.colorCounter = 0)) : a = c.colorIndex;\n        this.colorIndex = C(this.colorIndex, a);\n      },\n      applyOptions: function (c, b) {\n        var a = this.series,\n          d = a.options.pointValKey || a.pointValKey;\n        c = H.prototype.optionsToObject.call(this, c);\n        z(this, c);\n        this.options = this.options ? z(this.options, c) : c;\n        c.group && delete this.group;\n        c.dataLabels && delete this.dataLabels;\n        d && (this.y = this[d]);\n        this.formatPrefix = (this.isNull = C(this.isValid && !this.isValid(), null === this.x || !t(this.y))) ? \"null\" : \"point\";\n        this.selected && (this.state = \"select\");\n        \"name\" in this && void 0 === b && a.xAxis && a.xAxis.hasNames && (this.x = a.xAxis.nameToX(this));\n        void 0 === this.x && a && (this.x = void 0 === b ? a.autoIncrement(this) : b);\n        return this;\n      },\n      setNestedProperty: function (c, b, a) {\n        a.split(\".\").reduce(function (a, e, c, g) {\n          a[e] = g.length - 1 === c ? b : v(a[e], !0) ? a[e] : {};\n          return a[e];\n        }, c);\n        return c;\n      },\n      optionsToObject: function (g) {\n        var b = {},\n          a = this.series,\n          d = a.options.keys,\n          e = d || a.pointArrayMap || [\"y\"],\n          h = e.length,\n          f = 0,\n          n = 0;\n        if (t(g) || null === g) b[e[0]] = g;else if (B(g)) for (!d && g.length > h && (a = typeof g[0], \"string\" === a ? b.name = g[0] : \"number\" === a && (b.x = g[0]), f++); n < h;) d && void 0 === g[f] || (0 < e[n].indexOf(\".\") ? c.Point.prototype.setNestedProperty(b, g[f], e[n]) : b[e[n]] = g[f]), f++, n++;else \"object\" === typeof g && (b = g, g.dataLabels && (a._hasPointLabels = !0), g.marker && (a._hasPointMarkers = !0));\n        return b;\n      },\n      getClassName: function () {\n        return \"highcharts-point\" + (this.selected ? \" highcharts-point-select\" : \"\") + (this.negative ? \" highcharts-negative\" : \"\") + (this.isNull ? \" highcharts-null-point\" : \"\") + (void 0 !== this.colorIndex ? \" highcharts-color-\" + this.colorIndex : \"\") + (this.options.className ? \" \" + this.options.className : \"\") + (this.zone && this.zone.className ? \" \" + this.zone.className.replace(\"highcharts-negative\", \"\") : \"\");\n      },\n      getZone: function () {\n        var c = this.series,\n          b = c.zones;\n        c = c.zoneAxis || \"y\";\n        var a = 0,\n          d;\n        for (d = b[a]; this[c] >= d.value;) d = b[++a];\n        this.nonZonedColor || (this.nonZonedColor = this.color);\n        this.color = d && d.color && !this.options.color ? d.color : this.nonZonedColor;\n        return d;\n      },\n      hasNewShapeType: function () {\n        return this.graphic && this.graphic.element.nodeName !== this.shapeType;\n      },\n      destroy: function () {\n        var c = this.series.chart,\n          b = c.hoverPoints,\n          a;\n        c.pointCount--;\n        b && (this.setState(), G(b, this), b.length || (c.hoverPoints = null));\n        if (this === c.hoverPoint) this.onMouseOut();\n        if (this.graphic || this.dataLabel || this.dataLabels) q(this), this.destroyElements();\n        this.legendItem && c.legend.destroyItem(this);\n        for (a in this) this[a] = null;\n      },\n      destroyElements: function (c) {\n        var b = this,\n          a = [],\n          d;\n        c = c || {\n          graphic: 1,\n          dataLabel: 1\n        };\n        c.graphic && a.push(\"graphic\", \"shadowGroup\");\n        c.dataLabel && a.push(\"dataLabel\", \"dataLabelUpper\", \"connector\");\n        for (d = a.length; d--;) {\n          var e = a[d];\n          b[e] && (b[e] = b[e].destroy());\n        }\n        [\"dataLabel\", \"connector\"].forEach(function (a) {\n          var d = a + \"s\";\n          c[a] && b[d] && (b[d].forEach(function (a) {\n            a.element && a.destroy();\n          }), delete b[d]);\n        });\n      },\n      getLabelConfig: function () {\n        return {\n          x: this.category,\n          y: this.y,\n          color: this.color,\n          colorIndex: this.colorIndex,\n          key: this.name || this.category,\n          series: this.series,\n          point: this,\n          percentage: this.percentage,\n          total: this.total || this.stackTotal\n        };\n      },\n      tooltipFormatter: function (c) {\n        var b = this.series,\n          a = b.tooltipOptions,\n          d = C(a.valueDecimals, \"\"),\n          e = a.valuePrefix || \"\",\n          g = a.valueSuffix || \"\";\n        b.chart.styledMode && (c = b.chart.tooltip.styledModeFormat(c));\n        (b.pointArrayMap || [\"y\"]).forEach(function (a) {\n          a = \"{point.\" + a;\n          if (e || g) c = c.replace(RegExp(a + \"}\", \"g\"), e + a + \"}\" + g);\n          c = c.replace(RegExp(a + \"}\", \"g\"), a + \":,.\" + d + \"f}\");\n        });\n        return h(c, {\n          point: this,\n          series: this.series\n        }, b.chart.time);\n      },\n      firePointEvent: function (c, b, a) {\n        var d = this,\n          e = this.series.options;\n        (e.point.events[c] || d.options && d.options.events && d.options.events[c]) && this.importEvents();\n        \"click\" === c && e.allowPointSelect && (a = function (a) {\n          d.select && d.select(null, a.ctrlKey || a.metaKey || a.shiftKey);\n        });\n        y(this, c, b, a);\n      },\n      visible: !0\n    };\n  });\n  M(I, \"parts/Series.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.arrayMax,\n      G = f.arrayMin,\n      z = f.defined,\n      B = f.erase,\n      t = f.extend,\n      v = f.isArray,\n      C = f.isNumber,\n      H = f.isString,\n      y = f.objectEach,\n      h = f.pick,\n      n = f.splat,\n      q = f.syncTimeout,\n      g = c.addEvent,\n      b = c.animObject,\n      a = c.correctFloat,\n      d = c.defaultOptions,\n      e = c.defaultPlotOptions,\n      l = c.fireEvent,\n      L = c.merge,\n      E = c.removeEvent,\n      p = c.SVGElement,\n      u = c.win;\n    c.Series = c.seriesType(\"line\", null, {\n      lineWidth: 2,\n      allowPointSelect: !1,\n      showCheckbox: !1,\n      animation: {\n        duration: 1E3\n      },\n      events: {},\n      marker: {\n        lineWidth: 0,\n        lineColor: \"#ffffff\",\n        enabledThreshold: 2,\n        radius: 4,\n        states: {\n          normal: {\n            animation: !0\n          },\n          hover: {\n            animation: {\n              duration: 50\n            },\n            enabled: !0,\n            radiusPlus: 2,\n            lineWidthPlus: 1\n          },\n          select: {\n            fillColor: \"#cccccc\",\n            lineColor: \"#000000\",\n            lineWidth: 2\n          }\n        }\n      },\n      point: {\n        events: {}\n      },\n      dataLabels: {\n        align: \"center\",\n        formatter: function () {\n          return null === this.y ? \"\" : c.numberFormat(this.y, -1);\n        },\n        padding: 5,\n        style: {\n          fontSize: \"11px\",\n          fontWeight: \"bold\",\n          color: \"contrast\",\n          textOutline: \"1px contrast\"\n        },\n        verticalAlign: \"bottom\",\n        x: 0,\n        y: 0\n      },\n      cropThreshold: 300,\n      opacity: 1,\n      pointRange: 0,\n      softThreshold: !0,\n      states: {\n        normal: {\n          animation: !0\n        },\n        hover: {\n          animation: {\n            duration: 50\n          },\n          lineWidthPlus: 1,\n          marker: {},\n          halo: {\n            size: 10,\n            opacity: .25\n          }\n        },\n        select: {\n          animation: {\n            duration: 0\n          }\n        },\n        inactive: {\n          animation: {\n            duration: 50\n          },\n          opacity: .2\n        }\n      },\n      stickyTracking: !0,\n      turboThreshold: 1E3,\n      findNearestPointBy: \"x\"\n    }, {\n      axisTypes: [\"xAxis\", \"yAxis\"],\n      coll: \"series\",\n      colorCounter: 0,\n      cropShoulder: 1,\n      directTouch: !1,\n      isCartesian: !0,\n      parallelArrays: [\"x\", \"y\"],\n      pointClass: c.Point,\n      requireSorting: !0,\n      sorted: !0,\n      init: function (a, b) {\n        l(this, \"init\", {\n          options: b\n        });\n        var d = this,\n          e = a.series,\n          k;\n        this.eventOptions = this.eventOptions || {};\n        d.chart = a;\n        d.options = b = d.setOptions(b);\n        d.linkedSeries = [];\n        d.bindAxes();\n        t(d, {\n          name: b.name,\n          state: \"\",\n          visible: !1 !== b.visible,\n          selected: !0 === b.selected\n        });\n        var m = b.events;\n        y(m, function (a, b) {\n          c.isFunction(a) && d.eventOptions[b] !== a && (c.isFunction(d.eventOptions[b]) && E(d, b, d.eventOptions[b]), d.eventOptions[b] = a, g(d, b, a));\n        });\n        if (m && m.click || b.point && b.point.events && b.point.events.click || b.allowPointSelect) a.runTrackerClick = !0;\n        d.getColor();\n        d.getSymbol();\n        d.parallelArrays.forEach(function (a) {\n          d[a + \"Data\"] || (d[a + \"Data\"] = []);\n        });\n        d.points || d.data || d.setData(b.data, !1);\n        d.isCartesian && (a.hasCartesianSeries = !0);\n        e.length && (k = e[e.length - 1]);\n        d._i = h(k && k._i, -1) + 1;\n        a.orderSeries(this.insert(e));\n        l(this, \"afterInit\");\n      },\n      insert: function (a) {\n        var b = this.options.index,\n          d;\n        if (C(b)) {\n          for (d = a.length; d--;) if (b >= h(a[d].options.index, a[d]._i)) {\n            a.splice(d + 1, 0, this);\n            break;\n          }\n          -1 === d && a.unshift(this);\n          d += 1;\n        } else a.push(this);\n        return h(d, a.length - 1);\n      },\n      bindAxes: function () {\n        var a = this,\n          b = a.options,\n          d = a.chart,\n          e;\n        l(this, \"bindAxes\", null, function () {\n          (a.axisTypes || []).forEach(function (k) {\n            d[k].forEach(function (d) {\n              e = d.options;\n              if (b[k] === e.index || void 0 !== b[k] && b[k] === e.id || void 0 === b[k] && 0 === e.index) a.insert(d.series), a[k] = d, d.isDirty = !0;\n            });\n            a[k] || a.optionalAxis === k || c.error(18, !0, d);\n          });\n        });\n      },\n      updateParallelArrays: function (a, b) {\n        var d = a.series,\n          c = arguments,\n          e = C(b) ? function (c) {\n            var e = \"y\" === c && d.toYData ? d.toYData(a) : a[c];\n            d[c + \"Data\"][b] = e;\n          } : function (a) {\n            Array.prototype[b].apply(d[a + \"Data\"], Array.prototype.slice.call(c, 2));\n          };\n        d.parallelArrays.forEach(e);\n      },\n      hasData: function () {\n        return this.visible && void 0 !== this.dataMax && void 0 !== this.dataMin || this.visible && this.yData && 0 < this.yData.length;\n      },\n      autoIncrement: function () {\n        var a = this.options,\n          b = this.xIncrement,\n          d,\n          c = a.pointIntervalUnit,\n          e = this.chart.time;\n        b = h(b, a.pointStart, 0);\n        this.pointInterval = d = h(this.pointInterval, a.pointInterval, 1);\n        c && (a = new e.Date(b), \"day\" === c ? e.set(\"Date\", a, e.get(\"Date\", a) + d) : \"month\" === c ? e.set(\"Month\", a, e.get(\"Month\", a) + d) : \"year\" === c && e.set(\"FullYear\", a, e.get(\"FullYear\", a) + d), d = a.getTime() - b);\n        this.xIncrement = b + d;\n        return b;\n      },\n      setOptions: function (a) {\n        var b = this.chart,\n          c = b.options,\n          e = c.plotOptions,\n          k = b.userOptions || {};\n        a = L(a);\n        b = b.styledMode;\n        var g = {\n          plotOptions: e,\n          userOptions: a\n        };\n        l(this, \"setOptions\", g);\n        var f = g.plotOptions[this.type],\n          p = k.plotOptions || {};\n        this.userOptions = g.userOptions;\n        k = L(f, e.series, k.plotOptions && k.plotOptions[this.type], a);\n        this.tooltipOptions = L(d.tooltip, d.plotOptions.series && d.plotOptions.series.tooltip, d.plotOptions[this.type].tooltip, c.tooltip.userOptions, e.series && e.series.tooltip, e[this.type].tooltip, a.tooltip);\n        this.stickyTracking = h(a.stickyTracking, p[this.type] && p[this.type].stickyTracking, p.series && p.series.stickyTracking, this.tooltipOptions.shared && !this.noSharedTooltip ? !0 : k.stickyTracking);\n        null === f.marker && delete k.marker;\n        this.zoneAxis = k.zoneAxis;\n        c = this.zones = (k.zones || []).slice();\n        !k.negativeColor && !k.negativeFillColor || k.zones || (e = {\n          value: k[this.zoneAxis + \"Threshold\"] || k.threshold || 0,\n          className: \"highcharts-negative\"\n        }, b || (e.color = k.negativeColor, e.fillColor = k.negativeFillColor), c.push(e));\n        c.length && z(c[c.length - 1].value) && c.push(b ? {} : {\n          color: this.color,\n          fillColor: this.fillColor\n        });\n        l(this, \"afterSetOptions\", {\n          options: k\n        });\n        return k;\n      },\n      getName: function () {\n        return h(this.options.name, \"Series \" + (this.index + 1));\n      },\n      getCyclic: function (a, b, d) {\n        var c = this.chart,\n          e = this.userOptions,\n          k = a + \"Index\",\n          g = a + \"Counter\",\n          f = d ? d.length : h(c.options.chart[a + \"Count\"], c[a + \"Count\"]);\n        if (!b) {\n          var r = h(e[k], e[\"_\" + k]);\n          z(r) || (c.series.length || (c[g] = 0), e[\"_\" + k] = r = c[g] % f, c[g] += 1);\n          d && (b = d[r]);\n        }\n        void 0 !== r && (this[k] = r);\n        this[a] = b;\n      },\n      getColor: function () {\n        this.chart.styledMode ? this.getCyclic(\"color\") : this.options.colorByPoint ? this.options.color = null : this.getCyclic(\"color\", this.options.color || e[this.type].color, this.chart.options.colors);\n      },\n      getSymbol: function () {\n        this.getCyclic(\"symbol\", this.options.marker.symbol, this.chart.options.symbols);\n      },\n      findPointIndex: function (a, b) {\n        var d = a.id;\n        a = a.x;\n        var c = this.points,\n          e;\n        if (d) {\n          var k = (d = this.chart.get(d)) && d.index;\n          void 0 !== k && (e = !0);\n        }\n        void 0 === k && C(a) && (k = this.xData.indexOf(a, b));\n        -1 !== k && void 0 !== k && this.cropped && (k = k >= this.cropStart ? k - this.cropStart : k);\n        !e && c[k] && c[k].touched && (k = void 0);\n        return k;\n      },\n      drawLegendSymbol: c.LegendSymbolMixin.drawLineMarker,\n      updateData: function (a) {\n        var b = this.options,\n          d = this.points,\n          c = [],\n          e,\n          k,\n          g,\n          h = this.requireSorting,\n          f = a.length === d.length,\n          l = !0;\n        this.xIncrement = null;\n        a.forEach(function (a, k) {\n          var m = z(a) && this.pointClass.prototype.optionsToObject.call({\n            series: this\n          }, a) || {};\n          var r = m.x;\n          if (m.id || C(r)) if (r = this.findPointIndex(m, g), -1 === r || void 0 === r ? c.push(a) : d[r] && a !== b.data[r] ? (d[r].update(a, !1, null, !1), d[r].touched = !0, h && (g = r + 1)) : d[r] && (d[r].touched = !0), !f || k !== r || this.hasDerivedData) e = !0;\n        }, this);\n        if (e) for (a = d.length; a--;) (k = d[a]) && !k.touched && k.remove(!1);else f ? a.forEach(function (a, b) {\n          d[b].update && a !== d[b].y && d[b].update(a, !1, null, !1);\n        }) : l = !1;\n        d.forEach(function (a) {\n          a && (a.touched = !1);\n        });\n        if (!l) return !1;\n        c.forEach(function (a) {\n          this.addPoint(a, !1, null, null, !1);\n        }, this);\n        return !0;\n      },\n      setData: function (a, b, d, e) {\n        var k = this,\n          g = k.points,\n          f = g && g.length || 0,\n          r,\n          l = k.options,\n          p = k.chart,\n          x = null,\n          A = k.xAxis;\n        x = l.turboThreshold;\n        var u = this.xData,\n          n = this.yData,\n          q = (r = k.pointArrayMap) && r.length,\n          y = l.keys,\n          t = 0,\n          E = 1,\n          L;\n        a = a || [];\n        r = a.length;\n        b = h(b, !0);\n        !1 !== e && r && f && !k.cropped && !k.hasGroupedData && k.visible && !k.isSeriesBoosting && (L = this.updateData(a));\n        if (!L) {\n          k.xIncrement = null;\n          k.colorCounter = 0;\n          this.parallelArrays.forEach(function (a) {\n            k[a + \"Data\"].length = 0;\n          });\n          if (x && r > x) {\n            if (x = k.getFirstValidPoint(a), C(x)) for (d = 0; d < r; d++) u[d] = this.autoIncrement(), n[d] = a[d];else if (v(x)) {\n              if (q) for (d = 0; d < r; d++) e = a[d], u[d] = e[0], n[d] = e.slice(1, q + 1);else for (y && (t = y.indexOf(\"x\"), E = y.indexOf(\"y\"), t = 0 <= t ? t : 0, E = 0 <= E ? E : 1), d = 0; d < r; d++) e = a[d], u[d] = e[t], n[d] = e[E];\n            } else c.error(12, !1, p);\n          } else for (d = 0; d < r; d++) void 0 !== a[d] && (e = {\n            series: k\n          }, k.pointClass.prototype.applyOptions.apply(e, [a[d]]), k.updateParallelArrays(e, d));\n          n && H(n[0]) && c.error(14, !0, p);\n          k.data = [];\n          k.options.data = k.userOptions.data = a;\n          for (d = f; d--;) g[d] && g[d].destroy && g[d].destroy();\n          A && (A.minRange = A.userMinRange);\n          k.isDirty = p.isDirtyBox = !0;\n          k.isDirtyData = !!g;\n          d = !1;\n        }\n        \"point\" === l.legendType && (this.processData(), this.generatePoints());\n        b && p.redraw(d);\n      },\n      processData: function (a) {\n        var b = this.xData,\n          d = this.yData,\n          e = b.length;\n        var k = 0;\n        var g = this.xAxis,\n          h = this.options;\n        var f = h.cropThreshold;\n        var l = this.getExtremesFromAll || h.getExtremesFromAll,\n          p = this.isCartesian;\n        h = g && g.val2lin;\n        var u = g && g.isLog,\n          n = this.requireSorting;\n        if (p && !this.isDirty && !g.isDirty && !this.yAxis.isDirty && !a) return !1;\n        if (g) {\n          a = g.getExtremes();\n          var q = a.min;\n          var v = a.max;\n        }\n        if (p && this.sorted && !l && (!f || e > f || this.forceCrop)) if (b[e - 1] < q || b[0] > v) b = [], d = [];else if (this.yData && (b[0] < q || b[e - 1] > v)) {\n          k = this.cropData(this.xData, this.yData, q, v);\n          b = k.xData;\n          d = k.yData;\n          k = k.start;\n          var y = !0;\n        }\n        for (f = b.length || 1; --f;) if (e = u ? h(b[f]) - h(b[f - 1]) : b[f] - b[f - 1], 0 < e && (void 0 === t || e < t)) var t = e;else 0 > e && n && (c.error(15, !1, this.chart), n = !1);\n        this.cropped = y;\n        this.cropStart = k;\n        this.processedXData = b;\n        this.processedYData = d;\n        this.closestPointRange = this.basePointRange = t;\n      },\n      cropData: function (a, b, d, e, c) {\n        var k = a.length,\n          g = 0,\n          f = k,\n          r;\n        c = h(c, this.cropShoulder);\n        for (r = 0; r < k; r++) if (a[r] >= d) {\n          g = Math.max(0, r - c);\n          break;\n        }\n        for (d = r; d < k; d++) if (a[d] > e) {\n          f = d + c;\n          break;\n        }\n        return {\n          xData: a.slice(g, f),\n          yData: b.slice(g, f),\n          start: g,\n          end: f\n        };\n      },\n      generatePoints: function () {\n        var a = this.options,\n          b = a.data,\n          d = this.data,\n          e,\n          c = this.processedXData,\n          g = this.processedYData,\n          f = this.pointClass,\n          h = c.length,\n          p = this.cropStart || 0,\n          u = this.hasGroupedData;\n        a = a.keys;\n        var q = [],\n          v;\n        d || u || (d = [], d.length = b.length, d = this.data = d);\n        a && u && (this.options.keys = !1);\n        for (v = 0; v < h; v++) {\n          var y = p + v;\n          if (u) {\n            var E = new f().init(this, [c[v]].concat(n(g[v])));\n            E.dataGroup = this.groupMap[v];\n            E.dataGroup.options && (E.options = E.dataGroup.options, t(E, E.dataGroup.options), delete E.dataLabels);\n          } else (E = d[y]) || void 0 === b[y] || (d[y] = E = new f().init(this, b[y], c[v]));\n          E && (E.index = y, q[v] = E);\n        }\n        this.options.keys = a;\n        if (d && (h !== (e = d.length) || u)) for (v = 0; v < e; v++) v !== p || u || (v += h), d[v] && (d[v].destroyElements(), d[v].plotX = void 0);\n        this.data = d;\n        this.points = q;\n        l(this, \"afterGeneratePoints\");\n      },\n      getXExtremes: function (a) {\n        return {\n          min: G(a),\n          max: F(a)\n        };\n      },\n      getExtremes: function (a) {\n        var b = this.xAxis,\n          d = this.yAxis,\n          e = this.processedXData || this.xData,\n          c = [],\n          k = 0,\n          g = 0;\n        var f = 0;\n        var h = this.requireSorting ? this.cropShoulder : 0,\n          p = d ? d.positiveValuesOnly : !1,\n          u;\n        a = a || this.stackedYData || this.processedYData || [];\n        d = a.length;\n        b && (f = b.getExtremes(), g = f.min, f = f.max);\n        for (u = 0; u < d; u++) {\n          var n = e[u];\n          var q = a[u];\n          var y = (C(q) || v(q)) && (q.length || 0 < q || !p);\n          n = this.getExtremesFromAll || this.options.getExtremesFromAll || this.cropped || !b || (e[u + h] || n) >= g && (e[u - h] || n) <= f;\n          if (y && n) if (y = q.length) for (; y--;) C(q[y]) && (c[k++] = q[y]);else c[k++] = q;\n        }\n        this.dataMin = G(c);\n        this.dataMax = F(c);\n        l(this, \"afterGetExtremes\");\n      },\n      getFirstValidPoint: function (a) {\n        for (var b = null, d = a.length, e = 0; null === b && e < d;) b = a[e], e++;\n        return b;\n      },\n      translate: function () {\n        this.processedXData || this.processData();\n        this.generatePoints();\n        var b = this.options,\n          d = b.stacking,\n          e = this.xAxis,\n          c = e.categories,\n          g = this.yAxis,\n          m = this.points,\n          f = m.length,\n          p = !!this.modifyValue,\n          u,\n          n = this.pointPlacementToXValue(),\n          q = C(n),\n          y = b.threshold,\n          t = b.startFromThreshold ? y : 0,\n          E,\n          L = this.zoneAxis || \"y\",\n          B = Number.MAX_VALUE;\n        for (u = 0; u < f; u++) {\n          var H = m[u],\n            G = H.x;\n          var F = H.y;\n          var I = H.low,\n            M = d && g.stacks[(this.negStacks && F < (t ? 0 : y) ? \"-\" : \"\") + this.stackKey];\n          g.positiveValuesOnly && null !== F && 0 >= F && (H.isNull = !0);\n          H.plotX = E = a(Math.min(Math.max(-1E5, e.translate(G, 0, 0, 0, 1, n, \"flags\" === this.type)), 1E5));\n          if (d && this.visible && M && M[G]) {\n            var X = this.getStackIndicator(X, G, this.index);\n            if (!H.isNull) {\n              var P = M[G];\n              var Y = P.points[X.key];\n            }\n          }\n          v(Y) && (I = Y[0], F = Y[1], I === t && X.key === M[G].base && (I = h(C(y) && y, g.min)), g.positiveValuesOnly && 0 >= I && (I = null), H.total = H.stackTotal = P.total, H.percentage = P.total && H.y / P.total * 100, H.stackY = F, this.irregularWidths || P.setOffset(this.pointXOffset || 0, this.barW || 0));\n          H.yBottom = z(I) ? Math.min(Math.max(-1E5, g.translate(I, 0, 1, 0, 1)), 1E5) : null;\n          p && (F = this.modifyValue(F, H));\n          H.plotY = F = \"number\" === typeof F && Infinity !== F ? Math.min(Math.max(-1E5, g.translate(F, 0, 1, 0, 1)), 1E5) : void 0;\n          H.isInside = void 0 !== F && 0 <= F && F <= g.len && 0 <= E && E <= e.len;\n          H.clientX = q ? a(e.translate(G, 0, 0, 0, 1, n)) : E;\n          H.negative = H[L] < (b[L + \"Threshold\"] || y || 0);\n          H.category = c && void 0 !== c[H.x] ? c[H.x] : H.x;\n          if (!H.isNull) {\n            void 0 !== Z && (B = Math.min(B, Math.abs(E - Z)));\n            var Z = E;\n          }\n          H.zone = this.zones.length && H.getZone();\n        }\n        this.closestPointRangePx = B;\n        l(this, \"afterTranslate\");\n      },\n      getValidPoints: function (a, b, d) {\n        var e = this.chart;\n        return (a || this.points || []).filter(function (a) {\n          return b && !e.isInsidePlot(a.plotX, a.plotY, e.inverted) ? !1 : d || !a.isNull;\n        });\n      },\n      getClipBox: function (a, b) {\n        var d = this.options,\n          e = this.chart,\n          c = e.inverted,\n          k = this.xAxis,\n          g = k && this.yAxis;\n        a && !1 === d.clip && g ? a = c ? {\n          y: -e.chartWidth + g.len + g.pos,\n          height: e.chartWidth,\n          width: e.chartHeight,\n          x: -e.chartHeight + k.len + k.pos\n        } : {\n          y: -g.pos,\n          height: e.chartHeight,\n          width: e.chartWidth,\n          x: -k.pos\n        } : (a = this.clipBox || e.clipBox, b && (a.width = e.plotSizeX, a.x = 0));\n        return b ? {\n          width: a.width,\n          x: a.x\n        } : a;\n      },\n      setClip: function (a) {\n        var b = this.chart,\n          d = this.options,\n          e = b.renderer,\n          c = b.inverted,\n          k = this.clipBox,\n          g = this.getClipBox(a),\n          f = this.sharedClipKey || [\"_sharedClip\", a && a.duration, a && a.easing, g.height, d.xAxis, d.yAxis].join(),\n          h = b[f],\n          l = b[f + \"m\"];\n        h || (a && (g.width = 0, c && (g.x = b.plotSizeX + (!1 !== d.clip ? 0 : b.plotTop)), b[f + \"m\"] = l = e.clipRect(c ? b.plotSizeX + 99 : -99, c ? -b.plotLeft : -b.plotTop, 99, c ? b.chartWidth : b.chartHeight)), b[f] = h = e.clipRect(g), h.count = {\n          length: 0\n        });\n        a && !h.count[this.index] && (h.count[this.index] = !0, h.count.length += 1);\n        if (!1 !== d.clip || a) this.group.clip(a || k ? h : b.clipRect), this.markerGroup.clip(l), this.sharedClipKey = f;\n        a || (h.count[this.index] && (delete h.count[this.index], --h.count.length), 0 === h.count.length && f && b[f] && (k || (b[f] = b[f].destroy()), b[f + \"m\"] && (b[f + \"m\"] = b[f + \"m\"].destroy())));\n      },\n      animate: function (a) {\n        var d = this.chart,\n          e = b(this.options.animation);\n        if (a) this.setClip(e);else {\n          var c = this.sharedClipKey;\n          a = d[c];\n          var k = this.getClipBox(e, !0);\n          a && a.animate(k, e);\n          d[c + \"m\"] && d[c + \"m\"].animate({\n            width: k.width + 99,\n            x: k.x - (d.inverted ? 0 : 99)\n          }, e);\n          this.animate = null;\n        }\n      },\n      afterAnimate: function () {\n        this.setClip();\n        l(this, \"afterAnimate\");\n        this.finishedAnimating = !0;\n      },\n      drawPoints: function () {\n        var a = this.points,\n          b = this.chart,\n          d,\n          e = this.options.marker,\n          c = this[this.specialGroup] || this.markerGroup;\n        var g = this.xAxis;\n        var f = h(e.enabled, !g || g.isRadial ? !0 : null, this.closestPointRangePx >= e.enabledThreshold * e.radius);\n        if (!1 !== e.enabled || this._hasPointMarkers) for (g = 0; g < a.length; g++) {\n          var l = a[g];\n          var p = (d = l.graphic) ? \"animate\" : \"attr\";\n          var u = l.marker || {};\n          var n = !!l.marker;\n          var q = f && void 0 === u.enabled || u.enabled;\n          var v = !1 !== l.isInside;\n          if (q && !l.isNull) {\n            var y = h(u.symbol, this.symbol);\n            q = this.markerAttribs(l, l.selected && \"select\");\n            d ? d[v ? \"show\" : \"hide\"](v).animate(q) : v && (0 < q.width || l.hasImage) && (l.graphic = d = b.renderer.symbol(y, q.x, q.y, q.width, q.height, n ? u : e).add(c));\n            if (d && !b.styledMode) d[p](this.pointAttribs(l, l.selected && \"select\"));\n            d && d.addClass(l.getClassName(), !0);\n          } else d && (l.graphic = d.destroy());\n        }\n      },\n      markerAttribs: function (a, b) {\n        var d = this.options.marker,\n          e = a.marker || {},\n          c = e.symbol || d.symbol,\n          k = h(e.radius, d.radius);\n        b && (d = d.states[b], b = e.states && e.states[b], k = h(b && b.radius, d && d.radius, k + (d && d.radiusPlus || 0)));\n        a.hasImage = c && 0 === c.indexOf(\"url\");\n        a.hasImage && (k = 0);\n        a = {\n          x: Math.floor(a.plotX) - k,\n          y: a.plotY - k\n        };\n        k && (a.width = a.height = 2 * k);\n        return a;\n      },\n      pointAttribs: function (a, b) {\n        var d = this.options.marker,\n          e = a && a.options,\n          c = e && e.marker || {},\n          k = this.color,\n          g = e && e.color,\n          f = a && a.color;\n        e = h(c.lineWidth, d.lineWidth);\n        var l = a && a.zone && a.zone.color;\n        a = 1;\n        k = g || l || f || k;\n        g = c.fillColor || d.fillColor || k;\n        k = c.lineColor || d.lineColor || k;\n        b = b || \"normal\";\n        d = d.states[b];\n        b = c.states && c.states[b] || {};\n        e = h(b.lineWidth, d.lineWidth, e + h(b.lineWidthPlus, d.lineWidthPlus, 0));\n        g = b.fillColor || d.fillColor || g;\n        k = b.lineColor || d.lineColor || k;\n        a = h(b.opacity, d.opacity, a);\n        return {\n          stroke: k,\n          \"stroke-width\": e,\n          fill: g,\n          opacity: a\n        };\n      },\n      destroy: function (a) {\n        var b = this,\n          d = b.chart,\n          e = /AppleWebKit\\/533/.test(u.navigator.userAgent),\n          k,\n          g,\n          f = b.data || [],\n          h,\n          n;\n        l(b, \"destroy\");\n        a || E(b);\n        (b.axisTypes || []).forEach(function (a) {\n          (n = b[a]) && n.series && (B(n.series, b), n.isDirty = n.forceRedraw = !0);\n        });\n        b.legendItem && b.chart.legend.destroyItem(b);\n        for (g = f.length; g--;) (h = f[g]) && h.destroy && h.destroy();\n        b.points = null;\n        c.clearTimeout(b.animationTimeout);\n        y(b, function (a, b) {\n          a instanceof p && !a.survive && (k = e && \"group\" === b ? \"hide\" : \"destroy\", a[k]());\n        });\n        d.hoverSeries === b && (d.hoverSeries = null);\n        B(d.series, b);\n        d.orderSeries();\n        y(b, function (d, e) {\n          a && \"hcEvents\" === e || delete b[e];\n        });\n      },\n      getGraphPath: function (a, b, d) {\n        var e = this,\n          c = e.options,\n          k = c.step,\n          g,\n          f = [],\n          h = [],\n          l;\n        a = a || e.points;\n        (g = a.reversed) && a.reverse();\n        (k = {\n          right: 1,\n          center: 2\n        }[k] || k && 3) && g && (k = 4 - k);\n        !c.connectNulls || b || d || (a = this.getValidPoints(a));\n        a.forEach(function (g, m) {\n          var r = g.plotX,\n            p = g.plotY,\n            u = a[m - 1];\n          (g.leftCliff || u && u.rightCliff) && !d && (l = !0);\n          g.isNull && !z(b) && 0 < m ? l = !c.connectNulls : g.isNull && !b ? l = !0 : (0 === m || l ? m = [\"M\", g.plotX, g.plotY] : e.getPointSpline ? m = e.getPointSpline(a, g, m) : k ? (m = 1 === k ? [\"L\", u.plotX, p] : 2 === k ? [\"L\", (u.plotX + r) / 2, u.plotY, \"L\", (u.plotX + r) / 2, p] : [\"L\", r, u.plotY], m.push(\"L\", r, p)) : m = [\"L\", r, p], h.push(g.x), k && (h.push(g.x), 2 === k && h.push(g.x)), f.push.apply(f, m), l = !1);\n        });\n        f.xMap = h;\n        return e.graphPath = f;\n      },\n      drawGraph: function () {\n        var a = this,\n          b = this.options,\n          d = (this.gappedPath || this.getGraphPath).call(this),\n          e = this.chart.styledMode,\n          c = [[\"graph\", \"highcharts-graph\"]];\n        e || c[0].push(b.lineColor || this.color || \"#cccccc\", b.dashStyle);\n        c = a.getZonesGraphs(c);\n        c.forEach(function (c, k) {\n          var g = c[0],\n            f = a[g],\n            h = f ? \"animate\" : \"attr\";\n          f ? (f.endX = a.preventGraphAnimation ? null : d.xMap, f.animate({\n            d: d\n          })) : d.length && (a[g] = f = a.chart.renderer.path(d).addClass(c[1]).attr({\n            zIndex: 1\n          }).add(a.group));\n          f && !e && (g = {\n            stroke: c[2],\n            \"stroke-width\": b.lineWidth,\n            fill: a.fillGraph && a.color || \"none\"\n          }, c[3] ? g.dashstyle = c[3] : \"square\" !== b.linecap && (g[\"stroke-linecap\"] = g[\"stroke-linejoin\"] = \"round\"), f[h](g).shadow(2 > k && b.shadow));\n          f && (f.startX = d.xMap, f.isArea = d.isArea);\n        });\n      },\n      getZonesGraphs: function (a) {\n        this.zones.forEach(function (b, d) {\n          d = [\"zone-graph-\" + d, \"highcharts-graph highcharts-zone-graph-\" + d + \" \" + (b.className || \"\")];\n          this.chart.styledMode || d.push(b.color || this.color, b.dashStyle || this.options.dashStyle);\n          a.push(d);\n        }, this);\n        return a;\n      },\n      applyZones: function () {\n        var a = this,\n          b = this.chart,\n          d = b.renderer,\n          e = this.zones,\n          c,\n          g,\n          f = this.clips || [],\n          l,\n          p = this.graph,\n          u = this.area,\n          n = Math.max(b.chartWidth, b.chartHeight),\n          q = this[(this.zoneAxis || \"y\") + \"Axis\"],\n          v = b.inverted,\n          y,\n          t,\n          E,\n          C = !1;\n        if (e.length && (p || u) && q && void 0 !== q.min) {\n          var L = q.reversed;\n          var z = q.horiz;\n          p && !this.showLine && p.hide();\n          u && u.hide();\n          var B = q.getExtremes();\n          e.forEach(function (e, k) {\n            c = L ? z ? b.plotWidth : 0 : z ? 0 : q.toPixels(B.min) || 0;\n            c = Math.min(Math.max(h(g, c), 0), n);\n            g = Math.min(Math.max(Math.round(q.toPixels(h(e.value, B.max), !0) || 0), 0), n);\n            C && (c = g = q.toPixels(B.max));\n            y = Math.abs(c - g);\n            t = Math.min(c, g);\n            E = Math.max(c, g);\n            q.isXAxis ? (l = {\n              x: v ? E : t,\n              y: 0,\n              width: y,\n              height: n\n            }, z || (l.x = b.plotHeight - l.x)) : (l = {\n              x: 0,\n              y: v ? E : t,\n              width: n,\n              height: y\n            }, z && (l.y = b.plotWidth - l.y));\n            v && d.isVML && (l = q.isXAxis ? {\n              x: 0,\n              y: L ? t : E,\n              height: l.width,\n              width: b.chartWidth\n            } : {\n              x: l.y - b.plotLeft - b.spacingBox.x,\n              y: 0,\n              width: l.height,\n              height: b.chartHeight\n            });\n            f[k] ? f[k].animate(l) : f[k] = d.clipRect(l);\n            p && a[\"zone-graph-\" + k].clip(f[k]);\n            u && a[\"zone-area-\" + k].clip(f[k]);\n            C = e.value > B.max;\n            a.resetZones && 0 === g && (g = void 0);\n          });\n          this.clips = f;\n        } else a.visible && (p && p.show(!0), u && u.show(!0));\n      },\n      invertGroups: function (a) {\n        function b() {\n          [\"group\", \"markerGroup\"].forEach(function (b) {\n            d[b] && (e.renderer.isVML && d[b].attr({\n              width: d.yAxis.len,\n              height: d.xAxis.len\n            }), d[b].width = d.yAxis.len, d[b].height = d.xAxis.len, d[b].invert(a));\n          });\n        }\n        var d = this,\n          e = d.chart;\n        if (d.xAxis) {\n          var c = g(e, \"resize\", b);\n          g(d, \"destroy\", c);\n          b(a);\n          d.invertGroups = b;\n        }\n      },\n      plotGroup: function (a, b, d, e, c) {\n        var k = this[a],\n          g = !k;\n        g && (this[a] = k = this.chart.renderer.g().attr({\n          zIndex: e || .1\n        }).add(c));\n        k.addClass(\"highcharts-\" + b + \" highcharts-series-\" + this.index + \" highcharts-\" + this.type + \"-series \" + (z(this.colorIndex) ? \"highcharts-color-\" + this.colorIndex + \" \" : \"\") + (this.options.className || \"\") + (k.hasClass(\"highcharts-tracker\") ? \" highcharts-tracker\" : \"\"), !0);\n        k.attr({\n          visibility: d\n        })[g ? \"attr\" : \"animate\"](this.getPlotBox());\n        return k;\n      },\n      getPlotBox: function () {\n        var a = this.chart,\n          b = this.xAxis,\n          d = this.yAxis;\n        a.inverted && (b = d, d = this.xAxis);\n        return {\n          translateX: b ? b.left : a.plotLeft,\n          translateY: d ? d.top : a.plotTop,\n          scaleX: 1,\n          scaleY: 1\n        };\n      },\n      render: function () {\n        var a = this,\n          d = a.chart,\n          e = a.options,\n          c = !!a.animate && d.renderer.isSVG && b(e.animation).duration,\n          g = a.visible ? \"inherit\" : \"hidden\",\n          f = e.zIndex,\n          h = a.hasRendered,\n          p = d.seriesGroup,\n          u = d.inverted;\n        l(this, \"render\");\n        var n = a.plotGroup(\"group\", \"series\", g, f, p);\n        a.markerGroup = a.plotGroup(\"markerGroup\", \"markers\", g, f, p);\n        c && a.animate(!0);\n        n.inverted = a.isCartesian || a.invertable ? u : !1;\n        a.drawGraph && (a.drawGraph(), a.applyZones());\n        a.visible && a.drawPoints();\n        a.drawDataLabels && a.drawDataLabels();\n        a.redrawPoints && a.redrawPoints();\n        a.drawTracker && !1 !== a.options.enableMouseTracking && a.drawTracker();\n        a.invertGroups(u);\n        !1 === e.clip || a.sharedClipKey || h || n.clip(d.clipRect);\n        c && a.animate();\n        h || (a.animationTimeout = q(function () {\n          a.afterAnimate();\n        }, c || 0));\n        a.isDirty = !1;\n        a.hasRendered = !0;\n        l(a, \"afterRender\");\n      },\n      redraw: function () {\n        var a = this.chart,\n          b = this.isDirty || this.isDirtyData,\n          d = this.group,\n          e = this.xAxis,\n          c = this.yAxis;\n        d && (a.inverted && d.attr({\n          width: a.plotWidth,\n          height: a.plotHeight\n        }), d.animate({\n          translateX: h(e && e.left, a.plotLeft),\n          translateY: h(c && c.top, a.plotTop)\n        }));\n        this.translate();\n        this.render();\n        b && delete this.kdTree;\n      },\n      kdAxisArray: [\"clientX\", \"plotY\"],\n      searchPoint: function (a, b) {\n        var d = this.xAxis,\n          e = this.yAxis,\n          c = this.chart.inverted;\n        return this.searchKDTree({\n          clientX: c ? d.len - a.chartY + d.pos : a.chartX - d.pos,\n          plotY: c ? e.len - a.chartX + e.pos : a.chartY - e.pos\n        }, b, a);\n      },\n      buildKDTree: function (a) {\n        function b(a, e, c) {\n          var g;\n          if (g = a && a.length) {\n            var k = d.kdAxisArray[e % c];\n            a.sort(function (a, b) {\n              return a[k] - b[k];\n            });\n            g = Math.floor(g / 2);\n            return {\n              point: a[g],\n              left: b(a.slice(0, g), e + 1, c),\n              right: b(a.slice(g + 1), e + 1, c)\n            };\n          }\n        }\n        this.buildingKdTree = !0;\n        var d = this,\n          e = -1 < d.options.findNearestPointBy.indexOf(\"y\") ? 2 : 1;\n        delete d.kdTree;\n        q(function () {\n          d.kdTree = b(d.getValidPoints(null, !d.directTouch), e, e);\n          d.buildingKdTree = !1;\n        }, d.options.kdNow || a && \"touchstart\" === a.type ? 0 : 1);\n      },\n      searchKDTree: function (a, b, d) {\n        function e(a, b, d, h) {\n          var l = b.point,\n            m = c.kdAxisArray[d % h],\n            p = l;\n          var r = z(a[g]) && z(l[g]) ? Math.pow(a[g] - l[g], 2) : null;\n          var u = z(a[k]) && z(l[k]) ? Math.pow(a[k] - l[k], 2) : null;\n          u = (r || 0) + (u || 0);\n          l.dist = z(u) ? Math.sqrt(u) : Number.MAX_VALUE;\n          l.distX = z(r) ? Math.sqrt(r) : Number.MAX_VALUE;\n          m = a[m] - l[m];\n          u = 0 > m ? \"left\" : \"right\";\n          r = 0 > m ? \"right\" : \"left\";\n          b[u] && (u = e(a, b[u], d + 1, h), p = u[f] < p[f] ? u : l);\n          b[r] && Math.sqrt(m * m) < p[f] && (a = e(a, b[r], d + 1, h), p = a[f] < p[f] ? a : p);\n          return p;\n        }\n        var c = this,\n          g = this.kdAxisArray[0],\n          k = this.kdAxisArray[1],\n          f = b ? \"distX\" : \"dist\";\n        b = -1 < c.options.findNearestPointBy.indexOf(\"y\") ? 2 : 1;\n        this.kdTree || this.buildingKdTree || this.buildKDTree(d);\n        if (this.kdTree) return e(a, this.kdTree, b, b);\n      },\n      pointPlacementToXValue: function () {\n        var a = this.xAxis,\n          b = this.options.pointPlacement;\n        \"between\" === b && (b = a.reversed ? -.5 : .5);\n        C(b) && (b *= h(this.options.pointRange || a.pointRange));\n        return b;\n      }\n    });\n    \"\";\n  });\n  M(I, \"parts/Stacking.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.destroyObjectProperties,\n      z = f.objectEach,\n      B = f.pick;\n    f = c.Axis;\n    var t = c.Chart,\n      v = c.correctFloat,\n      C = c.format,\n      H = c.Series;\n    c.StackItem = function (c, f, n, q, g) {\n      var b = c.chart.inverted;\n      this.axis = c;\n      this.isNegative = n;\n      this.options = f = f || {};\n      this.x = q;\n      this.total = null;\n      this.points = {};\n      this.stack = g;\n      this.rightCliff = this.leftCliff = 0;\n      this.alignOptions = {\n        align: f.align || (b ? n ? \"left\" : \"right\" : \"center\"),\n        verticalAlign: f.verticalAlign || (b ? \"middle\" : n ? \"bottom\" : \"top\"),\n        y: f.y,\n        x: f.x\n      };\n      this.textAlign = f.textAlign || (b ? n ? \"right\" : \"left\" : \"center\");\n    };\n    c.StackItem.prototype = {\n      destroy: function () {\n        G(this, this.axis);\n      },\n      render: function (c) {\n        var f = this.axis.chart,\n          n = this.options,\n          q = n.format;\n        q = q ? C(q, this, f.time) : n.formatter.call(this);\n        this.label ? this.label.attr({\n          text: q,\n          visibility: \"hidden\"\n        }) : (this.label = f.renderer.label(q, null, null, n.shape, null, null, n.useHTML, !1, \"stack-labels\"), q = {\n          text: q,\n          align: this.textAlign,\n          rotation: n.rotation,\n          padding: B(n.padding, 0),\n          visibility: \"hidden\"\n        }, this.label.attr(q), f.styledMode || this.label.css(n.style), this.label.added || this.label.add(c));\n        this.label.labelrank = f.plotHeight;\n      },\n      setOffset: function (c, f, n, q, g) {\n        var b = this.axis,\n          a = b.chart;\n        q = b.translate(b.usePercentage ? 100 : q ? q : this.total, 0, 0, 0, 1);\n        n = b.translate(n ? n : 0);\n        n = F(q) && Math.abs(q - n);\n        c = B(g, a.xAxis[0].translate(this.x)) + c;\n        b = F(q) && this.getStackBox(a, this, c, q, f, n, b);\n        f = this.label;\n        c = this.isNegative;\n        g = \"justify\" === B(this.options.overflow, \"justify\");\n        if (f && b) {\n          n = f.getBBox();\n          var d = a.inverted ? c ? n.width : 0 : n.width / 2,\n            e = a.inverted ? n.height / 2 : c ? -4 : n.height + 4;\n          this.alignOptions.x = B(this.options.x, 0);\n          f.align(this.alignOptions, null, b);\n          q = f.alignAttr;\n          f.show();\n          q.y -= e;\n          g && (q.x -= d, H.prototype.justifyDataLabel.call(this.axis, f, this.alignOptions, q, n, b), q.x += d);\n          q.x = f.alignAttr.x;\n          f.attr({\n            x: q.x,\n            y: q.y\n          });\n          B(!g && this.options.crop, !0) && ((a = a.isInsidePlot(f.x + (a.inverted ? 0 : -n.width / 2), f.y) && a.isInsidePlot(f.x + (a.inverted ? c ? -n.width : n.width : n.width / 2), f.y + n.height)) || f.hide());\n        }\n      },\n      getStackBox: function (c, f, n, q, g, b, a) {\n        var d = f.axis.reversed,\n          e = c.inverted;\n        c = a.height + a.pos - (e ? c.plotLeft : c.plotTop);\n        f = f.isNegative && !d || !f.isNegative && d;\n        return {\n          x: e ? f ? q : q - b : n,\n          y: e ? c - n - g : f ? c - q - b : c - q,\n          width: e ? b : g,\n          height: e ? g : b\n        };\n      }\n    };\n    t.prototype.getStacks = function () {\n      var c = this,\n        f = c.inverted;\n      c.yAxis.forEach(function (c) {\n        c.stacks && c.hasVisibleSeries && (c.oldStacks = c.stacks);\n      });\n      c.series.forEach(function (h) {\n        var n = h.xAxis && h.xAxis.options || {};\n        !h.options.stacking || !0 !== h.visible && !1 !== c.options.chart.ignoreHiddenSeries || (h.stackKey = [h.type, B(h.options.stack, \"\"), f ? n.top : n.left, f ? n.height : n.width].join());\n      });\n    };\n    f.prototype.buildStacks = function () {\n      var c = this.series,\n        f = B(this.options.reversedStacks, !0),\n        n = c.length,\n        q;\n      if (!this.isXAxis) {\n        this.usePercentage = !1;\n        for (q = n; q--;) c[f ? q : n - q - 1].setStackedPoints();\n        for (q = 0; q < n; q++) c[q].modifyStacks();\n      }\n    };\n    f.prototype.renderStackTotals = function () {\n      var c = this.chart,\n        f = c.renderer,\n        n = this.stacks,\n        q = this.stackTotalGroup;\n      q || (this.stackTotalGroup = q = f.g(\"stack-labels\").attr({\n        visibility: \"visible\",\n        zIndex: 6\n      }).add());\n      q.translate(c.plotLeft, c.plotTop);\n      z(n, function (c) {\n        z(c, function (b) {\n          b.render(q);\n        });\n      });\n    };\n    f.prototype.resetStacks = function () {\n      var c = this,\n        f = c.stacks;\n      c.isXAxis || z(f, function (f) {\n        z(f, function (h, g) {\n          h.touched < c.stacksTouched ? (h.destroy(), delete f[g]) : (h.total = null, h.cumulative = null);\n        });\n      });\n    };\n    f.prototype.cleanStacks = function () {\n      if (!this.isXAxis) {\n        if (this.oldStacks) var c = this.stacks = this.oldStacks;\n        z(c, function (c) {\n          z(c, function (c) {\n            c.cumulative = c.total;\n          });\n        });\n      }\n    };\n    H.prototype.setStackedPoints = function () {\n      if (this.options.stacking && (!0 === this.visible || !1 === this.chart.options.chart.ignoreHiddenSeries)) {\n        var f = this.processedXData,\n          h = this.processedYData,\n          n = [],\n          q = h.length,\n          g = this.options,\n          b = g.threshold,\n          a = B(g.startFromThreshold && b, 0),\n          d = g.stack;\n        g = g.stacking;\n        var e = this.stackKey,\n          l = \"-\" + e,\n          t = this.negStacks,\n          E = this.yAxis,\n          p = E.stacks,\n          u = E.oldStacks,\n          k,\n          r;\n        E.stacksTouched += 1;\n        for (r = 0; r < q; r++) {\n          var x = f[r];\n          var A = h[r];\n          var w = this.getStackIndicator(w, x, this.index);\n          var m = w.key;\n          var K = (k = t && A < (a ? 0 : b)) ? l : e;\n          p[K] || (p[K] = {});\n          p[K][x] || (u[K] && u[K][x] ? (p[K][x] = u[K][x], p[K][x].total = null) : p[K][x] = new c.StackItem(E, E.options.stackLabels, k, x, d));\n          K = p[K][x];\n          null !== A ? (K.points[m] = K.points[this.index] = [B(K.cumulative, a)], F(K.cumulative) || (K.base = m), K.touched = E.stacksTouched, 0 < w.index && !1 === this.singleStacks && (K.points[m][0] = K.points[this.index + \",\" + x + \",0\"][0])) : K.points[m] = K.points[this.index] = null;\n          \"percent\" === g ? (k = k ? e : l, t && p[k] && p[k][x] ? (k = p[k][x], K.total = k.total = Math.max(k.total, K.total) + Math.abs(A) || 0) : K.total = v(K.total + (Math.abs(A) || 0))) : K.total = v(K.total + (A || 0));\n          K.cumulative = B(K.cumulative, a) + (A || 0);\n          null !== A && (K.points[m].push(K.cumulative), n[r] = K.cumulative);\n        }\n        \"percent\" === g && (E.usePercentage = !0);\n        this.stackedYData = n;\n        E.oldStacks = {};\n      }\n    };\n    H.prototype.modifyStacks = function () {\n      var c = this,\n        f = c.stackKey,\n        n = c.yAxis.stacks,\n        q = c.processedXData,\n        g,\n        b = c.options.stacking;\n      c[b + \"Stacker\"] && [f, \"-\" + f].forEach(function (a) {\n        for (var d = q.length, e, f; d--;) if (e = q[d], g = c.getStackIndicator(g, e, c.index, a), f = (e = n[a] && n[a][e]) && e.points[g.key]) c[b + \"Stacker\"](f, e, d);\n      });\n    };\n    H.prototype.percentStacker = function (c, f, n) {\n      f = f.total ? 100 / f.total : 0;\n      c[0] = v(c[0] * f);\n      c[1] = v(c[1] * f);\n      this.stackedYData[n] = c[1];\n    };\n    H.prototype.getStackIndicator = function (c, f, n, q) {\n      !F(c) || c.x !== f || q && c.key !== q ? c = {\n        x: f,\n        index: 0,\n        key: q\n      } : c.index++;\n      c.key = [n, f, c.index].join();\n      return c;\n    };\n  });\n  M(I, \"parts/Dynamics.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.erase,\n      z = f.extend,\n      B = f.isArray,\n      t = f.isNumber,\n      v = f.isObject,\n      C = f.isString,\n      H = f.objectEach,\n      y = f.pick,\n      h = f.setAnimation,\n      n = f.splat,\n      q = c.addEvent,\n      g = c.animate,\n      b = c.Axis;\n    f = c.Chart;\n    var a = c.createElement,\n      d = c.css,\n      e = c.fireEvent,\n      l = c.merge,\n      L = c.Point,\n      E = c.Series,\n      p = c.seriesTypes;\n    c.cleanRecursively = function (a, b) {\n      var d = {};\n      H(a, function (e, g) {\n        if (v(a[g], !0) && !a.nodeType && b[g]) e = c.cleanRecursively(a[g], b[g]), Object.keys(e).length && (d[g] = e);else if (v(a[g]) || a[g] !== b[g]) d[g] = a[g];\n      });\n      return d;\n    };\n    z(f.prototype, {\n      addSeries: function (a, b, d) {\n        var c,\n          g = this;\n        a && (b = y(b, !0), e(g, \"addSeries\", {\n          options: a\n        }, function () {\n          c = g.initSeries(a);\n          g.isDirtyLegend = !0;\n          g.linkSeries();\n          e(g, \"afterAddSeries\", {\n            series: c\n          });\n          b && g.redraw(d);\n        }));\n        return c;\n      },\n      addAxis: function (a, b, d, c) {\n        return this.createAxis(b ? \"xAxis\" : \"yAxis\", {\n          axis: a,\n          redraw: d,\n          animation: c\n        });\n      },\n      addColorAxis: function (a, b, d) {\n        return this.createAxis(\"colorAxis\", {\n          axis: a,\n          redraw: b,\n          animation: d\n        });\n      },\n      createAxis: function (a, d) {\n        var e = this.options,\n          g = \"colorAxis\" === a,\n          k = d.redraw,\n          f = d.animation;\n        d = l(d.axis, {\n          index: this[a].length,\n          isX: \"xAxis\" === a\n        });\n        var h = g ? new c.ColorAxis(this, d) : new b(this, d);\n        e[a] = n(e[a] || {});\n        e[a].push(d);\n        g && (this.isDirtyLegend = !0, this.axes.forEach(function (a) {\n          a.series = [];\n        }), this.series.forEach(function (a) {\n          a.bindAxes();\n          a.isDirtyData = !0;\n        }));\n        y(k, !0) && this.redraw(f);\n        return h;\n      },\n      showLoading: function (b) {\n        var c = this,\n          e = c.options,\n          f = c.loadingDiv,\n          h = e.loading,\n          l = function () {\n            f && d(f, {\n              left: c.plotLeft + \"px\",\n              top: c.plotTop + \"px\",\n              width: c.plotWidth + \"px\",\n              height: c.plotHeight + \"px\"\n            });\n          };\n        f || (c.loadingDiv = f = a(\"div\", {\n          className: \"highcharts-loading highcharts-loading-hidden\"\n        }, null, c.container), c.loadingSpan = a(\"span\", {\n          className: \"highcharts-loading-inner\"\n        }, null, f), q(c, \"redraw\", l));\n        f.className = \"highcharts-loading\";\n        c.loadingSpan.innerHTML = y(b, e.lang.loading, \"\");\n        c.styledMode || (d(f, z(h.style, {\n          zIndex: 10\n        })), d(c.loadingSpan, h.labelStyle), c.loadingShown || (d(f, {\n          opacity: 0,\n          display: \"\"\n        }), g(f, {\n          opacity: h.style.opacity || .5\n        }, {\n          duration: h.showDuration || 0\n        })));\n        c.loadingShown = !0;\n        l();\n      },\n      hideLoading: function () {\n        var a = this.options,\n          b = this.loadingDiv;\n        b && (b.className = \"highcharts-loading highcharts-loading-hidden\", this.styledMode || g(b, {\n          opacity: 0\n        }, {\n          duration: a.loading.hideDuration || 100,\n          complete: function () {\n            d(b, {\n              display: \"none\"\n            });\n          }\n        }));\n        this.loadingShown = !1;\n      },\n      propsRequireDirtyBox: \"backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow\".split(\" \"),\n      propsRequireReflow: \"margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft\".split(\" \"),\n      propsRequireUpdateSeries: \"chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip\".split(\" \"),\n      collectionsWithUpdate: \"xAxis yAxis zAxis colorAxis series pane\".split(\" \"),\n      update: function (a, b, d, g) {\n        var k = this,\n          f = {\n            credits: \"addCredits\",\n            title: \"setTitle\",\n            subtitle: \"setSubtitle\",\n            caption: \"setCaption\"\n          },\n          h,\n          p,\n          r,\n          u = a.isResponsiveOptions,\n          q = [];\n        e(k, \"update\", {\n          options: a\n        });\n        u || k.setResponsive(!1, !0);\n        a = c.cleanRecursively(a, k.options);\n        l(!0, k.userOptions, a);\n        if (h = a.chart) {\n          l(!0, k.options.chart, h);\n          \"className\" in h && k.setClassName(h.className);\n          \"reflow\" in h && k.setReflow(h.reflow);\n          if (\"inverted\" in h || \"polar\" in h || \"type\" in h) {\n            k.propFromSeries();\n            var x = !0;\n          }\n          \"alignTicks\" in h && (x = !0);\n          H(h, function (a, b) {\n            -1 !== k.propsRequireUpdateSeries.indexOf(\"chart.\" + b) && (p = !0);\n            -1 !== k.propsRequireDirtyBox.indexOf(b) && (k.isDirtyBox = !0);\n            u || -1 === k.propsRequireReflow.indexOf(b) || (r = !0);\n          });\n          !k.styledMode && \"style\" in h && k.renderer.setStyle(h.style);\n        }\n        !k.styledMode && a.colors && (this.options.colors = a.colors);\n        a.plotOptions && l(!0, this.options.plotOptions, a.plotOptions);\n        a.time && this.time === c.time && (this.time = new c.Time(a.time));\n        H(a, function (a, b) {\n          if (k[b] && \"function\" === typeof k[b].update) k[b].update(a, !1);else if (\"function\" === typeof k[f[b]]) k[f[b]](a);\n          \"chart\" !== b && -1 !== k.propsRequireUpdateSeries.indexOf(b) && (p = !0);\n        });\n        this.collectionsWithUpdate.forEach(function (b) {\n          if (a[b]) {\n            if (\"series\" === b) {\n              var c = [];\n              k[b].forEach(function (a, b) {\n                a.options.isInternal || c.push(y(a.options.index, b));\n              });\n            }\n            n(a[b]).forEach(function (a, e) {\n              (e = F(a.id) && k.get(a.id) || k[b][c ? c[e] : e]) && e.coll === b && (e.update(a, !1), d && (e.touched = !0));\n              !e && d && k.collectionsWithInit[b] && (k.collectionsWithInit[b][0].apply(k, [a].concat(k.collectionsWithInit[b][1] || []).concat([!1])).touched = !0);\n            });\n            d && k[b].forEach(function (a) {\n              a.touched || a.options.isInternal ? delete a.touched : q.push(a);\n            });\n          }\n        });\n        q.forEach(function (a) {\n          a.remove && a.remove(!1);\n        });\n        x && k.axes.forEach(function (a) {\n          a.update({}, !1);\n        });\n        p && k.series.forEach(function (a) {\n          a.update({}, !1);\n        });\n        a.loading && l(!0, k.options.loading, a.loading);\n        x = h && h.width;\n        h = h && h.height;\n        C(h) && (h = c.relativeLength(h, x || k.chartWidth));\n        r || t(x) && x !== k.chartWidth || t(h) && h !== k.chartHeight ? k.setSize(x, h, g) : y(b, !0) && k.redraw(g);\n        e(k, \"afterUpdate\", {\n          options: a,\n          redraw: b,\n          animation: g\n        });\n      },\n      setSubtitle: function (a, b) {\n        this.applyDescription(\"subtitle\", a);\n        this.layOutTitles(b);\n      },\n      setCaption: function (a, b) {\n        this.applyDescription(\"caption\", a);\n        this.layOutTitles(b);\n      }\n    });\n    f.prototype.collectionsWithInit = {\n      xAxis: [f.prototype.addAxis, [!0]],\n      yAxis: [f.prototype.addAxis, [!1]],\n      colorAxis: [f.prototype.addColorAxis, [!1]],\n      series: [f.prototype.addSeries]\n    };\n    z(L.prototype, {\n      update: function (a, b, d, c) {\n        function e() {\n          g.applyOptions(a);\n          null === g.y && f && (g.graphic = f.destroy());\n          v(a, !0) && (f && f.element && a && a.marker && void 0 !== a.marker.symbol && (g.graphic = f.destroy()), a && a.dataLabels && g.dataLabel && (g.dataLabel = g.dataLabel.destroy()), g.connector && (g.connector = g.connector.destroy()));\n          h = g.index;\n          k.updateParallelArrays(g, h);\n          p.data[h] = v(p.data[h], !0) || v(a, !0) ? g.options : y(a, p.data[h]);\n          k.isDirty = k.isDirtyData = !0;\n          !k.fixedBox && k.hasCartesianSeries && (l.isDirtyBox = !0);\n          \"point\" === p.legendType && (l.isDirtyLegend = !0);\n          b && l.redraw(d);\n        }\n        var g = this,\n          k = g.series,\n          f = g.graphic,\n          h,\n          l = k.chart,\n          p = k.options;\n        b = y(b, !0);\n        !1 === c ? e() : g.firePointEvent(\"update\", {\n          options: a\n        }, e);\n      },\n      remove: function (a, b) {\n        this.series.removePoint(this.series.data.indexOf(this), a, b);\n      }\n    });\n    z(E.prototype, {\n      addPoint: function (a, b, d, c, g) {\n        var k = this.options,\n          f = this.data,\n          h = this.chart,\n          l = this.xAxis;\n        l = l && l.hasNames && l.names;\n        var p = k.data,\n          r = this.xData,\n          n;\n        b = y(b, !0);\n        var u = {\n          series: this\n        };\n        this.pointClass.prototype.applyOptions.apply(u, [a]);\n        var q = u.x;\n        var x = r.length;\n        if (this.requireSorting && q < r[x - 1]) for (n = !0; x && r[x - 1] > q;) x--;\n        this.updateParallelArrays(u, \"splice\", x, 0, 0);\n        this.updateParallelArrays(u, x);\n        l && u.name && (l[q] = u.name);\n        p.splice(x, 0, a);\n        n && (this.data.splice(x, 0, null), this.processData());\n        \"point\" === k.legendType && this.generatePoints();\n        d && (f[0] && f[0].remove ? f[0].remove(!1) : (f.shift(), this.updateParallelArrays(u, \"shift\"), p.shift()));\n        !1 !== g && e(this, \"addPoint\", {\n          point: u\n        });\n        this.isDirtyData = this.isDirty = !0;\n        b && h.redraw(c);\n      },\n      removePoint: function (a, b, d) {\n        var c = this,\n          e = c.data,\n          g = e[a],\n          k = c.points,\n          f = c.chart,\n          l = function () {\n            k && k.length === e.length && k.splice(a, 1);\n            e.splice(a, 1);\n            c.options.data.splice(a, 1);\n            c.updateParallelArrays(g || {\n              series: c\n            }, \"splice\", a, 1);\n            g && g.destroy();\n            c.isDirty = !0;\n            c.isDirtyData = !0;\n            b && f.redraw();\n          };\n        h(d, f);\n        b = y(b, !0);\n        g ? g.firePointEvent(\"remove\", null, l) : l();\n      },\n      remove: function (a, b, d, c) {\n        function g() {\n          k.destroy(c);\n          k.remove = null;\n          f.isDirtyLegend = f.isDirtyBox = !0;\n          f.linkSeries();\n          y(a, !0) && f.redraw(b);\n        }\n        var k = this,\n          f = k.chart;\n        !1 !== d ? e(k, \"remove\", null, g) : g();\n      },\n      update: function (a, b) {\n        a = c.cleanRecursively(a, this.userOptions);\n        e(this, \"update\", {\n          options: a\n        });\n        var d = this,\n          g = d.chart,\n          k = d.userOptions,\n          f = d.initialType || d.type,\n          h = a.type || k.type || g.options.chart.type,\n          n = !(this.hasDerivedData || a.dataGrouping || h && h !== this.type || void 0 !== a.pointStart || a.pointInterval || a.pointIntervalUnit || a.keys),\n          u = p[f].prototype,\n          q,\n          v = [\"group\", \"markerGroup\", \"dataLabelsGroup\", \"transformGroup\"],\n          t = [\"eventOptions\", \"navigatorSeries\", \"baseSeries\"],\n          E = d.finishedAnimating && {\n            animation: !1\n          },\n          C = {};\n        n && (t.push(\"data\", \"isDirtyData\", \"points\", \"processedXData\", \"processedYData\", \"xIncrement\", \"_hasPointMarkers\", \"_hasPointLabels\", \"mapMap\", \"mapData\", \"minY\", \"maxY\", \"minX\", \"maxX\"), !1 !== a.visible && t.push(\"area\", \"graph\"), d.parallelArrays.forEach(function (a) {\n          t.push(a + \"Data\");\n        }), a.data && this.setData(a.data, !1));\n        a = l(k, E, {\n          index: void 0 === k.index ? d.index : k.index,\n          pointStart: y(k.pointStart, d.xData[0])\n        }, !n && {\n          data: d.options.data\n        }, a);\n        n && a.data && (a.data = d.options.data);\n        t = v.concat(t);\n        t.forEach(function (a) {\n          t[a] = d[a];\n          delete d[a];\n        });\n        d.remove(!1, null, !1, !0);\n        for (q in u) d[q] = void 0;\n        p[h || f] ? z(d, p[h || f].prototype) : c.error(17, !0, g, {\n          missingModuleFor: h || f\n        });\n        t.forEach(function (a) {\n          d[a] = t[a];\n        });\n        d.init(g, a);\n        if (n && this.points) {\n          var L = d.options;\n          !1 === L.visible ? (C.graphic = 1, C.dataLabel = 1) : d._hasPointLabels || (h = L.marker, u = L.dataLabels, h && (!1 === h.enabled || \"symbol\" in h) && (C.graphic = 1), u && !1 === u.enabled && (C.dataLabel = 1));\n          this.points.forEach(function (a) {\n            a && a.series && (a.resolveColor(), Object.keys(C).length && a.destroyElements(C), !1 === L.showInLegend && a.legendItem && g.legend.destroyItem(a));\n          }, this);\n        }\n        a.zIndex !== k.zIndex && v.forEach(function (b) {\n          d[b] && d[b].attr({\n            zIndex: a.zIndex\n          });\n        });\n        d.initialType = f;\n        g.linkSeries();\n        e(this, \"afterUpdate\");\n        y(b, !0) && g.redraw(n ? void 0 : !1);\n      },\n      setName: function (a) {\n        this.name = this.options.name = this.userOptions.name = a;\n        this.chart.isDirtyLegend = !0;\n      }\n    });\n    z(b.prototype, {\n      update: function (a, b) {\n        var d = this.chart,\n          c = a && a.events || {};\n        a = l(this.userOptions, a);\n        d.options[this.coll].indexOf && (d.options[this.coll][d.options[this.coll].indexOf(this.userOptions)] = a);\n        H(d.options[this.coll].events, function (a, b) {\n          \"undefined\" === typeof c[b] && (c[b] = void 0);\n        });\n        this.destroy(!0);\n        this.init(d, z(a, {\n          events: c\n        }));\n        d.isDirtyBox = !0;\n        y(b, !0) && d.redraw();\n      },\n      remove: function (a) {\n        for (var b = this.chart, d = this.coll, c = this.series, e = c.length; e--;) c[e] && c[e].remove(!1);\n        G(b.axes, this);\n        G(b[d], this);\n        B(b.options[d]) ? b.options[d].splice(this.options.index, 1) : delete b.options[d];\n        b[d].forEach(function (a, b) {\n          a.options.index = a.userOptions.index = b;\n        });\n        this.destroy();\n        b.isDirtyBox = !0;\n        y(a, !0) && b.redraw();\n      },\n      setTitle: function (a, b) {\n        this.update({\n          title: a\n        }, b);\n      },\n      setCategories: function (a, b) {\n        this.update({\n          categories: a\n        }, b);\n      }\n    });\n  });\n  M(I, \"parts/AreaSeries.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.objectEach,\n      G = f.pick,\n      z = c.color,\n      B = c.Series;\n    f = c.seriesType;\n    f(\"area\", \"line\", {\n      softThreshold: !1,\n      threshold: 0\n    }, {\n      singleStacks: !1,\n      getStackPoints: function (c) {\n        var f = [],\n          t = [],\n          z = this.xAxis,\n          y = this.yAxis,\n          h = y.stacks[this.stackKey],\n          n = {},\n          q = this.index,\n          g = y.series,\n          b = g.length,\n          a = G(y.options.reversedStacks, !0) ? 1 : -1,\n          d;\n        c = c || this.points;\n        if (this.options.stacking) {\n          for (d = 0; d < c.length; d++) c[d].leftNull = c[d].rightNull = void 0, n[c[d].x] = c[d];\n          F(h, function (a, b) {\n            null !== a.total && t.push(b);\n          });\n          t.sort(function (a, b) {\n            return a - b;\n          });\n          var e = g.map(function (a) {\n            return a.visible;\n          });\n          t.forEach(function (c, g) {\n            var l = 0,\n              p,\n              u;\n            if (n[c] && !n[c].isNull) f.push(n[c]), [-1, 1].forEach(function (k) {\n              var f = 1 === k ? \"rightNull\" : \"leftNull\",\n                l = 0,\n                v = h[t[g + k]];\n              if (v) for (d = q; 0 <= d && d < b;) p = v.points[d], p || (d === q ? n[c][f] = !0 : e[d] && (u = h[c].points[d]) && (l -= u[1] - u[0])), d += a;\n              n[c][1 === k ? \"rightCliff\" : \"leftCliff\"] = l;\n            });else {\n              for (d = q; 0 <= d && d < b;) {\n                if (p = h[c].points[d]) {\n                  l = p[1];\n                  break;\n                }\n                d += a;\n              }\n              l = y.translate(l, 0, 1, 0, 1);\n              f.push({\n                isNull: !0,\n                plotX: z.translate(c, 0, 0, 0, 1),\n                x: c,\n                plotY: l,\n                yBottom: l\n              });\n            }\n          });\n        }\n        return f;\n      },\n      getGraphPath: function (c) {\n        var f = B.prototype.getGraphPath,\n          t = this.options,\n          z = t.stacking,\n          y = this.yAxis,\n          h,\n          n = [],\n          q = [],\n          g = this.index,\n          b = y.stacks[this.stackKey],\n          a = t.threshold,\n          d = Math.round(y.getThreshold(t.threshold));\n        t = G(t.connectNulls, \"percent\" === z);\n        var e = function (e, f, k) {\n          var h = c[e];\n          e = z && b[h.x].points[g];\n          var l = h[k + \"Null\"] || 0;\n          k = h[k + \"Cliff\"] || 0;\n          h = !0;\n          if (k || l) {\n            var p = (l ? e[0] : e[1]) + k;\n            var u = e[0] + k;\n            h = !!l;\n          } else !z && c[f] && c[f].isNull && (p = u = a);\n          void 0 !== p && (q.push({\n            plotX: L,\n            plotY: null === p ? d : y.getThreshold(p),\n            isNull: h,\n            isCliff: !0\n          }), n.push({\n            plotX: L,\n            plotY: null === u ? d : y.getThreshold(u),\n            doCurve: !1\n          }));\n        };\n        c = c || this.points;\n        z && (c = this.getStackPoints(c));\n        for (h = 0; h < c.length; h++) {\n          z || (c[h].leftCliff = c[h].rightCliff = c[h].leftNull = c[h].rightNull = void 0);\n          var l = c[h].isNull;\n          var L = G(c[h].rectPlotX, c[h].plotX);\n          var E = G(c[h].yBottom, d);\n          if (!l || t) t || e(h, h - 1, \"left\"), l && !z && t || (q.push(c[h]), n.push({\n            x: h,\n            plotX: L,\n            plotY: E\n          })), t || e(h, h + 1, \"right\");\n        }\n        h = f.call(this, q, !0, !0);\n        n.reversed = !0;\n        l = f.call(this, n, !0, !0);\n        l.length && (l[0] = \"L\");\n        l = h.concat(l);\n        f = f.call(this, q, !1, t);\n        l.xMap = h.xMap;\n        this.areaPath = l;\n        return f;\n      },\n      drawGraph: function () {\n        this.areaPath = [];\n        B.prototype.drawGraph.apply(this);\n        var c = this,\n          f = this.areaPath,\n          C = this.options,\n          H = [[\"area\", \"highcharts-area\", this.color, C.fillColor]];\n        this.zones.forEach(function (f, h) {\n          H.push([\"zone-area-\" + h, \"highcharts-area highcharts-zone-area-\" + h + \" \" + f.className, f.color || c.color, f.fillColor || C.fillColor]);\n        });\n        H.forEach(function (v) {\n          var h = v[0],\n            n = c[h],\n            q = n ? \"animate\" : \"attr\",\n            g = {};\n          n ? (n.endX = c.preventGraphAnimation ? null : f.xMap, n.animate({\n            d: f\n          })) : (g.zIndex = 0, n = c[h] = c.chart.renderer.path(f).addClass(v[1]).add(c.group), n.isArea = !0);\n          c.chart.styledMode || (g.fill = G(v[3], z(v[2]).setOpacity(G(C.fillOpacity, .75)).get()));\n          n[q](g);\n          n.startX = f.xMap;\n          n.shiftUnit = C.step ? 2 : 1;\n        });\n      },\n      drawLegendSymbol: c.LegendSymbolMixin.drawRectangle\n    });\n    \"\";\n  });\n  M(I, \"parts/SplineSeries.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.pick;\n    c = c.seriesType;\n    c(\"spline\", \"line\", {}, {\n      getPointSpline: function (c, f, B) {\n        var t = f.plotX,\n          v = f.plotY,\n          C = c[B - 1];\n        B = c[B + 1];\n        if (C && !C.isNull && !1 !== C.doCurve && !f.isCliff && B && !B.isNull && !1 !== B.doCurve && !f.isCliff) {\n          c = C.plotY;\n          var z = B.plotX;\n          B = B.plotY;\n          var y = 0;\n          var h = (1.5 * t + C.plotX) / 2.5;\n          var n = (1.5 * v + c) / 2.5;\n          z = (1.5 * t + z) / 2.5;\n          var q = (1.5 * v + B) / 2.5;\n          z !== h && (y = (q - n) * (z - t) / (z - h) + v - q);\n          n += y;\n          q += y;\n          n > c && n > v ? (n = Math.max(c, v), q = 2 * v - n) : n < c && n < v && (n = Math.min(c, v), q = 2 * v - n);\n          q > B && q > v ? (q = Math.max(B, v), n = 2 * v - q) : q < B && q < v && (q = Math.min(B, v), n = 2 * v - q);\n          f.rightContX = z;\n          f.rightContY = q;\n        }\n        f = [\"C\", F(C.rightContX, C.plotX), F(C.rightContY, C.plotY), F(h, t), F(n, v), t, v];\n        C.rightContX = C.rightContY = null;\n        return f;\n      }\n    });\n    \"\";\n  });\n  M(I, \"parts/AreaSplineSeries.js\", [I[\"parts/Globals.js\"]], function (c) {\n    var f = c.seriesTypes.area.prototype,\n      F = c.seriesType;\n    F(\"areaspline\", \"spline\", c.defaultPlotOptions.area, {\n      getStackPoints: f.getStackPoints,\n      getGraphPath: f.getGraphPath,\n      drawGraph: f.drawGraph,\n      drawLegendSymbol: c.LegendSymbolMixin.drawRectangle\n    });\n    \"\";\n  });\n  M(I, \"parts/ColumnSeries.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.extend,\n      z = f.isNumber,\n      B = f.pick,\n      t = c.animObject,\n      v = c.color,\n      C = c.merge,\n      H = c.Series;\n    f = c.seriesType;\n    var y = c.svg;\n    f(\"column\", \"line\", {\n      borderRadius: 0,\n      crisp: !0,\n      groupPadding: .2,\n      marker: null,\n      pointPadding: .1,\n      minPointLength: 0,\n      cropThreshold: 50,\n      pointRange: null,\n      states: {\n        hover: {\n          halo: !1,\n          brightness: .1\n        },\n        select: {\n          color: \"#cccccc\",\n          borderColor: \"#000000\"\n        }\n      },\n      dataLabels: {\n        align: null,\n        verticalAlign: null,\n        y: null\n      },\n      softThreshold: !1,\n      startFromThreshold: !0,\n      stickyTracking: !1,\n      tooltip: {\n        distance: 6\n      },\n      threshold: 0,\n      borderColor: \"#ffffff\"\n    }, {\n      cropShoulder: 0,\n      directTouch: !0,\n      trackerGroups: [\"group\", \"dataLabelsGroup\"],\n      negStacks: !0,\n      init: function () {\n        H.prototype.init.apply(this, arguments);\n        var c = this,\n          f = c.chart;\n        f.hasRendered && f.series.forEach(function (f) {\n          f.type === c.type && (f.isDirty = !0);\n        });\n      },\n      getColumnMetrics: function () {\n        var c = this,\n          f = c.options,\n          q = c.xAxis,\n          g = c.yAxis,\n          b = q.options.reversedStacks;\n        b = q.reversed && !b || !q.reversed && b;\n        var a,\n          d = {},\n          e = 0;\n        !1 === f.grouping ? e = 1 : c.chart.series.forEach(function (b) {\n          var f = b.yAxis,\n            k = b.options;\n          if (b.type === c.type && (b.visible || !c.chart.options.chart.ignoreHiddenSeries) && g.len === f.len && g.pos === f.pos) {\n            if (k.stacking) {\n              a = b.stackKey;\n              void 0 === d[a] && (d[a] = e++);\n              var h = d[a];\n            } else !1 !== k.grouping && (h = e++);\n            b.columnIndex = h;\n          }\n        });\n        var l = Math.min(Math.abs(q.transA) * (q.ordinalSlope || f.pointRange || q.closestPointRange || q.tickInterval || 1), q.len),\n          v = l * f.groupPadding,\n          t = (l - 2 * v) / (e || 1);\n        f = Math.min(f.maxPointWidth || q.len, B(f.pointWidth, t * (1 - 2 * f.pointPadding)));\n        c.columnMetrics = {\n          width: f,\n          offset: (t - f) / 2 + (v + ((c.columnIndex || 0) + (b ? 1 : 0)) * t - l / 2) * (b ? -1 : 1)\n        };\n        return c.columnMetrics;\n      },\n      crispCol: function (c, f, q, g) {\n        var b = this.chart,\n          a = this.borderWidth,\n          d = -(a % 2 ? .5 : 0);\n        a = a % 2 ? .5 : 1;\n        b.inverted && b.renderer.isVML && (a += 1);\n        this.options.crisp && (q = Math.round(c + q) + d, c = Math.round(c) + d, q -= c);\n        g = Math.round(f + g) + a;\n        d = .5 >= Math.abs(f) && .5 < g;\n        f = Math.round(f) + a;\n        g -= f;\n        d && g && (--f, g += 1);\n        return {\n          x: c,\n          y: f,\n          width: q,\n          height: g\n        };\n      },\n      translate: function () {\n        var c = this,\n          f = c.chart,\n          q = c.options,\n          g = c.dense = 2 > c.closestPointRange * c.xAxis.transA;\n        g = c.borderWidth = B(q.borderWidth, g ? 0 : 1);\n        var b = c.yAxis,\n          a = q.threshold,\n          d = c.translatedThreshold = b.getThreshold(a),\n          e = B(q.minPointLength, 5),\n          l = c.getColumnMetrics(),\n          v = l.width,\n          t = c.barW = Math.max(v, 1 + 2 * g),\n          p = c.pointXOffset = l.offset,\n          u = c.dataMin,\n          k = c.dataMax;\n        f.inverted && (d -= .5);\n        q.pointPadding && (t = Math.ceil(t));\n        H.prototype.translate.apply(c);\n        c.points.forEach(function (g) {\n          var h = B(g.yBottom, d),\n            l = 999 + Math.abs(h),\n            r = v;\n          l = Math.min(Math.max(-l, g.plotY), b.len + l);\n          var m = g.plotX + p,\n            n = t,\n            q = Math.min(l, h),\n            y = Math.max(l, h) - q;\n          if (e && Math.abs(y) < e) {\n            y = e;\n            var E = !b.reversed && !g.negative || b.reversed && g.negative;\n            g.y === a && c.dataMax <= a && b.min < a && u !== k && (E = !E);\n            q = Math.abs(q - d) > e ? h - e : d - (E ? e : 0);\n          }\n          F(g.options.pointWidth) && (r = n = Math.ceil(g.options.pointWidth), m -= Math.round((r - v) / 2));\n          g.barX = m;\n          g.pointWidth = r;\n          g.tooltipPos = f.inverted ? [b.len + b.pos - f.plotLeft - l, c.xAxis.len - m - n / 2, y] : [m + n / 2, l + b.pos - f.plotTop, y];\n          g.shapeType = c.pointClass.prototype.shapeType || \"rect\";\n          g.shapeArgs = c.crispCol.apply(c, g.isNull ? [m, d, n, 0] : [m, q, n, y]);\n        });\n      },\n      getSymbol: c.noop,\n      drawLegendSymbol: c.LegendSymbolMixin.drawRectangle,\n      drawGraph: function () {\n        this.group[this.dense ? \"addClass\" : \"removeClass\"](\"highcharts-dense-data\");\n      },\n      pointAttribs: function (c, f) {\n        var h = this.options,\n          g = this.pointAttrToOptions || {};\n        var b = g.stroke || \"borderColor\";\n        var a = g[\"stroke-width\"] || \"borderWidth\",\n          d = c && c.color || this.color,\n          e = c && c[b] || h[b] || this.color || d,\n          l = c && c[a] || h[a] || this[a] || 0;\n        g = c && c.options.dashStyle || h.dashStyle;\n        var n = B(h.opacity, 1);\n        if (c && this.zones.length) {\n          var t = c.getZone();\n          d = c.options.color || t && (t.color || c.nonZonedColor) || this.color;\n          t && (e = t.borderColor || e, g = t.dashStyle || g, l = t.borderWidth || l);\n        }\n        f && (c = C(h.states[f], c.options.states && c.options.states[f] || {}), f = c.brightness, d = c.color || void 0 !== f && v(d).brighten(c.brightness).get() || d, e = c[b] || e, l = c[a] || l, g = c.dashStyle || g, n = B(c.opacity, n));\n        b = {\n          fill: d,\n          stroke: e,\n          \"stroke-width\": l,\n          opacity: n\n        };\n        g && (b.dashstyle = g);\n        return b;\n      },\n      drawPoints: function () {\n        var c = this,\n          f = this.chart,\n          q = c.options,\n          g = f.renderer,\n          b = q.animationLimit || 250,\n          a;\n        c.points.forEach(function (d) {\n          var e = d.graphic,\n            l = e && f.pointCount < b ? \"animate\" : \"attr\";\n          if (z(d.plotY) && null !== d.y) {\n            a = d.shapeArgs;\n            e && d.hasNewShapeType() && (e = e.destroy());\n            if (e) e[l](C(a));else d.graphic = e = g[d.shapeType](a).add(d.group || c.group);\n            if (q.borderRadius) e[l]({\n              r: q.borderRadius\n            });\n            f.styledMode || e[l](c.pointAttribs(d, d.selected && \"select\")).shadow(!1 !== d.allowShadow && q.shadow, null, q.stacking && !q.borderRadius);\n            e.addClass(d.getClassName(), !0);\n          } else e && (d.graphic = e.destroy());\n        });\n      },\n      animate: function (c) {\n        var f = this,\n          h = this.yAxis,\n          g = f.options,\n          b = this.chart.inverted,\n          a = {},\n          d = b ? \"translateX\" : \"translateY\";\n        if (y) if (c) a.scaleY = .001, c = Math.min(h.pos + h.len, Math.max(h.pos, h.toPixels(g.threshold))), b ? a.translateX = c - h.len : a.translateY = c, f.clipBox && f.setClip(), f.group.attr(a);else {\n          var e = f.group.attr(d);\n          f.group.animate({\n            scaleY: 1\n          }, G(t(f.options.animation), {\n            step: function (b, c) {\n              a[d] = e + c.pos * (h.pos - e);\n              f.group.attr(a);\n            }\n          }));\n          f.animate = null;\n        }\n      },\n      remove: function () {\n        var c = this,\n          f = c.chart;\n        f.hasRendered && f.series.forEach(function (f) {\n          f.type === c.type && (f.isDirty = !0);\n        });\n        H.prototype.remove.apply(c, arguments);\n      }\n    });\n    \"\";\n  });\n  M(I, \"parts/BarSeries.js\", [I[\"parts/Globals.js\"]], function (c) {\n    c = c.seriesType;\n    c(\"bar\", \"column\", null, {\n      inverted: !0\n    });\n    \"\";\n  });\n  M(I, \"parts/ScatterSeries.js\", [I[\"parts/Globals.js\"]], function (c) {\n    var f = c.Series,\n      F = c.seriesType;\n    F(\"scatter\", \"line\", {\n      lineWidth: 0,\n      findNearestPointBy: \"xy\",\n      jitter: {\n        x: 0,\n        y: 0\n      },\n      marker: {\n        enabled: !0\n      },\n      tooltip: {\n        headerFormat: '<span style=\"color:{point.color}\">\\u25cf</span> <span style=\"font-size: 10px\"> {series.name}</span><br/>',\n        pointFormat: \"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>\"\n      }\n    }, {\n      sorted: !1,\n      requireSorting: !1,\n      noSharedTooltip: !0,\n      trackerGroups: [\"group\", \"markerGroup\", \"dataLabelsGroup\"],\n      takeOrdinalPosition: !1,\n      drawGraph: function () {\n        this.options.lineWidth && f.prototype.drawGraph.call(this);\n      },\n      applyJitter: function () {\n        var c = this,\n          f = this.options.jitter,\n          B = this.points.length;\n        f && this.points.forEach(function (t, v) {\n          [\"x\", \"y\"].forEach(function (C, z) {\n            var y = \"plot\" + C.toUpperCase();\n            if (f[C] && !t.isNull) {\n              var h = c[C + \"Axis\"];\n              var n = f[C] * h.transA;\n              if (h && !h.isLog) {\n                var q = Math.max(0, t[y] - n);\n                h = Math.min(h.len, t[y] + n);\n                z = 1E4 * Math.sin(v + z * B);\n                t[y] = q + (h - q) * (z - Math.floor(z));\n                \"x\" === C && (t.clientX = t.plotX);\n              }\n            }\n          });\n        });\n      }\n    });\n    c.addEvent(f, \"afterTranslate\", function () {\n      this.applyJitter && this.applyJitter();\n    });\n    \"\";\n  });\n  M(I, \"mixins/centered-series.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.isNumber,\n      G = f.pick,\n      z = c.deg2rad,\n      B = c.relativeLength;\n    c.CenteredSeriesMixin = {\n      getCenter: function () {\n        var c = this.options,\n          f = this.chart,\n          C = 2 * (c.slicedOffset || 0),\n          z = f.plotWidth - 2 * C;\n        f = f.plotHeight - 2 * C;\n        var y = c.center;\n        y = [G(y[0], \"50%\"), G(y[1], \"50%\"), c.size || \"100%\", c.innerSize || 0];\n        var h = Math.min(z, f),\n          n;\n        for (n = 0; 4 > n; ++n) {\n          var q = y[n];\n          c = 2 > n || 2 === n && /%$/.test(q);\n          y[n] = B(q, [z, f, h, y[2]][n]) + (c ? C : 0);\n        }\n        y[3] > y[2] && (y[3] = y[2]);\n        return y;\n      },\n      getStartAndEndRadians: function (c, f) {\n        c = F(c) ? c : 0;\n        f = F(f) && f > c && 360 > f - c ? f : c + 360;\n        return {\n          start: z * (c + -90),\n          end: z * (f + -90)\n        };\n      }\n    };\n  });\n  M(I, \"parts/PieSeries.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.isNumber,\n      z = f.pick,\n      B = f.setAnimation,\n      t = c.addEvent;\n    f = c.CenteredSeriesMixin;\n    var v = f.getStartAndEndRadians,\n      C = c.merge,\n      H = c.noop,\n      y = c.Point,\n      h = c.Series,\n      n = c.seriesType,\n      q = c.fireEvent;\n    n(\"pie\", \"line\", {\n      center: [null, null],\n      clip: !1,\n      colorByPoint: !0,\n      dataLabels: {\n        allowOverlap: !0,\n        connectorPadding: 5,\n        distance: 30,\n        enabled: !0,\n        formatter: function () {\n          return this.point.isNull ? void 0 : this.point.name;\n        },\n        softConnector: !0,\n        x: 0,\n        connectorShape: \"fixedOffset\",\n        crookDistance: \"70%\"\n      },\n      fillColor: void 0,\n      ignoreHiddenPoint: !0,\n      inactiveOtherPoints: !0,\n      legendType: \"point\",\n      marker: null,\n      size: null,\n      showInLegend: !1,\n      slicedOffset: 10,\n      stickyTracking: !1,\n      tooltip: {\n        followPointer: !0\n      },\n      borderColor: \"#ffffff\",\n      borderWidth: 1,\n      lineWidth: void 0,\n      states: {\n        hover: {\n          brightness: .1\n        }\n      }\n    }, {\n      isCartesian: !1,\n      requireSorting: !1,\n      directTouch: !0,\n      noSharedTooltip: !0,\n      trackerGroups: [\"group\", \"dataLabelsGroup\"],\n      axisTypes: [],\n      pointAttribs: c.seriesTypes.column.prototype.pointAttribs,\n      animate: function (c) {\n        var b = this,\n          a = b.points,\n          d = b.startAngleRad;\n        c || (a.forEach(function (a) {\n          var c = a.graphic,\n            e = a.shapeArgs;\n          c && (c.attr({\n            r: a.startR || b.center[3] / 2,\n            start: d,\n            end: d\n          }), c.animate({\n            r: e.r,\n            start: e.start,\n            end: e.end\n          }, b.options.animation));\n        }), b.animate = null);\n      },\n      hasData: function () {\n        return !!this.processedXData.length;\n      },\n      updateTotals: function () {\n        var c,\n          b = 0,\n          a = this.points,\n          d = a.length,\n          e = this.options.ignoreHiddenPoint;\n        for (c = 0; c < d; c++) {\n          var f = a[c];\n          b += e && !f.visible ? 0 : f.isNull ? 0 : f.y;\n        }\n        this.total = b;\n        for (c = 0; c < d; c++) f = a[c], f.percentage = 0 < b && (f.visible || !e) ? f.y / b * 100 : 0, f.total = b;\n      },\n      generatePoints: function () {\n        h.prototype.generatePoints.call(this);\n        this.updateTotals();\n      },\n      getX: function (c, b, a) {\n        var d = this.center,\n          e = this.radii ? this.radii[a.index] : d[2] / 2;\n        return d[0] + (b ? -1 : 1) * Math.cos(Math.asin(Math.max(Math.min((c - d[1]) / (e + a.labelDistance), 1), -1))) * (e + a.labelDistance) + (0 < a.labelDistance ? (b ? -1 : 1) * this.options.dataLabels.padding : 0);\n      },\n      translate: function (g) {\n        this.generatePoints();\n        var b = 0,\n          a = this.options,\n          d = a.slicedOffset,\n          e = d + (a.borderWidth || 0),\n          f = v(a.startAngle, a.endAngle),\n          h = this.startAngleRad = f.start;\n        f = (this.endAngleRad = f.end) - h;\n        var n = this.points,\n          p = a.dataLabels.distance;\n        a = a.ignoreHiddenPoint;\n        var u,\n          k = n.length;\n        g || (this.center = g = this.getCenter());\n        for (u = 0; u < k; u++) {\n          var r = n[u];\n          var x = h + b * f;\n          if (!a || r.visible) b += r.percentage / 100;\n          var A = h + b * f;\n          r.shapeType = \"arc\";\n          r.shapeArgs = {\n            x: g[0],\n            y: g[1],\n            r: g[2] / 2,\n            innerR: g[3] / 2,\n            start: Math.round(1E3 * x) / 1E3,\n            end: Math.round(1E3 * A) / 1E3\n          };\n          r.labelDistance = z(r.options.dataLabels && r.options.dataLabels.distance, p);\n          r.labelDistance = c.relativeLength(r.labelDistance, r.shapeArgs.r);\n          this.maxLabelDistance = Math.max(this.maxLabelDistance || 0, r.labelDistance);\n          A = (A + x) / 2;\n          A > 1.5 * Math.PI ? A -= 2 * Math.PI : A < -Math.PI / 2 && (A += 2 * Math.PI);\n          r.slicedTranslation = {\n            translateX: Math.round(Math.cos(A) * d),\n            translateY: Math.round(Math.sin(A) * d)\n          };\n          var w = Math.cos(A) * g[2] / 2;\n          var m = Math.sin(A) * g[2] / 2;\n          r.tooltipPos = [g[0] + .7 * w, g[1] + .7 * m];\n          r.half = A < -Math.PI / 2 || A > Math.PI / 2 ? 1 : 0;\n          r.angle = A;\n          x = Math.min(e, r.labelDistance / 5);\n          r.labelPosition = {\n            natural: {\n              x: g[0] + w + Math.cos(A) * r.labelDistance,\n              y: g[1] + m + Math.sin(A) * r.labelDistance\n            },\n            \"final\": {},\n            alignment: 0 > r.labelDistance ? \"center\" : r.half ? \"right\" : \"left\",\n            connectorPosition: {\n              breakAt: {\n                x: g[0] + w + Math.cos(A) * x,\n                y: g[1] + m + Math.sin(A) * x\n              },\n              touchingSliceAt: {\n                x: g[0] + w,\n                y: g[1] + m\n              }\n            }\n          };\n        }\n        q(this, \"afterTranslate\");\n      },\n      drawEmpty: function () {\n        var c = this.options;\n        if (0 === this.total) {\n          var b = this.center[0];\n          var a = this.center[1];\n          this.graph || (this.graph = this.chart.renderer.circle(b, a, 0).addClass(\"highcharts-graph\").add(this.group));\n          this.graph.animate({\n            \"stroke-width\": c.borderWidth,\n            cx: b,\n            cy: a,\n            r: this.center[2] / 2,\n            fill: c.fillColor || \"none\",\n            stroke: c.color || \"#cccccc\"\n          });\n        } else this.graph && (this.graph = this.graph.destroy());\n      },\n      redrawPoints: function () {\n        var c = this,\n          b = c.chart,\n          a = b.renderer,\n          d,\n          e,\n          f,\n          h,\n          n = c.options.shadow;\n        this.drawEmpty();\n        !n || c.shadowGroup || b.styledMode || (c.shadowGroup = a.g(\"shadow\").attr({\n          zIndex: -1\n        }).add(c.group));\n        c.points.forEach(function (g) {\n          var l = {};\n          e = g.graphic;\n          if (!g.isNull && e) {\n            h = g.shapeArgs;\n            d = g.getTranslate();\n            if (!b.styledMode) {\n              var k = g.shadowGroup;\n              n && !k && (k = g.shadowGroup = a.g(\"shadow\").add(c.shadowGroup));\n              k && k.attr(d);\n              f = c.pointAttribs(g, g.selected && \"select\");\n            }\n            g.delayedRendering ? (e.setRadialReference(c.center).attr(h).attr(d), b.styledMode || e.attr(f).attr({\n              \"stroke-linejoin\": \"round\"\n            }).shadow(n, k), g.delayedRendering = !1) : (e.setRadialReference(c.center), b.styledMode || C(!0, l, f), C(!0, l, h, d), e.animate(l));\n            e.attr({\n              visibility: g.visible ? \"inherit\" : \"hidden\"\n            });\n            e.addClass(g.getClassName());\n          } else e && (g.graphic = e.destroy());\n        });\n      },\n      drawPoints: function () {\n        var c = this.chart.renderer;\n        this.points.forEach(function (b) {\n          b.graphic || (b.graphic = c[b.shapeType](b.shapeArgs).add(b.series.group), b.delayedRendering = !0);\n        });\n      },\n      searchPoint: H,\n      sortByAngle: function (c, b) {\n        c.sort(function (a, d) {\n          return void 0 !== a.angle && (d.angle - a.angle) * b;\n        });\n      },\n      drawLegendSymbol: c.LegendSymbolMixin.drawRectangle,\n      getCenter: f.getCenter,\n      getSymbol: H,\n      drawGraph: null\n    }, {\n      init: function () {\n        y.prototype.init.apply(this, arguments);\n        var c = this;\n        c.name = z(c.name, \"Slice\");\n        var b = function (a) {\n          c.slice(\"select\" === a.type);\n        };\n        t(c, \"select\", b);\n        t(c, \"unselect\", b);\n        return c;\n      },\n      isValid: function () {\n        return G(this.y) && 0 <= this.y;\n      },\n      setVisible: function (c, b) {\n        var a = this,\n          d = a.series,\n          e = d.chart,\n          f = d.options.ignoreHiddenPoint;\n        b = z(b, f);\n        c !== a.visible && (a.visible = a.options.visible = c = void 0 === c ? !a.visible : c, d.options.data[d.data.indexOf(a)] = a.options, [\"graphic\", \"dataLabel\", \"connector\", \"shadowGroup\"].forEach(function (b) {\n          if (a[b]) a[b][c ? \"show\" : \"hide\"](!0);\n        }), a.legendItem && e.legend.colorizeItem(a, c), c || \"hover\" !== a.state || a.setState(\"\"), f && (d.isDirty = !0), b && e.redraw());\n      },\n      slice: function (c, b, a) {\n        var d = this.series;\n        B(a, d.chart);\n        z(b, !0);\n        this.sliced = this.options.sliced = F(c) ? c : !this.sliced;\n        d.options.data[d.data.indexOf(this)] = this.options;\n        this.graphic.animate(this.getTranslate());\n        this.shadowGroup && this.shadowGroup.animate(this.getTranslate());\n      },\n      getTranslate: function () {\n        return this.sliced ? this.slicedTranslation : {\n          translateX: 0,\n          translateY: 0\n        };\n      },\n      haloPath: function (c) {\n        var b = this.shapeArgs;\n        return this.sliced || !this.visible ? [] : this.series.chart.renderer.symbols.arc(b.x, b.y, b.r + c, b.r + c, {\n          innerR: b.r - 1,\n          start: b.start,\n          end: b.end\n        });\n      },\n      connectorShapes: {\n        fixedOffset: function (c, b, a) {\n          var d = b.breakAt;\n          b = b.touchingSliceAt;\n          return [\"M\", c.x, c.y].concat(a.softConnector ? [\"C\", c.x + (\"left\" === c.alignment ? -5 : 5), c.y, 2 * d.x - b.x, 2 * d.y - b.y, d.x, d.y] : [\"L\", d.x, d.y]).concat([\"L\", b.x, b.y]);\n        },\n        straight: function (c, b) {\n          b = b.touchingSliceAt;\n          return [\"M\", c.x, c.y, \"L\", b.x, b.y];\n        },\n        crookedLine: function (f, b, a) {\n          b = b.touchingSliceAt;\n          var d = this.series,\n            e = d.center[0],\n            g = d.chart.plotWidth,\n            h = d.chart.plotLeft;\n          d = f.alignment;\n          var n = this.shapeArgs.r;\n          a = c.relativeLength(a.crookDistance, 1);\n          a = \"left\" === d ? e + n + (g + h - e - n) * (1 - a) : h + (e - n) * a;\n          e = [\"L\", a, f.y];\n          if (\"left\" === d ? a > f.x || a < b.x : a < f.x || a > b.x) e = [];\n          return [\"M\", f.x, f.y].concat(e).concat([\"L\", b.x, b.y]);\n        }\n      },\n      getConnectorPath: function () {\n        var c = this.labelPosition,\n          b = this.series.options.dataLabels,\n          a = b.connectorShape,\n          d = this.connectorShapes;\n        d[a] && (a = d[a]);\n        return a.call(this, {\n          x: c.final.x,\n          y: c.final.y,\n          alignment: c.alignment\n        }, c.connectorPosition, b);\n      }\n    });\n    \"\";\n  });\n  M(I, \"parts/DataLabels.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.arrayMax,\n      G = f.defined,\n      z = f.extend,\n      B = f.isArray,\n      t = f.objectEach,\n      v = f.pick,\n      C = f.splat,\n      H = c.format,\n      y = c.merge;\n    f = c.noop;\n    var h = c.relativeLength,\n      n = c.Series,\n      q = c.seriesTypes,\n      g = c.stableSort;\n    c.distribute = function (b, a, d) {\n      function e(a, b) {\n        return a.target - b.target;\n      }\n      var f,\n        h = !0,\n        n = b,\n        p = [];\n      var u = 0;\n      var k = n.reducedLen || a;\n      for (f = b.length; f--;) u += b[f].size;\n      if (u > k) {\n        g(b, function (a, b) {\n          return (b.rank || 0) - (a.rank || 0);\n        });\n        for (u = f = 0; u <= k;) u += b[f].size, f++;\n        p = b.splice(f - 1, b.length);\n      }\n      g(b, e);\n      for (b = b.map(function (a) {\n        return {\n          size: a.size,\n          targets: [a.target],\n          align: v(a.align, .5)\n        };\n      }); h;) {\n        for (f = b.length; f--;) h = b[f], u = (Math.min.apply(0, h.targets) + Math.max.apply(0, h.targets)) / 2, h.pos = Math.min(Math.max(0, u - h.size * h.align), a - h.size);\n        f = b.length;\n        for (h = !1; f--;) 0 < f && b[f - 1].pos + b[f - 1].size > b[f].pos && (b[f - 1].size += b[f].size, b[f - 1].targets = b[f - 1].targets.concat(b[f].targets), b[f - 1].align = .5, b[f - 1].pos + b[f - 1].size > a && (b[f - 1].pos = a - b[f - 1].size), b.splice(f, 1), h = !0);\n      }\n      n.push.apply(n, p);\n      f = 0;\n      b.some(function (b) {\n        var e = 0;\n        if (b.targets.some(function () {\n          n[f].pos = b.pos + e;\n          if (Math.abs(n[f].pos - n[f].target) > d) return n.slice(0, f + 1).forEach(function (a) {\n            delete a.pos;\n          }), n.reducedLen = (n.reducedLen || a) - .1 * a, n.reducedLen > .1 * a && c.distribute(n, a, d), !0;\n          e += n[f].size;\n          f++;\n        })) return !0;\n      });\n      g(n, e);\n    };\n    n.prototype.drawDataLabels = function () {\n      function b(a, b) {\n        var d = b.filter;\n        return d ? (b = d.operator, a = a[d.property], d = d.value, \">\" === b && a > d || \"<\" === b && a < d || \">=\" === b && a >= d || \"<=\" === b && a <= d || \"==\" === b && a == d || \"===\" === b && a === d ? !0 : !1) : !0;\n      }\n      function a(a, b) {\n        var d = [],\n          c;\n        if (B(a) && !B(b)) d = a.map(function (a) {\n          return y(a, b);\n        });else if (B(b) && !B(a)) d = b.map(function (b) {\n          return y(a, b);\n        });else if (B(a) || B(b)) for (c = Math.max(a.length, b.length); c--;) d[c] = y(a[c], b[c]);else d = y(a, b);\n        return d;\n      }\n      var d = this,\n        e = d.chart,\n        f = d.options,\n        g = f.dataLabels,\n        h = d.points,\n        p,\n        n = d.hasRendered || 0,\n        k = c.animObject(f.animation).duration,\n        r = Math.min(k, 200),\n        q = !e.renderer.forExport && v(g.defer, 0 < r),\n        A = e.renderer;\n      g = a(a(e.options.plotOptions && e.options.plotOptions.series && e.options.plotOptions.series.dataLabels, e.options.plotOptions && e.options.plotOptions[d.type] && e.options.plotOptions[d.type].dataLabels), g);\n      c.fireEvent(this, \"drawDataLabels\");\n      if (B(g) || g.enabled || d._hasPointLabels) {\n        var w = d.plotGroup(\"dataLabelsGroup\", \"data-labels\", q && !n ? \"hidden\" : \"inherit\", g.zIndex || 6);\n        q && (w.attr({\n          opacity: +n\n        }), n || setTimeout(function () {\n          var a = d.dataLabelsGroup;\n          a && (d.visible && w.show(!0), a[f.animation ? \"animate\" : \"attr\"]({\n            opacity: 1\n          }, {\n            duration: r\n          }));\n        }, k - r));\n        h.forEach(function (c) {\n          p = C(a(g, c.dlOptions || c.options && c.options.dataLabels));\n          p.forEach(function (a, g) {\n            var k = a.enabled && (!c.isNull || c.dataLabelOnNull) && b(c, a),\n              h = c.dataLabels ? c.dataLabels[g] : c.dataLabel,\n              l = c.connectors ? c.connectors[g] : c.connector,\n              p = v(a.distance, c.labelDistance),\n              m = !h;\n            if (k) {\n              var n = c.getLabelConfig();\n              var r = v(a[c.formatPrefix + \"Format\"], a.format);\n              n = G(r) ? H(r, n, e.time) : (a[c.formatPrefix + \"Formatter\"] || a.formatter).call(n, a);\n              r = a.style;\n              var u = a.rotation;\n              e.styledMode || (r.color = v(a.color, r.color, d.color, \"#000000\"), \"contrast\" === r.color && (c.contrastColor = A.getContrast(c.color || d.color), r.color = !G(p) && a.inside || 0 > p || f.stacking ? c.contrastColor : \"#000000\"), f.cursor && (r.cursor = f.cursor));\n              var q = {\n                r: a.borderRadius || 0,\n                rotation: u,\n                padding: a.padding,\n                zIndex: 1\n              };\n              e.styledMode || (q.fill = a.backgroundColor, q.stroke = a.borderColor, q[\"stroke-width\"] = a.borderWidth);\n              t(q, function (a, b) {\n                void 0 === a && delete q[b];\n              });\n            }\n            !h || k && G(n) ? k && G(n) && (h ? q.text = n : (c.dataLabels = c.dataLabels || [], h = c.dataLabels[g] = u ? A.text(n, 0, -9999).addClass(\"highcharts-data-label\") : A.label(n, 0, -9999, a.shape, null, null, a.useHTML, null, \"data-label\"), g || (c.dataLabel = h), h.addClass(\" highcharts-data-label-color-\" + c.colorIndex + \" \" + (a.className || \"\") + (a.useHTML ? \" highcharts-tracker\" : \"\"))), h.options = a, h.attr(q), e.styledMode || h.css(r).shadow(a.shadow), h.added || h.add(w), a.textPath && !a.useHTML && h.setTextPath(c.getDataLabelPath && c.getDataLabelPath(h) || c.graphic, a.textPath), d.alignDataLabel(c, h, a, null, m)) : (c.dataLabel = c.dataLabel && c.dataLabel.destroy(), c.dataLabels && (1 === c.dataLabels.length ? delete c.dataLabels : delete c.dataLabels[g]), g || delete c.dataLabel, l && (c.connector = c.connector.destroy(), c.connectors && (1 === c.connectors.length ? delete c.connectors : delete c.connectors[g])));\n          });\n        });\n      }\n      c.fireEvent(this, \"afterDrawDataLabels\");\n    };\n    n.prototype.alignDataLabel = function (b, a, d, c, f) {\n      var e = this.chart,\n        g = this.isCartesian && e.inverted,\n        h = v(b.dlBox && b.dlBox.centerX, b.plotX, -9999),\n        l = v(b.plotY, -9999),\n        k = a.getBBox(),\n        n = d.rotation,\n        q = d.align,\n        A = this.visible && (b.series.forceDL || e.isInsidePlot(h, Math.round(l), g) || c && e.isInsidePlot(h, g ? c.x + 1 : c.y + c.height - 1, g)),\n        w = \"justify\" === v(d.overflow, \"justify\");\n      if (A) {\n        var m = e.renderer.fontMetrics(e.styledMode ? void 0 : d.style.fontSize, a).b;\n        c = z({\n          x: g ? this.yAxis.len - l : h,\n          y: Math.round(g ? this.xAxis.len - h : l),\n          width: 0,\n          height: 0\n        }, c);\n        z(d, {\n          width: k.width,\n          height: k.height\n        });\n        n ? (w = !1, h = e.renderer.rotCorr(m, n), h = {\n          x: c.x + d.x + c.width / 2 + h.x,\n          y: c.y + d.y + {\n            top: 0,\n            middle: .5,\n            bottom: 1\n          }[d.verticalAlign] * c.height\n        }, a[f ? \"attr\" : \"animate\"](h).attr({\n          align: q\n        }), l = (n + 720) % 360, l = 180 < l && 360 > l, \"left\" === q ? h.y -= l ? k.height : 0 : \"center\" === q ? (h.x -= k.width / 2, h.y -= k.height / 2) : \"right\" === q && (h.x -= k.width, h.y -= l ? 0 : k.height), a.placed = !0, a.alignAttr = h) : (a.align(d, null, c), h = a.alignAttr);\n        w && 0 <= c.height ? this.justifyDataLabel(a, d, h, k, c, f) : v(d.crop, !0) && (A = e.isInsidePlot(h.x, h.y) && e.isInsidePlot(h.x + k.width, h.y + k.height));\n        if (d.shape && !n) a[f ? \"attr\" : \"animate\"]({\n          anchorX: g ? e.plotWidth - b.plotY : b.plotX,\n          anchorY: g ? e.plotHeight - b.plotX : b.plotY\n        });\n      }\n      A || (a.hide(!0), a.placed = !1);\n    };\n    n.prototype.justifyDataLabel = function (b, a, d, c, f, g) {\n      var e = this.chart,\n        h = a.align,\n        l = a.verticalAlign,\n        k = b.box ? 0 : b.padding || 0;\n      var n = d.x + k;\n      if (0 > n) {\n        \"right\" === h ? (a.align = \"left\", a.inside = !0) : a.x = -n;\n        var q = !0;\n      }\n      n = d.x + c.width - k;\n      n > e.plotWidth && (\"left\" === h ? (a.align = \"right\", a.inside = !0) : a.x = e.plotWidth - n, q = !0);\n      n = d.y + k;\n      0 > n && (\"bottom\" === l ? (a.verticalAlign = \"top\", a.inside = !0) : a.y = -n, q = !0);\n      n = d.y + c.height - k;\n      n > e.plotHeight && (\"top\" === l ? (a.verticalAlign = \"bottom\", a.inside = !0) : a.y = e.plotHeight - n, q = !0);\n      q && (b.placed = !g, b.align(a, null, f));\n      return q;\n    };\n    q.pie && (q.pie.prototype.dataLabelPositioners = {\n      radialDistributionY: function (b) {\n        return b.top + b.distributeBox.pos;\n      },\n      radialDistributionX: function (b, a, d, c) {\n        return b.getX(d < a.top + 2 || d > a.bottom - 2 ? c : d, a.half, a);\n      },\n      justify: function (b, a, d) {\n        return d[0] + (b.half ? -1 : 1) * (a + b.labelDistance);\n      },\n      alignToPlotEdges: function (b, a, d, c) {\n        b = b.getBBox().width;\n        return a ? b + c : d - b - c;\n      },\n      alignToConnectors: function (b, a, d, c) {\n        var e = 0,\n          f;\n        b.forEach(function (a) {\n          f = a.dataLabel.getBBox().width;\n          f > e && (e = f);\n        });\n        return a ? e + c : d - e - c;\n      }\n    }, q.pie.prototype.drawDataLabels = function () {\n      var b = this,\n        a = b.data,\n        d,\n        e = b.chart,\n        f = b.options.dataLabels,\n        g = f.connectorPadding,\n        h,\n        p = e.plotWidth,\n        u = e.plotHeight,\n        k = e.plotLeft,\n        r = Math.round(e.chartWidth / 3),\n        q,\n        A = b.center,\n        w = A[2] / 2,\n        m = A[1],\n        t,\n        z,\n        C,\n        B,\n        H = [[], []],\n        I,\n        D,\n        N,\n        M,\n        R = [0, 0, 0, 0],\n        P = b.dataLabelPositioners,\n        W;\n      b.visible && (f.enabled || b._hasPointLabels) && (a.forEach(function (a) {\n        a.dataLabel && a.visible && a.dataLabel.shortened && (a.dataLabel.attr({\n          width: \"auto\"\n        }).css({\n          width: \"auto\",\n          textOverflow: \"clip\"\n        }), a.dataLabel.shortened = !1);\n      }), n.prototype.drawDataLabels.apply(b), a.forEach(function (a) {\n        a.dataLabel && (a.visible ? (H[a.half].push(a), a.dataLabel._pos = null, !G(f.style.width) && !G(a.options.dataLabels && a.options.dataLabels.style && a.options.dataLabels.style.width) && a.dataLabel.getBBox().width > r && (a.dataLabel.css({\n          width: .7 * r\n        }), a.dataLabel.shortened = !0)) : (a.dataLabel = a.dataLabel.destroy(), a.dataLabels && 1 === a.dataLabels.length && delete a.dataLabels));\n      }), H.forEach(function (a, h) {\n        var l = a.length,\n          n = [],\n          r;\n        if (l) {\n          b.sortByAngle(a, h - .5);\n          if (0 < b.maxLabelDistance) {\n            var q = Math.max(0, m - w - b.maxLabelDistance);\n            var x = Math.min(m + w + b.maxLabelDistance, e.plotHeight);\n            a.forEach(function (a) {\n              0 < a.labelDistance && a.dataLabel && (a.top = Math.max(0, m - w - a.labelDistance), a.bottom = Math.min(m + w + a.labelDistance, e.plotHeight), r = a.dataLabel.getBBox().height || 21, a.distributeBox = {\n                target: a.labelPosition.natural.y - a.top + r / 2,\n                size: r,\n                rank: a.y\n              }, n.push(a.distributeBox));\n            });\n            q = x + r - q;\n            c.distribute(n, q, q / 5);\n          }\n          for (M = 0; M < l; M++) {\n            d = a[M];\n            C = d.labelPosition;\n            t = d.dataLabel;\n            N = !1 === d.visible ? \"hidden\" : \"inherit\";\n            D = q = C.natural.y;\n            n && G(d.distributeBox) && (void 0 === d.distributeBox.pos ? N = \"hidden\" : (B = d.distributeBox.size, D = P.radialDistributionY(d)));\n            delete d.positionIndex;\n            if (f.justify) I = P.justify(d, w, A);else switch (f.alignTo) {\n              case \"connectors\":\n                I = P.alignToConnectors(a, h, p, k);\n                break;\n              case \"plotEdges\":\n                I = P.alignToPlotEdges(t, h, p, k);\n                break;\n              default:\n                I = P.radialDistributionX(b, d, D, q);\n            }\n            t._attr = {\n              visibility: N,\n              align: C.alignment\n            };\n            t._pos = {\n              x: I + f.x + ({\n                left: g,\n                right: -g\n              }[C.alignment] || 0),\n              y: D + f.y - 10\n            };\n            C.final.x = I;\n            C.final.y = D;\n            v(f.crop, !0) && (z = t.getBBox().width, q = null, I - z < g && 1 === h ? (q = Math.round(z - I + g), R[3] = Math.max(q, R[3])) : I + z > p - g && 0 === h && (q = Math.round(I + z - p + g), R[1] = Math.max(q, R[1])), 0 > D - B / 2 ? R[0] = Math.max(Math.round(-D + B / 2), R[0]) : D + B / 2 > u && (R[2] = Math.max(Math.round(D + B / 2 - u), R[2])), t.sideOverflow = q);\n          }\n        }\n      }), 0 === F(R) || this.verifyDataLabelOverflow(R)) && (this.placeDataLabels(), this.points.forEach(function (a) {\n        W = y(f, a.options.dataLabels);\n        if (h = v(W.connectorWidth, 1)) {\n          var d;\n          q = a.connector;\n          if ((t = a.dataLabel) && t._pos && a.visible && 0 < a.labelDistance) {\n            N = t._attr.visibility;\n            if (d = !q) a.connector = q = e.renderer.path().addClass(\"highcharts-data-label-connector  highcharts-color-\" + a.colorIndex + (a.className ? \" \" + a.className : \"\")).add(b.dataLabelsGroup), e.styledMode || q.attr({\n              \"stroke-width\": h,\n              stroke: W.connectorColor || a.color || \"#666666\"\n            });\n            q[d ? \"attr\" : \"animate\"]({\n              d: a.getConnectorPath()\n            });\n            q.attr(\"visibility\", N);\n          } else q && (a.connector = q.destroy());\n        }\n      }));\n    }, q.pie.prototype.placeDataLabels = function () {\n      this.points.forEach(function (b) {\n        var a = b.dataLabel,\n          d;\n        a && b.visible && ((d = a._pos) ? (a.sideOverflow && (a._attr.width = Math.max(a.getBBox().width - a.sideOverflow, 0), a.css({\n          width: a._attr.width + \"px\",\n          textOverflow: (this.options.dataLabels.style || {}).textOverflow || \"ellipsis\"\n        }), a.shortened = !0), a.attr(a._attr), a[a.moved ? \"animate\" : \"attr\"](d), a.moved = !0) : a && a.attr({\n          y: -9999\n        }));\n        delete b.distributeBox;\n      }, this);\n    }, q.pie.prototype.alignDataLabel = f, q.pie.prototype.verifyDataLabelOverflow = function (b) {\n      var a = this.center,\n        d = this.options,\n        c = d.center,\n        f = d.minSize || 80,\n        g = null !== d.size;\n      if (!g) {\n        if (null !== c[0]) var n = Math.max(a[2] - Math.max(b[1], b[3]), f);else n = Math.max(a[2] - b[1] - b[3], f), a[0] += (b[3] - b[1]) / 2;\n        null !== c[1] ? n = Math.max(Math.min(n, a[2] - Math.max(b[0], b[2])), f) : (n = Math.max(Math.min(n, a[2] - b[0] - b[2]), f), a[1] += (b[0] - b[2]) / 2);\n        n < a[2] ? (a[2] = n, a[3] = Math.min(h(d.innerSize || 0, n), n), this.translate(a), this.drawDataLabels && this.drawDataLabels()) : g = !0;\n      }\n      return g;\n    });\n    q.column && (q.column.prototype.alignDataLabel = function (b, a, d, c, f) {\n      var e = this.chart.inverted,\n        g = b.series,\n        h = b.dlBox || b.shapeArgs,\n        l = v(b.below, b.plotY > v(this.translatedThreshold, g.yAxis.len)),\n        k = v(d.inside, !!this.options.stacking);\n      h && (c = y(h), 0 > c.y && (c.height += c.y, c.y = 0), h = c.y + c.height - g.yAxis.len, 0 < h && (c.height -= h), e && (c = {\n        x: g.yAxis.len - c.y - c.height,\n        y: g.xAxis.len - c.x - c.width,\n        width: c.height,\n        height: c.width\n      }), k || (e ? (c.x += l ? 0 : c.width, c.width = 0) : (c.y += l ? c.height : 0, c.height = 0)));\n      d.align = v(d.align, !e || k ? \"center\" : l ? \"right\" : \"left\");\n      d.verticalAlign = v(d.verticalAlign, e || k ? \"middle\" : l ? \"top\" : \"bottom\");\n      n.prototype.alignDataLabel.call(this, b, a, d, c, f);\n      d.inside && b.contrastColor && a.css({\n        color: b.contrastColor\n      });\n    });\n  });\n  M(I, \"modules/overlapping-datalabels.src.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.isArray,\n      G = f.objectEach,\n      z = f.pick;\n    f = c.Chart;\n    var B = c.addEvent,\n      t = c.fireEvent;\n    B(f, \"render\", function () {\n      var c = [];\n      (this.labelCollectors || []).forEach(function (f) {\n        c = c.concat(f());\n      });\n      (this.yAxis || []).forEach(function (f) {\n        f.options.stackLabels && !f.options.stackLabels.allowOverlap && G(f.stacks, function (f) {\n          G(f, function (f) {\n            c.push(f.label);\n          });\n        });\n      });\n      (this.series || []).forEach(function (f) {\n        var v = f.options.dataLabels;\n        f.visible && (!1 !== v.enabled || f._hasPointLabels) && f.points.forEach(function (f) {\n          f.visible && (F(f.dataLabels) ? f.dataLabels : f.dataLabel ? [f.dataLabel] : []).forEach(function (h) {\n            var n = h.options;\n            h.labelrank = z(n.labelrank, f.labelrank, f.shapeArgs && f.shapeArgs.height);\n            n.allowOverlap || c.push(h);\n          });\n        });\n      });\n      this.hideOverlappingLabels(c);\n    });\n    f.prototype.hideOverlappingLabels = function (c) {\n      var f = this,\n        v = c.length,\n        y = f.renderer,\n        h,\n        n,\n        q;\n      var g = function (a) {\n        var b = a.box ? 0 : a.padding || 0;\n        var d = 0;\n        if (a && (!a.alignAttr || a.placed)) {\n          var c = a.attr(\"x\");\n          var f = a.attr(\"y\");\n          c = \"number\" === typeof c && \"number\" === typeof f ? {\n            x: c,\n            y: f\n          } : a.alignAttr;\n          f = a.parentGroup;\n          a.width || (d = a.getBBox(), a.width = d.width, a.height = d.height, d = y.fontMetrics(null, a.element).h);\n          return {\n            x: c.x + (f.translateX || 0) + b,\n            y: c.y + (f.translateY || 0) + b - d,\n            width: a.width - 2 * b,\n            height: a.height - 2 * b\n          };\n        }\n      };\n      for (n = 0; n < v; n++) if (h = c[n]) h.oldOpacity = h.opacity, h.newOpacity = 1, h.absoluteBox = g(h);\n      c.sort(function (a, b) {\n        return (b.labelrank || 0) - (a.labelrank || 0);\n      });\n      for (n = 0; n < v; n++) {\n        var b = (g = c[n]) && g.absoluteBox;\n        for (h = n + 1; h < v; ++h) {\n          var a = (q = c[h]) && q.absoluteBox;\n          !b || !a || g === q || 0 === g.newOpacity || 0 === q.newOpacity || a.x > b.x + b.width || a.x + a.width < b.x || a.y > b.y + b.height || a.y + a.height < b.y || ((g.labelrank < q.labelrank ? g : q).newOpacity = 0);\n        }\n      }\n      c.forEach(function (a) {\n        var b;\n        if (a) {\n          var d = a.newOpacity;\n          a.oldOpacity !== d && (a.alignAttr && a.placed ? (d ? a.show(!0) : b = function () {\n            a.hide(!0);\n            a.placed = !1;\n          }, a.alignAttr.opacity = d, a[a.isOld ? \"animate\" : \"attr\"](a.alignAttr, null, b), t(f, \"afterHideOverlappingLabels\")) : a.attr({\n            opacity: d\n          }));\n          a.isOld = !0;\n        }\n      });\n    };\n  });\n  M(I, \"parts/Interaction.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.defined,\n      G = f.extend,\n      z = f.isArray,\n      B = f.isObject,\n      t = f.objectEach,\n      v = f.pick,\n      C = c.addEvent;\n    f = c.Chart;\n    var H = c.createElement,\n      y = c.css,\n      h = c.defaultOptions,\n      n = c.defaultPlotOptions,\n      q = c.fireEvent,\n      g = c.hasTouch,\n      b = c.Legend,\n      a = c.merge,\n      d = c.Point,\n      e = c.Series,\n      l = c.seriesTypes,\n      I = c.svg;\n    var E = c.TrackerMixin = {\n      drawTrackerPoint: function () {\n        var a = this,\n          b = a.chart,\n          d = b.pointer,\n          c = function (a) {\n            var b = d.getPointFromEvent(a);\n            void 0 !== b && (d.isDirectTouch = !0, b.onMouseOver(a));\n          },\n          e;\n        a.points.forEach(function (a) {\n          e = z(a.dataLabels) ? a.dataLabels : a.dataLabel ? [a.dataLabel] : [];\n          a.graphic && (a.graphic.element.point = a);\n          e.forEach(function (b) {\n            b.div ? b.div.point = a : b.element.point = a;\n          });\n        });\n        a._hasTracking || (a.trackerGroups.forEach(function (e) {\n          if (a[e]) {\n            a[e].addClass(\"highcharts-tracker\").on(\"mouseover\", c).on(\"mouseout\", function (a) {\n              d.onTrackerMouseOut(a);\n            });\n            if (g) a[e].on(\"touchstart\", c);\n            !b.styledMode && a.options.cursor && a[e].css(y).css({\n              cursor: a.options.cursor\n            });\n          }\n        }), a._hasTracking = !0);\n        q(this, \"afterDrawTracker\");\n      },\n      drawTrackerGraph: function () {\n        var a = this,\n          b = a.options,\n          d = b.trackByArea,\n          c = [].concat(d ? a.areaPath : a.graphPath),\n          e = c.length,\n          f = a.chart,\n          h = f.pointer,\n          l = f.renderer,\n          n = f.options.tooltip.snap,\n          v = a.tracker,\n          t,\n          y = function () {\n            if (f.hoverSeries !== a) a.onMouseOver();\n          },\n          z = \"rgba(192,192,192,\" + (I ? .0001 : .002) + \")\";\n        if (e && !d) for (t = e + 1; t--;) \"M\" === c[t] && c.splice(t + 1, 0, c[t + 1] - n, c[t + 2], \"L\"), (t && \"M\" === c[t] || t === e) && c.splice(t, 0, \"L\", c[t - 2] + n, c[t - 1]);\n        v ? v.attr({\n          d: c\n        }) : a.graph && (a.tracker = l.path(c).attr({\n          visibility: a.visible ? \"visible\" : \"hidden\",\n          zIndex: 2\n        }).addClass(d ? \"highcharts-tracker-area\" : \"highcharts-tracker-line\").add(a.group), f.styledMode || a.tracker.attr({\n          \"stroke-linejoin\": \"round\",\n          stroke: z,\n          fill: d ? z : \"none\",\n          \"stroke-width\": a.graph.strokeWidth() + (d ? 0 : 2 * n)\n        }), [a.tracker, a.markerGroup].forEach(function (a) {\n          a.addClass(\"highcharts-tracker\").on(\"mouseover\", y).on(\"mouseout\", function (a) {\n            h.onTrackerMouseOut(a);\n          });\n          b.cursor && !f.styledMode && a.css({\n            cursor: b.cursor\n          });\n          if (g) a.on(\"touchstart\", y);\n        }));\n        q(this, \"afterDrawTracker\");\n      }\n    };\n    l.column && (l.column.prototype.drawTracker = E.drawTrackerPoint);\n    l.pie && (l.pie.prototype.drawTracker = E.drawTrackerPoint);\n    l.scatter && (l.scatter.prototype.drawTracker = E.drawTrackerPoint);\n    G(b.prototype, {\n      setItemEvents: function (b, c, e) {\n        var f = this,\n          g = f.chart.renderer.boxWrapper,\n          k = b instanceof d,\n          h = \"highcharts-legend-\" + (k ? \"point\" : \"series\") + \"-active\",\n          l = f.chart.styledMode;\n        (e ? c : b.legendGroup).on(\"mouseover\", function () {\n          b.visible && f.allItems.forEach(function (a) {\n            b !== a && a.setState(\"inactive\", !k);\n          });\n          b.setState(\"hover\");\n          b.visible && g.addClass(h);\n          l || c.css(f.options.itemHoverStyle);\n        }).on(\"mouseout\", function () {\n          f.chart.styledMode || c.css(a(b.visible ? f.itemStyle : f.itemHiddenStyle));\n          f.allItems.forEach(function (a) {\n            b !== a && a.setState(\"\", !k);\n          });\n          g.removeClass(h);\n          b.setState();\n        }).on(\"click\", function (a) {\n          var c = function () {\n            b.setVisible && b.setVisible();\n            f.allItems.forEach(function (a) {\n              b !== a && a.setState(b.visible ? \"inactive\" : \"\", !k);\n            });\n          };\n          g.removeClass(h);\n          a = {\n            browserEvent: a\n          };\n          b.firePointEvent ? b.firePointEvent(\"legendItemClick\", a, c) : q(b, \"legendItemClick\", a, c);\n        });\n      },\n      createCheckboxForItem: function (a) {\n        a.checkbox = H(\"input\", {\n          type: \"checkbox\",\n          className: \"highcharts-legend-checkbox\",\n          checked: a.selected,\n          defaultChecked: a.selected\n        }, this.options.itemCheckboxStyle, this.chart.container);\n        C(a.checkbox, \"click\", function (b) {\n          q(a.series || a, \"checkboxClick\", {\n            checked: b.target.checked,\n            item: a\n          }, function () {\n            a.select();\n          });\n        });\n      }\n    });\n    G(f.prototype, {\n      showResetZoom: function () {\n        function a() {\n          b.zoomOut();\n        }\n        var b = this,\n          c = h.lang,\n          d = b.options.chart.resetZoomButton,\n          e = d.theme,\n          f = e.states,\n          g = \"chart\" === d.relativeTo || \"spaceBox\" === d.relativeTo ? null : \"plotBox\";\n        q(this, \"beforeShowResetZoom\", null, function () {\n          b.resetZoomButton = b.renderer.button(c.resetZoom, null, null, a, e, f && f.hover).attr({\n            align: d.position.align,\n            title: c.resetZoomTitle\n          }).addClass(\"highcharts-reset-zoom\").add().align(d.position, !1, g);\n        });\n        q(this, \"afterShowResetZoom\");\n      },\n      zoomOut: function () {\n        q(this, \"selection\", {\n          resetSelection: !0\n        }, this.zoom);\n      },\n      zoom: function (a) {\n        var b = this,\n          c,\n          d = b.pointer,\n          e = !1,\n          f = b.inverted ? d.mouseDownX : d.mouseDownY;\n        !a || a.resetSelection ? (b.axes.forEach(function (a) {\n          c = a.zoom();\n        }), d.initiated = !1) : a.xAxis.concat(a.yAxis).forEach(function (a) {\n          var g = a.axis,\n            k = b.inverted ? g.left : g.top,\n            h = b.inverted ? k + g.width : k + g.height,\n            l = g.isXAxis,\n            m = !1;\n          if (!l && f >= k && f <= h || l || !F(f)) m = !0;\n          d[l ? \"zoomX\" : \"zoomY\"] && m && (c = g.zoom(a.min, a.max), g.displayBtn && (e = !0));\n        });\n        var g = b.resetZoomButton;\n        e && !g ? b.showResetZoom() : !e && B(g) && (b.resetZoomButton = g.destroy());\n        c && b.redraw(v(b.options.chart.animation, a && a.animation, 100 > b.pointCount));\n      },\n      pan: function (a, b) {\n        var c = this,\n          d = c.hoverPoints,\n          e;\n        q(this, \"pan\", {\n          originalEvent: a\n        }, function () {\n          d && d.forEach(function (a) {\n            a.setState();\n          });\n          (\"xy\" === b ? [1, 0] : [1]).forEach(function (b) {\n            b = c[b ? \"xAxis\" : \"yAxis\"][0];\n            var d = b.horiz,\n              f = a[d ? \"chartX\" : \"chartY\"];\n            d = d ? \"mouseDownX\" : \"mouseDownY\";\n            var g = c[d],\n              k = (b.pointRange || 0) / 2,\n              h = b.reversed && !c.inverted || !b.reversed && c.inverted ? -1 : 1,\n              l = b.getExtremes(),\n              n = b.toValue(g - f, !0) + k * h;\n            h = b.toValue(g + b.len - f, !0) - k * h;\n            var p = h < n;\n            g = p ? h : n;\n            n = p ? n : h;\n            h = Math.min(l.dataMin, k ? l.min : b.toValue(b.toPixels(l.min) - b.minPixelPadding));\n            k = Math.max(l.dataMax, k ? l.max : b.toValue(b.toPixels(l.max) + b.minPixelPadding));\n            p = h - g;\n            0 < p && (n += p, g = h);\n            p = n - k;\n            0 < p && (n = k, g -= p);\n            b.series.length && g !== l.min && n !== l.max && (b.setExtremes(g, n, !1, !1, {\n              trigger: \"pan\"\n            }), e = !0);\n            c[d] = f;\n          });\n          e && c.redraw(!1);\n          y(c.container, {\n            cursor: \"move\"\n          });\n        });\n      }\n    });\n    G(d.prototype, {\n      select: function (a, b) {\n        var c = this,\n          d = c.series,\n          e = d.chart;\n        this.selectedStaging = a = v(a, !c.selected);\n        c.firePointEvent(a ? \"select\" : \"unselect\", {\n          accumulate: b\n        }, function () {\n          c.selected = c.options.selected = a;\n          d.options.data[d.data.indexOf(c)] = c.options;\n          c.setState(a && \"select\");\n          b || e.getSelectedPoints().forEach(function (a) {\n            var b = a.series;\n            a.selected && a !== c && (a.selected = a.options.selected = !1, b.options.data[b.data.indexOf(a)] = a.options, a.setState(e.hoverPoints && b.options.inactiveOtherPoints ? \"inactive\" : \"\"), a.firePointEvent(\"unselect\"));\n          });\n        });\n        delete this.selectedStaging;\n      },\n      onMouseOver: function (a) {\n        var b = this.series.chart,\n          c = b.pointer;\n        a = a ? c.normalize(a) : c.getChartCoordinatesFromPoint(this, b.inverted);\n        c.runPointActions(a, this);\n      },\n      onMouseOut: function () {\n        var a = this.series.chart;\n        this.firePointEvent(\"mouseOut\");\n        this.series.options.inactiveOtherPoints || (a.hoverPoints || []).forEach(function (a) {\n          a.setState();\n        });\n        a.hoverPoints = a.hoverPoint = null;\n      },\n      importEvents: function () {\n        if (!this.hasImportedEvents) {\n          var b = this,\n            d = a(b.series.options.point, b.options).events;\n          b.events = d;\n          t(d, function (a, d) {\n            c.isFunction(a) && C(b, d, a);\n          });\n          this.hasImportedEvents = !0;\n        }\n      },\n      setState: function (a, b) {\n        var c = this.series,\n          d = this.state,\n          e = c.options.states[a || \"normal\"] || {},\n          f = n[c.type].marker && c.options.marker,\n          g = f && !1 === f.enabled,\n          h = f && f.states && f.states[a || \"normal\"] || {},\n          l = !1 === h.enabled,\n          p = c.stateMarkerGraphic,\n          u = this.marker || {},\n          t = c.chart,\n          y = c.halo,\n          z,\n          B = f && c.markerAttribs;\n        a = a || \"\";\n        if (!(a === this.state && !b || this.selected && \"select\" !== a || !1 === e.enabled || a && (l || g && !1 === h.enabled) || a && u.states && u.states[a] && !1 === u.states[a].enabled)) {\n          this.state = a;\n          B && (z = c.markerAttribs(this, a));\n          if (this.graphic) {\n            d && this.graphic.removeClass(\"highcharts-point-\" + d);\n            a && this.graphic.addClass(\"highcharts-point-\" + a);\n            if (!t.styledMode) {\n              var C = c.pointAttribs(this, a);\n              var H = v(t.options.chart.animation, e.animation);\n              c.options.inactiveOtherPoints && ((this.dataLabels || []).forEach(function (a) {\n                a && a.animate({\n                  opacity: C.opacity\n                }, H);\n              }), this.connector && this.connector.animate({\n                opacity: C.opacity\n              }, H));\n              this.graphic.animate(C, H);\n            }\n            z && this.graphic.animate(z, v(t.options.chart.animation, h.animation, f.animation));\n            p && p.hide();\n          } else {\n            if (a && h) {\n              d = u.symbol || c.symbol;\n              p && p.currentSymbol !== d && (p = p.destroy());\n              if (z) if (p) p[b ? \"animate\" : \"attr\"]({\n                x: z.x,\n                y: z.y\n              });else d && (c.stateMarkerGraphic = p = t.renderer.symbol(d, z.x, z.y, z.width, z.height).add(c.markerGroup), p.currentSymbol = d);\n              !t.styledMode && p && p.attr(c.pointAttribs(this, a));\n            }\n            p && (p[a && this.isInside ? \"show\" : \"hide\"](), p.element.point = this);\n          }\n          a = e.halo;\n          e = (p = this.graphic || p) && p.visibility || \"inherit\";\n          a && a.size && p && \"hidden\" !== e ? (y || (c.halo = y = t.renderer.path().add(p.parentGroup)), y.show()[b ? \"animate\" : \"attr\"]({\n            d: this.haloPath(a.size)\n          }), y.attr({\n            \"class\": \"highcharts-halo highcharts-color-\" + v(this.colorIndex, c.colorIndex) + (this.className ? \" \" + this.className : \"\"),\n            visibility: e,\n            zIndex: -1\n          }), y.point = this, t.styledMode || y.attr(G({\n            fill: this.color || c.color,\n            \"fill-opacity\": a.opacity\n          }, a.attributes))) : y && y.point && y.point.haloPath && y.animate({\n            d: y.point.haloPath(0)\n          }, null, y.hide);\n          q(this, \"afterSetState\");\n        }\n      },\n      haloPath: function (a) {\n        return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX) - a, this.plotY - a, 2 * a, 2 * a);\n      }\n    });\n    G(e.prototype, {\n      onMouseOver: function () {\n        var a = this.chart,\n          b = a.hoverSeries;\n        if (b && b !== this) b.onMouseOut();\n        this.options.events.mouseOver && q(this, \"mouseOver\");\n        this.setState(\"hover\");\n        a.hoverSeries = this;\n      },\n      onMouseOut: function () {\n        var a = this.options,\n          b = this.chart,\n          c = b.tooltip,\n          d = b.hoverPoint;\n        b.hoverSeries = null;\n        if (d) d.onMouseOut();\n        this && a.events.mouseOut && q(this, \"mouseOut\");\n        !c || this.stickyTracking || c.shared && !this.noSharedTooltip || c.hide();\n        b.series.forEach(function (a) {\n          a.setState(\"\", !0);\n        });\n      },\n      setState: function (a, b) {\n        var c = this,\n          d = c.options,\n          e = c.graph,\n          f = d.inactiveOtherPoints,\n          g = d.states,\n          h = d.lineWidth,\n          l = d.opacity,\n          n = v(g[a || \"normal\"] && g[a || \"normal\"].animation, c.chart.options.chart.animation);\n        d = 0;\n        a = a || \"\";\n        if (c.state !== a && ([c.group, c.markerGroup, c.dataLabelsGroup].forEach(function (b) {\n          b && (c.state && b.removeClass(\"highcharts-series-\" + c.state), a && b.addClass(\"highcharts-series-\" + a));\n        }), c.state = a, !c.chart.styledMode)) {\n          if (g[a] && !1 === g[a].enabled) return;\n          a && (h = g[a].lineWidth || h + (g[a].lineWidthPlus || 0), l = v(g[a].opacity, l));\n          if (e && !e.dashstyle) for (g = {\n            \"stroke-width\": h\n          }, e.animate(g, n); c[\"zone-graph-\" + d];) c[\"zone-graph-\" + d].attr(g), d += 1;\n          f || [c.group, c.markerGroup, c.dataLabelsGroup, c.labelBySeries].forEach(function (a) {\n            a && a.animate({\n              opacity: l\n            }, n);\n          });\n        }\n        b && f && c.points && c.setAllPointsToState(a);\n      },\n      setAllPointsToState: function (a) {\n        this.points.forEach(function (b) {\n          b.setState && b.setState(a);\n        });\n      },\n      setVisible: function (a, b) {\n        var c = this,\n          d = c.chart,\n          e = c.legendItem,\n          f = d.options.chart.ignoreHiddenSeries,\n          g = c.visible;\n        var h = (c.visible = a = c.options.visible = c.userOptions.visible = void 0 === a ? !g : a) ? \"show\" : \"hide\";\n        [\"group\", \"dataLabelsGroup\", \"markerGroup\", \"tracker\", \"tt\"].forEach(function (a) {\n          if (c[a]) c[a][h]();\n        });\n        if (d.hoverSeries === c || (d.hoverPoint && d.hoverPoint.series) === c) c.onMouseOut();\n        e && d.legend.colorizeItem(c, a);\n        c.isDirty = !0;\n        c.options.stacking && d.series.forEach(function (a) {\n          a.options.stacking && a.visible && (a.isDirty = !0);\n        });\n        c.linkedSeries.forEach(function (b) {\n          b.setVisible(a, !1);\n        });\n        f && (d.isDirtyBox = !0);\n        q(c, h);\n        !1 !== b && d.redraw();\n      },\n      show: function () {\n        this.setVisible(!0);\n      },\n      hide: function () {\n        this.setVisible(!1);\n      },\n      select: function (a) {\n        this.selected = a = this.options.selected = void 0 === a ? !this.selected : a;\n        this.checkbox && (this.checkbox.checked = a);\n        q(this, a ? \"select\" : \"unselect\");\n      },\n      drawTracker: E.drawTrackerGraph\n    });\n  });\n  M(I, \"parts/Responsive.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.isArray,\n      G = f.isObject,\n      z = f.objectEach,\n      B = f.pick,\n      t = f.splat;\n    f = c.Chart;\n    f.prototype.setResponsive = function (f, t) {\n      var v = this.options.responsive,\n        y = [],\n        h = this.currentResponsive;\n      !t && v && v.rules && v.rules.forEach(function (f) {\n        void 0 === f._id && (f._id = c.uniqueKey());\n        this.matchResponsiveRule(f, y);\n      }, this);\n      t = c.merge.apply(0, y.map(function (f) {\n        return c.find(v.rules, function (c) {\n          return c._id === f;\n        }).chartOptions;\n      }));\n      t.isResponsiveOptions = !0;\n      y = y.toString() || void 0;\n      y !== (h && h.ruleIds) && (h && this.update(h.undoOptions, f, !0), y ? (h = this.currentOptions(t), h.isResponsiveOptions = !0, this.currentResponsive = {\n        ruleIds: y,\n        mergedOptions: t,\n        undoOptions: h\n      }, this.update(t, f, !0)) : this.currentResponsive = void 0);\n    };\n    f.prototype.matchResponsiveRule = function (c, f) {\n      var t = c.condition;\n      (t.callback || function () {\n        return this.chartWidth <= B(t.maxWidth, Number.MAX_VALUE) && this.chartHeight <= B(t.maxHeight, Number.MAX_VALUE) && this.chartWidth >= B(t.minWidth, 0) && this.chartHeight >= B(t.minHeight, 0);\n      }).call(this) && f.push(c._id);\n    };\n    f.prototype.currentOptions = function (c) {\n      function f(c, n, q, g) {\n        var b;\n        z(c, function (a, c) {\n          if (!g && -1 < v.collectionsWithUpdate.indexOf(c)) for (a = t(a), q[c] = [], b = 0; b < a.length; b++) n[c][b] && (q[c][b] = {}, f(a[b], n[c][b], q[c][b], g + 1));else G(a) ? (q[c] = F(a) ? [] : {}, f(a, n[c] || {}, q[c], g + 1)) : q[c] = void 0 === n[c] ? null : n[c];\n        });\n      }\n      var v = this,\n        y = {};\n      f(c, this.options, y, 0);\n      return y;\n    };\n  });\n  M(I, \"masters/highcharts.src.js\", [I[\"parts/Globals.js\"], I[\"parts/Utilities.js\"]], function (c, f) {\n    var F = f.extend;\n    F(c, {\n      arrayMax: f.arrayMax,\n      arrayMin: f.arrayMin,\n      attr: f.attr,\n      defined: f.defined,\n      erase: f.erase,\n      extend: f.extend,\n      isArray: f.isArray,\n      isClass: f.isClass,\n      isDOMElement: f.isDOMElement,\n      isNumber: f.isNumber,\n      isObject: f.isObject,\n      isString: f.isString,\n      objectEach: f.objectEach,\n      pick: f.pick,\n      pInt: f.pInt,\n      setAnimation: f.setAnimation,\n      splat: f.splat,\n      syncTimeout: f.syncTimeout\n    });\n    return c;\n  });\n  I[\"masters/highcharts.src.js\"]._modules = I;\n  return I[\"masters/highcharts.src.js\"];\n});","var isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var af = moment.defineLocale('af', {\n    months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n    monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n    weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n    weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n    weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n    meridiemParse: /vm|nm/i,\n    isPM: function (input) {\n      return /^nm$/i.test(input);\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours < 12) {\n        return isLower ? 'vm' : 'VM';\n      } else {\n        return isLower ? 'nm' : 'NM';\n      }\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: '[Vandag om] LT',\n      nextDay: '[Môre om] LT',\n      nextWeek: 'dddd [om] LT',\n      lastDay: '[Gister om] LT',\n      lastWeek: '[Laas] dddd [om] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'oor %s',\n      past: '%s gelede',\n      s: \"'n paar sekondes\",\n      ss: '%d sekondes',\n      m: \"'n minuut\",\n      mm: '%d minute',\n      h: \"'n uur\",\n      hh: '%d ure',\n      d: \"'n dag\",\n      dd: '%d dae',\n      M: \"'n maand\",\n      MM: '%d maande',\n      y: \"'n jaar\",\n      yy: '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal: function (number) {\n      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n    },\n\n    week: {\n      dow: 1,\n      // Maandag is die eerste dag van die week.\n      doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n    }\n  });\n\n  return af;\n});","//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '١',\n      2: '٢',\n      3: '٣',\n      4: '٤',\n      5: '٥',\n      6: '٦',\n      7: '٧',\n      8: '٨',\n      9: '٩',\n      0: '٠'\n    },\n    numberMap = {\n      '١': '1',\n      '٢': '2',\n      '٣': '3',\n      '٤': '4',\n      '٥': '5',\n      '٦': '6',\n      '٧': '7',\n      '٨': '8',\n      '٩': '9',\n      '٠': '0'\n    },\n    pluralForm = function (n) {\n      return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    },\n    plurals = {\n      s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n      m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n      h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n      d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n      M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n      y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    },\n    pluralize = function (u) {\n      return function (number, withoutSuffix, string, isFuture) {\n        var f = pluralForm(number),\n          str = plurals[u][pluralForm(number)];\n        if (f === 2) {\n          str = str[withoutSuffix ? 0 : 1];\n        }\n        return str.replace(/%d/i, number);\n      };\n    },\n    months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];\n  var ar = moment.defineLocale('ar', {\n    months: months,\n    monthsShort: months,\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'D/\\u200FM/\\u200FYYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\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: 'dddd [عند الساعة] LT',\n      lastDay: '[أمس عند الساعة] LT',\n      lastWeek: 'dddd [عند الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'بعد %s',\n      past: 'منذ %s',\n      s: pluralize('s'),\n      ss: pluralize('s'),\n      m: pluralize('m'),\n      mm: pluralize('m'),\n      h: pluralize('h'),\n      hh: pluralize('h'),\n      d: pluralize('d'),\n      dd: pluralize('d'),\n      M: pluralize('M'),\n      MM: pluralize('M'),\n      y: pluralize('y'),\n      yy: pluralize('y')\n    },\n    preparse: function (string) {\n      return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n        return numberMap[match];\n      }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n    }\n  });\n\n  return ar;\n});","//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var pluralForm = function (n) {\n      return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    },\n    plurals = {\n      s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n      m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n      h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n      d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n      M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n      y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    },\n    pluralize = function (u) {\n      return function (number, withoutSuffix, string, isFuture) {\n        var f = pluralForm(number),\n          str = plurals[u][pluralForm(number)];\n        if (f === 2) {\n          str = str[withoutSuffix ? 0 : 1];\n        }\n        return str.replace(/%d/i, number);\n      };\n    },\n    months = ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويلية', 'أوت', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];\n  var arDz = moment.defineLocale('ar-dz', {\n    months: months,\n    monthsShort: months,\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'D/\\u200FM/\\u200FYYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\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: 'dddd [عند الساعة] LT',\n      lastDay: '[أمس عند الساعة] LT',\n      lastWeek: 'dddd [عند الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'بعد %s',\n      past: 'منذ %s',\n      s: pluralize('s'),\n      ss: pluralize('s'),\n      m: pluralize('m'),\n      mm: pluralize('m'),\n      h: pluralize('h'),\n      hh: pluralize('h'),\n      d: pluralize('d'),\n      dd: pluralize('d'),\n      M: pluralize('M'),\n      MM: pluralize('M'),\n      y: pluralize('y'),\n      yy: pluralize('y')\n    },\n    postformat: function (string) {\n      return string.replace(/,/g, '،');\n    },\n    week: {\n      dow: 0,\n      // Sunday 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 arDz;\n});","//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var arKw = moment.defineLocale('ar-kw', {\n    months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.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: '[اليوم على الساعة] LT',\n      nextDay: '[غدا على الساعة] LT',\n      nextWeek: 'dddd [على الساعة] LT',\n      lastDay: '[أمس على الساعة] LT',\n      lastWeek: 'dddd [على الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'في %s',\n      past: 'منذ %s',\n      s: 'ثوان',\n      ss: '%d ثانية',\n      m: 'دقيقة',\n      mm: '%d دقائق',\n      h: 'ساعة',\n      hh: '%d ساعات',\n      d: 'يوم',\n      dd: '%d أيام',\n      M: 'شهر',\n      MM: '%d أشهر',\n      y: 'سنة',\n      yy: '%d سنوات'\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n    }\n  });\n\n  return arKw;\n});","//! moment.js locale configuration\n//! locale : Arabic (Lybia) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n      8: '8',\n      9: '9',\n      0: '0'\n    },\n    pluralForm = function (n) {\n      return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    },\n    plurals = {\n      s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n      m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n      h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n      d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n      M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n      y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    },\n    pluralize = function (u) {\n      return function (number, withoutSuffix, string, isFuture) {\n        var f = pluralForm(number),\n          str = plurals[u][pluralForm(number)];\n        if (f === 2) {\n          str = str[withoutSuffix ? 0 : 1];\n        }\n        return str.replace(/%d/i, number);\n      };\n    },\n    months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];\n  var arLy = moment.defineLocale('ar-ly', {\n    months: months,\n    monthsShort: months,\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'D/\\u200FM/\\u200FYYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\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: 'dddd [عند الساعة] LT',\n      lastDay: '[أمس عند الساعة] LT',\n      lastWeek: 'dddd [عند الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'بعد %s',\n      past: 'منذ %s',\n      s: pluralize('s'),\n      ss: pluralize('s'),\n      m: pluralize('m'),\n      mm: pluralize('m'),\n      h: pluralize('h'),\n      hh: pluralize('h'),\n      d: pluralize('d'),\n      dd: pluralize('d'),\n      M: pluralize('M'),\n      MM: pluralize('M'),\n      y: pluralize('y'),\n      yy: pluralize('y')\n    },\n    preparse: function (string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n    }\n  });\n\n  return arLy;\n});","//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var arMa = moment.defineLocale('ar-ma', {\n    months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.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: '[اليوم على الساعة] LT',\n      nextDay: '[غدا على الساعة] LT',\n      nextWeek: 'dddd [على الساعة] LT',\n      lastDay: '[أمس على الساعة] LT',\n      lastWeek: 'dddd [على الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'في %s',\n      past: 'منذ %s',\n      s: 'ثوان',\n      ss: '%d ثانية',\n      m: 'دقيقة',\n      mm: '%d دقائق',\n      h: 'ساعة',\n      hh: '%d ساعات',\n      d: 'يوم',\n      dd: '%d أيام',\n      M: 'شهر',\n      MM: '%d أشهر',\n      y: 'سنة',\n      yy: '%d سنوات'\n    },\n    week: {\n      dow: 1,\n      // 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 arMa;\n});","//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '١',\n      2: '٢',\n      3: '٣',\n      4: '٤',\n      5: '٥',\n      6: '٦',\n      7: '٧',\n      8: '٨',\n      9: '٩',\n      0: '٠'\n    },\n    numberMap = {\n      '١': '1',\n      '٢': '2',\n      '٣': '3',\n      '٤': '4',\n      '٥': '5',\n      '٦': '6',\n      '٧': '7',\n      '٨': '8',\n      '٩': '9',\n      '٠': '0'\n    };\n  var arSa = moment.defineLocale('ar-sa', {\n    months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.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    meridiemParse: /ص|م/,\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: 'dddd [على الساعة] LT',\n      lastDay: '[أمس على الساعة] LT',\n      lastWeek: 'dddd [على الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'في %s',\n      past: 'منذ %s',\n      s: 'ثوان',\n      ss: '%d ثانية',\n      m: 'دقيقة',\n      mm: '%d دقائق',\n      h: 'ساعة',\n      hh: '%d ساعات',\n      d: 'يوم',\n      dd: '%d أيام',\n      M: 'شهر',\n      MM: '%d أشهر',\n      y: 'سنة',\n      yy: '%d سنوات'\n    },\n    preparse: function (string) {\n      return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n        return numberMap[match];\n      }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    week: {\n      dow: 0,\n      // 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\n  return arSa;\n});","//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var arTn = moment.defineLocale('ar-tn', {\n    months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.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: '[اليوم على الساعة] LT',\n      nextDay: '[غدا على الساعة] LT',\n      nextWeek: 'dddd [على الساعة] LT',\n      lastDay: '[أمس على الساعة] LT',\n      lastWeek: 'dddd [على الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'في %s',\n      past: 'منذ %s',\n      s: 'ثوان',\n      ss: '%d ثانية',\n      m: 'دقيقة',\n      mm: '%d دقائق',\n      h: 'ساعة',\n      hh: '%d ساعات',\n      d: 'يوم',\n      dd: '%d أيام',\n      M: 'شهر',\n      MM: '%d أشهر',\n      y: 'سنة',\n      yy: '%d سنوات'\n    },\n    week: {\n      dow: 1,\n      // 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 arTn;\n});","//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\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  var az = moment.defineLocale('az', {\n    months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n    monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n    weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n    weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n    weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.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: '[bugün saat] LT',\n      nextDay: '[sabah saat] LT',\n      nextWeek: '[gələn həftə] dddd [saat] LT',\n      lastDay: '[dünən] LT',\n      lastWeek: '[keçən həftə] dddd [saat] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s sonra',\n      past: '%s əvvəl',\n      s: 'bir neçə saniyə',\n      ss: '%d saniyə',\n      m: 'bir dəqiqə',\n      mm: '%d dəqiqə',\n      h: 'bir saat',\n      hh: '%d saat',\n      d: 'bir gün',\n      dd: '%d gün',\n      M: 'bir ay',\n      MM: '%d ay',\n      y: 'bir il',\n      yy: '%d il'\n    },\n    meridiemParse: /gecə|səhər|gündüz|axşam/,\n    isPM: function (input) {\n      return /^(gündüz|axşam)$/.test(input);\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'gecə';\n      } else if (hour < 12) {\n        return 'səhər';\n      } else if (hour < 17) {\n        return 'gündüz';\n      } else {\n        return 'axşam';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n    ordinal: function (number) {\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    week: {\n      dow: 1,\n      // 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 az;\n});","//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : 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  var be = moment.defineLocale('be', {\n    months: {\n      format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n      standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n    },\n    monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n    weekdays: {\n      format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n      standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n      isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/\n    },\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: '[Сёння ў] LT',\n      nextDay: '[Заўтра ў] LT',\n      lastDay: '[Учора ў] LT',\n      nextWeek: function () {\n        return '[У] dddd [ў] LT';\n      },\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n          case 3:\n          case 5:\n          case 6:\n            return '[У мінулую] dddd [ў] LT';\n          case 1:\n          case 2:\n          case 4:\n            return '[У мінулы] dddd [ў] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'праз %s',\n      past: '%s таму',\n      s: 'некалькі секунд',\n      m: relativeTimeWithPlural,\n      mm: relativeTimeWithPlural,\n      h: relativeTimeWithPlural,\n      hh: relativeTimeWithPlural,\n      d: 'дзень',\n      dd: relativeTimeWithPlural,\n      M: 'месяц',\n      MM: relativeTimeWithPlural,\n      y: 'год',\n      yy: relativeTimeWithPlural\n    },\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 % 10 === 2 || number % 10 === 3) && number % 100 !== 12 && number % 100 !== 13 ? number + '-і' : number + '-ы';\n        case 'D':\n          return number + '-га';\n        default:\n          return number;\n      }\n    },\n    week: {\n      dow: 1,\n      // 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 be;\n});","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var bg = moment.defineLocale('bg', {\n    months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n    monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n    weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n    weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n    weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'D.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      nextWeek: 'dddd [в] LT',\n      lastDay: '[Вчера в] LT',\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n          case 3:\n          case 6:\n            return '[Миналата] dddd [в] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[Миналия] dddd [в] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'след %s',\n      past: 'преди %s',\n      s: 'няколко секунди',\n      ss: '%d секунди',\n      m: 'минута',\n      mm: '%d минути',\n      h: 'час',\n      hh: '%d часа',\n      d: 'ден',\n      dd: '%d дена',\n      w: 'седмица',\n      ww: '%d седмици',\n      M: 'месец',\n      MM: '%d месеца',\n      y: 'година',\n      yy: '%d години'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n    ordinal: function (number) {\n      var lastDigit = number % 10,\n        last2Digits = number % 100;\n      if (number === 0) {\n        return number + '-ев';\n      } else if (last2Digits === 0) {\n        return number + '-ен';\n      } else if (last2Digits > 10 && last2Digits < 20) {\n        return number + '-ти';\n      } else if (lastDigit === 1) {\n        return number + '-ви';\n      } else if (lastDigit === 2) {\n        return number + '-ри';\n      } else if (lastDigit === 7 || lastDigit === 8) {\n        return number + '-ми';\n      } else {\n        return number + '-ти';\n      }\n    },\n    week: {\n      dow: 1,\n      // 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 bg;\n});","//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var bm = moment.defineLocale('bm', {\n    months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n    monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n    weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n    weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n    weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'MMMM [tile] D [san] YYYY',\n      LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n      LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n    },\n    calendar: {\n      sameDay: '[Bi lɛrɛ] LT',\n      nextDay: '[Sini lɛrɛ] LT',\n      nextWeek: 'dddd [don lɛrɛ] LT',\n      lastDay: '[Kunu lɛrɛ] LT',\n      lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s kɔnɔ',\n      past: 'a bɛ %s bɔ',\n      s: 'sanga dama dama',\n      ss: 'sekondi %d',\n      m: 'miniti kelen',\n      mm: 'miniti %d',\n      h: 'lɛrɛ kelen',\n      hh: 'lɛrɛ %d',\n      d: 'tile kelen',\n      dd: 'tile %d',\n      M: 'kalo kelen',\n      MM: 'kalo %d',\n      y: 'san kelen',\n      yy: 'san %d'\n    },\n    week: {\n      dow: 1,\n      // 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 bm;\n});","//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '১',\n      2: '২',\n      3: '৩',\n      4: '৪',\n      5: '৫',\n      6: '৬',\n      7: '৭',\n      8: '৮',\n      9: '৯',\n      0: '০'\n    },\n    numberMap = {\n      '১': '1',\n      '২': '2',\n      '৩': '3',\n      '৪': '4',\n      '৫': '5',\n      '৬': '6',\n      '৭': '7',\n      '৮': '8',\n      '৯': '9',\n      '০': '0'\n    };\n  var bn = moment.defineLocale('bn', {\n    months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n    monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n    weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n    weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n    weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm সময়',\n      LTS: 'A h:mm:ss সময়',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm সময়',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm সময়'\n    },\n    calendar: {\n      sameDay: '[আজ] LT',\n      nextDay: '[আগামীকাল] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[গতকাল] LT',\n      lastWeek: '[গত] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s পরে',\n      past: '%s আগে',\n      s: 'কয়েক সেকেন্ড',\n      ss: '%d সেকেন্ড',\n      m: 'এক মিনিট',\n      mm: '%d মিনিট',\n      h: 'এক ঘন্টা',\n      hh: '%d ঘন্টা',\n      d: 'এক দিন',\n      dd: '%d দিন',\n      M: 'এক মাস',\n      MM: '%d মাস',\n      y: 'এক বছর',\n      yy: '%d বছর'\n    },\n    preparse: function (string) {\n      return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'রাত' && hour >= 4 || meridiem === 'দুপুর' && hour < 5 || meridiem === 'বিকাল') {\n        return hour + 12;\n      } else {\n        return hour;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'রাত';\n      } else if (hour < 10) {\n        return 'সকাল';\n      } else if (hour < 17) {\n        return 'দুপুর';\n      } else if (hour < 20) {\n        return 'বিকাল';\n      } else {\n        return 'রাত';\n      }\n    },\n    week: {\n      dow: 0,\n      // 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\n  return bn;\n});","//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '১',\n      2: '২',\n      3: '৩',\n      4: '৪',\n      5: '৫',\n      6: '৬',\n      7: '৭',\n      8: '৮',\n      9: '৯',\n      0: '০'\n    },\n    numberMap = {\n      '১': '1',\n      '২': '2',\n      '৩': '3',\n      '৪': '4',\n      '৫': '5',\n      '৬': '6',\n      '৭': '7',\n      '৮': '8',\n      '৯': '9',\n      '০': '0'\n    };\n  var bnBd = moment.defineLocale('bn-bd', {\n    months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n    monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n    weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n    weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n    weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm সময়',\n      LTS: 'A h:mm:ss সময়',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm সময়',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm সময়'\n    },\n    calendar: {\n      sameDay: '[আজ] LT',\n      nextDay: '[আগামীকাল] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[গতকাল] LT',\n      lastWeek: '[গত] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s পরে',\n      past: '%s আগে',\n      s: 'কয়েক সেকেন্ড',\n      ss: '%d সেকেন্ড',\n      m: 'এক মিনিট',\n      mm: '%d মিনিট',\n      h: 'এক ঘন্টা',\n      hh: '%d ঘন্টা',\n      d: 'এক দিন',\n      dd: '%d দিন',\n      M: 'এক মাস',\n      MM: '%d মাস',\n      y: 'এক বছর',\n      yy: '%d বছর'\n    },\n    preparse: function (string) {\n      return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'রাত') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'ভোর') {\n        return hour;\n      } else if (meridiem === 'সকাল') {\n        return hour;\n      } else if (meridiem === 'দুপুর') {\n        return hour >= 3 ? hour : hour + 12;\n      } else if (meridiem === 'বিকাল') {\n        return hour + 12;\n      } else if (meridiem === 'সন্ধ্যা') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'রাত';\n      } else if (hour < 6) {\n        return 'ভোর';\n      } else if (hour < 12) {\n        return 'সকাল';\n      } else if (hour < 15) {\n        return 'দুপুর';\n      } else if (hour < 18) {\n        return 'বিকাল';\n      } else if (hour < 20) {\n        return 'সন্ধ্যা';\n      } else {\n        return 'রাত';\n      }\n    },\n    week: {\n      dow: 0,\n      // 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\n  return bnBd;\n});","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '༡',\n      2: '༢',\n      3: '༣',\n      4: '༤',\n      5: '༥',\n      6: '༦',\n      7: '༧',\n      8: '༨',\n      9: '༩',\n      0: '༠'\n    },\n    numberMap = {\n      '༡': '1',\n      '༢': '2',\n      '༣': '3',\n      '༤': '4',\n      '༥': '5',\n      '༦': '6',\n      '༧': '7',\n      '༨': '8',\n      '༩': '9',\n      '༠': '0'\n    };\n  var bo = moment.defineLocale('bo', {\n    months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n    monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split('_'),\n    monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n    monthsParseExact: true,\n    weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n    weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n    weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm',\n      LTS: 'A h:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar: {\n      sameDay: '[དི་རིང] LT',\n      nextDay: '[སང་ཉིན] LT',\n      nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n      lastDay: '[ཁ་སང] LT',\n      lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ལ་',\n      past: '%s སྔན་ལ',\n      s: 'ལམ་སང',\n      ss: '%d སྐར་ཆ།',\n      m: 'སྐར་མ་གཅིག',\n      mm: '%d སྐར་མ',\n      h: 'ཆུ་ཚོད་གཅིག',\n      hh: '%d ཆུ་ཚོད',\n      d: 'ཉིན་གཅིག',\n      dd: '%d ཉིན་',\n      M: 'ཟླ་བ་གཅིག',\n      MM: '%d ཟླ་བ',\n      y: 'ལོ་གཅིག',\n      yy: '%d ལོ'\n    },\n    preparse: function (string) {\n      return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'མཚན་མོ' && hour >= 4 || meridiem === 'ཉིན་གུང' && hour < 5 || meridiem === 'དགོང་དག') {\n        return hour + 12;\n      } else {\n        return hour;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'མཚན་མོ';\n      } else if (hour < 10) {\n        return 'ཞོགས་ཀས';\n      } else if (hour < 17) {\n        return 'ཉིན་གུང';\n      } else if (hour < 20) {\n        return 'དགོང་དག';\n      } else {\n        return 'མཚན་མོ';\n      }\n    },\n    week: {\n      dow: 0,\n      // 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\n  return bo;\n});","//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function relativeTimeWithMutation(number, withoutSuffix, key) {\n    var format = {\n      mm: 'munutenn',\n      MM: 'miz',\n      dd: 'devezh'\n    };\n    return number + ' ' + mutation(format[key], number);\n  }\n  function specialMutationForYears(number) {\n    switch (lastNumber(number)) {\n      case 1:\n      case 3:\n      case 4:\n      case 5:\n      case 9:\n        return number + ' bloaz';\n      default:\n        return number + ' vloaz';\n    }\n  }\n  function lastNumber(number) {\n    if (number > 9) {\n      return lastNumber(number % 10);\n    }\n    return number;\n  }\n  function mutation(text, number) {\n    if (number === 2) {\n      return softMutation(text);\n    }\n    return text;\n  }\n  function softMutation(text) {\n    var mutationTable = {\n      m: 'v',\n      b: 'v',\n      d: 'z'\n    };\n    if (mutationTable[text.charAt(0)] === undefined) {\n      return text;\n    }\n    return mutationTable[text.charAt(0)] + text.substring(1);\n  }\n  var monthsParse = [/^gen/i, /^c[ʼ\\']hwe/i, /^meu/i, /^ebr/i, /^mae/i, /^(mez|eve)/i, /^gou/i, /^eos/i, /^gwe/i, /^her/i, /^du/i, /^ker/i],\n    monthsRegex = /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n    monthsStrictRegex = /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n    monthsShortStrictRegex = /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n    fullWeekdaysParse = [/^sul/i, /^lun/i, /^meurzh/i, /^merc[ʼ\\']her/i, /^yaou/i, /^gwener/i, /^sadorn/i],\n    shortWeekdaysParse = [/^Sul/i, /^Lun/i, /^Meu/i, /^Mer/i, /^Yao/i, /^Gwe/i, /^Sad/i],\n    minWeekdaysParse = [/^Su/i, /^Lu/i, /^Me([^r]|$)/i, /^Mer/i, /^Ya/i, /^Gw/i, /^Sa/i];\n  var br = moment.defineLocale('br', {\n    months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n    monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n    weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n    weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n    weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n    weekdaysParse: minWeekdaysParse,\n    fullWeekdaysParse: fullWeekdaysParse,\n    shortWeekdaysParse: shortWeekdaysParse,\n    minWeekdaysParse: minWeekdaysParse,\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: monthsStrictRegex,\n    monthsShortStrictRegex: monthsShortStrictRegex,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D [a viz] MMMM YYYY',\n      LLL: 'D [a viz] MMMM YYYY HH:mm',\n      LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Hiziv da] LT',\n      nextDay: '[Warcʼhoazh da] LT',\n      nextWeek: 'dddd [da] LT',\n      lastDay: '[Decʼh da] LT',\n      lastWeek: 'dddd [paset da] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'a-benn %s',\n      past: '%s ʼzo',\n      s: 'un nebeud segondennoù',\n      ss: '%d eilenn',\n      m: 'ur vunutenn',\n      mm: relativeTimeWithMutation,\n      h: 'un eur',\n      hh: '%d eur',\n      d: 'un devezh',\n      dd: relativeTimeWithMutation,\n      M: 'ur miz',\n      MM: relativeTimeWithMutation,\n      y: 'ur bloaz',\n      yy: specialMutationForYears\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n    ordinal: function (number) {\n      var output = number === 1 ? 'añ' : 'vet';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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    meridiemParse: /a.m.|g.m./,\n    // goude merenn | a-raok merenn\n    isPM: function (token) {\n      return token === 'g.m.';\n    },\n    meridiem: function (hour, minute, isLower) {\n      return hour < 12 ? 'a.m.' : 'g.m.';\n    }\n  });\n  return br;\n});","//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! based on (hr) translation by Bojan Marković\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n    switch (key) {\n      case 'ss':\n        if (number === 1) {\n          result += 'sekunda';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'sekunde';\n        } else {\n          result += 'sekundi';\n        }\n        return result;\n      case 'm':\n        return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n      case 'mm':\n        if (number === 1) {\n          result += 'minuta';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'minute';\n        } else {\n          result += 'minuta';\n        }\n        return result;\n      case 'h':\n        return withoutSuffix ? 'jedan sat' : 'jednog sata';\n      case 'hh':\n        if (number === 1) {\n          result += 'sat';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'sata';\n        } else {\n          result += 'sati';\n        }\n        return result;\n      case 'dd':\n        if (number === 1) {\n          result += 'dan';\n        } else {\n          result += 'dana';\n        }\n        return result;\n      case 'MM':\n        if (number === 1) {\n          result += 'mjesec';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'mjeseca';\n        } else {\n          result += 'mjeseci';\n        }\n        return result;\n      case 'yy':\n        if (number === 1) {\n          result += 'godina';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'godine';\n        } else {\n          result += 'godina';\n        }\n        return result;\n    }\n  }\n  var bs = moment.defineLocale('bs', {\n    months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact: true,\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: '[danas u] LT',\n      nextDay: '[sutra u] LT',\n      nextWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[u] [nedjelju] [u] LT';\n          case 3:\n            return '[u] [srijedu] [u] LT';\n          case 6:\n            return '[u] [subotu] [u] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[u] dddd [u] LT';\n        }\n      },\n      lastDay: '[jučer u] LT',\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n          case 3:\n            return '[prošlu] dddd [u] LT';\n          case 6:\n            return '[prošle] [subote] [u] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[prošli] dddd [u] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'prije %s',\n      s: 'par sekundi',\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: 'dan',\n      dd: translate,\n      M: 'mjesec',\n      MM: translate,\n      y: 'godinu',\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 bs;\n});","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ca = moment.defineLocale('ca', {\n    months: {\n      standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n      format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split('_'),\n      isFormat: /D[oD]?(\\s)+MMMM/\n    },\n    monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n    weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n    weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM [de] YYYY',\n      ll: 'D MMM YYYY',\n      LLL: 'D MMMM [de] YYYY [a les] H:mm',\n      lll: 'D MMM YYYY, H:mm',\n      LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n      llll: 'ddd D MMM YYYY, H:mm'\n    },\n    calendar: {\n      sameDay: function () {\n        return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      nextDay: function () {\n        return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      nextWeek: function () {\n        return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      lastDay: function () {\n        return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      lastWeek: function () {\n        return '[el] dddd [passat a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: \"d'aquí %s\",\n      past: 'fa %s',\n      s: 'uns segons',\n      ss: '%d segons',\n      m: 'un minut',\n      mm: '%d minuts',\n      h: 'una hora',\n      hh: '%d hores',\n      d: 'un dia',\n      dd: '%d dies',\n      M: 'un mes',\n      MM: '%d mesos',\n      y: 'un any',\n      yy: '%d anys'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n    ordinal: function (number, period) {\n      var output = number === 1 ? 'r' : number === 2 ? 'n' : number === 3 ? 'r' : number === 4 ? 't' : 'è';\n      if (period === 'w' || period === 'W') {\n        output = 'a';\n      }\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 ca;\n});","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n    monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n    monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i],\n    // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n    // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n    monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n  function plural(n) {\n    return n > 1 && n < 5 && ~~(n / 10) !== 1;\n  }\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n      case 's':\n        // a few seconds / in a few seconds / a few seconds ago\n        return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n      case 'ss':\n        // 9 seconds / in 9 seconds / 9 seconds ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'sekundy' : 'sekund');\n        } else {\n          return result + 'sekundami';\n        }\n      case 'm':\n        // a minute / in a minute / a minute ago\n        return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n      case 'mm':\n        // 9 minutes / in 9 minutes / 9 minutes ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'minuty' : 'minut');\n        } else {\n          return result + 'minutami';\n        }\n      case 'h':\n        // an hour / in an hour / an hour ago\n        return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n      case 'hh':\n        // 9 hours / in 9 hours / 9 hours ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'hodiny' : 'hodin');\n        } else {\n          return result + 'hodinami';\n        }\n      case 'd':\n        // a day / in a day / a day ago\n        return withoutSuffix || isFuture ? 'den' : 'dnem';\n      case 'dd':\n        // 9 days / in 9 days / 9 days ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'dny' : 'dní');\n        } else {\n          return result + 'dny';\n        }\n      case 'M':\n        // a month / in a month / a month ago\n        return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n      case 'MM':\n        // 9 months / in 9 months / 9 months ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'měsíce' : 'měsíců');\n        } else {\n          return result + 'měsíci';\n        }\n      case 'y':\n        // a year / in a year / a year ago\n        return withoutSuffix || isFuture ? 'rok' : 'rokem';\n      case 'yy':\n        // 9 years / in 9 years / 9 years ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'roky' : 'let');\n        } else {\n          return result + 'lety';\n        }\n    }\n  }\n  var cs = moment.defineLocale('cs', {\n    months: months,\n    monthsShort: monthsShort,\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n    // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n    monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n    monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n    weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n    weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\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      l: 'D. M. YYYY'\n    },\n    calendar: {\n      sameDay: '[dnes v] LT',\n      nextDay: '[zítra v] LT',\n      nextWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[v neděli v] LT';\n          case 1:\n          case 2:\n            return '[v] dddd [v] LT';\n          case 3:\n            return '[ve středu v] LT';\n          case 4:\n            return '[ve čtvrtek v] LT';\n          case 5:\n            return '[v pátek v] LT';\n          case 6:\n            return '[v sobotu v] LT';\n        }\n      },\n      lastDay: '[včera v] LT',\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[minulou neděli v] LT';\n          case 1:\n          case 2:\n            return '[minulé] dddd [v] LT';\n          case 3:\n            return '[minulou středu v] LT';\n          case 4:\n          case 5:\n            return '[minulý] dddd [v] LT';\n          case 6:\n            return '[minulou sobotu v] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'před %s',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 cs;\n});","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var cv = moment.defineLocale('cv', {\n    months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n    monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n    weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n    weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n    weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD-MM-YYYY',\n      LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n      LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n      LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n    },\n    calendar: {\n      sameDay: '[Паян] LT [сехетре]',\n      nextDay: '[Ыран] LT [сехетре]',\n      lastDay: '[Ӗнер] LT [сехетре]',\n      nextWeek: '[Ҫитес] dddd LT [сехетре]',\n      lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: function (output) {\n        var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n        return output + affix;\n      },\n      past: '%s каялла',\n      s: 'пӗр-ик ҫеккунт',\n      ss: '%d ҫеккунт',\n      m: 'пӗр минут',\n      mm: '%d минут',\n      h: 'пӗр сехет',\n      hh: '%d сехет',\n      d: 'пӗр кун',\n      dd: '%d кун',\n      M: 'пӗр уйӑх',\n      MM: '%d уйӑх',\n      y: 'пӗр ҫул',\n      yy: '%d ҫул'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n    ordinal: '%d-мӗш',\n    week: {\n      dow: 1,\n      // 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 cv;\n});","//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var cy = moment.defineLocale('cy', {\n    months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n    monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n    weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n    weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n    weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n    weekdaysParseExact: true,\n    // time formats are the same as en-gb\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: '[Heddiw am] LT',\n      nextDay: '[Yfory am] LT',\n      nextWeek: 'dddd [am] LT',\n      lastDay: '[Ddoe am] LT',\n      lastWeek: 'dddd [diwethaf am] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'mewn %s',\n      past: '%s yn ôl',\n      s: 'ychydig eiliadau',\n      ss: '%d eiliad',\n      m: 'munud',\n      mm: '%d munud',\n      h: 'awr',\n      hh: '%d awr',\n      d: 'diwrnod',\n      dd: '%d diwrnod',\n      M: 'mis',\n      MM: '%d mis',\n      y: 'blwyddyn',\n      yy: '%d flynedd'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n    // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n    ordinal: function (number) {\n      var b = number,\n        output = '',\n        lookup = ['', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed',\n        // 1af to 10fed\n        'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n        ];\n\n      if (b > 20) {\n        if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n          output = 'fed'; // not 30ain, 70ain or 90ain\n        } else {\n          output = 'ain';\n        }\n      } else if (b > 0) {\n        output = lookup[b];\n      }\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 cy;\n});","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var da = moment.defineLocale('da', {\n    months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n    weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n    weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.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.] D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar: {\n      sameDay: '[i dag kl.] LT',\n      nextDay: '[i morgen kl.] LT',\n      nextWeek: 'på dddd [kl.] LT',\n      lastDay: '[i går kl.] LT',\n      lastWeek: '[i] dddd[s kl.] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'om %s',\n      past: '%s siden',\n      s: 'få sekunder',\n      ss: '%d sekunder',\n      m: 'et minut',\n      mm: '%d minutter',\n      h: 'en time',\n      hh: '%d timer',\n      d: 'en dag',\n      dd: '%d dage',\n      M: 'en måned',\n      MM: '%d måneder',\n      y: 'et år',\n      yy: '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 da;\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;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\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  var de = moment.defineLocale('de', {\n    months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\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,\n      // 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});","//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\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  var deAt = moment.defineLocale('de-at', {\n    months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\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,\n      // 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 deAt;\n});","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\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  var deCh = moment.defineLocale('de-ch', {\n    months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\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,\n      // 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 deCh;\n});","//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var months = ['ޖެނުއަރީ', 'ފެބްރުއަރީ', 'މާރިޗު', 'އޭޕްރީލު', 'މޭ', 'ޖޫން', 'ޖުލައި', 'އޯގަސްޓު', 'ސެޕްޓެމްބަރު', 'އޮކްޓޯބަރު', 'ނޮވެމްބަރު', 'ޑިސެމްބަރު'],\n    weekdays = ['އާދިއްތަ', 'ހޯމަ', 'އަންގާރަ', 'ބުދަ', 'ބުރާސްފަތި', 'ހުކުރު', 'ހޮނިހިރު'];\n  var dv = moment.defineLocale('dv', {\n    months: months,\n    monthsShort: months,\n    weekdays: weekdays,\n    weekdaysShort: weekdays,\n    weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'D/M/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /މކ|މފ/,\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: 'dddd LT',\n      lastDay: '[އިއްޔެ] LT',\n      lastWeek: '[ފާއިތުވި] dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'ތެރޭގައި %s',\n      past: 'ކުރިން %s',\n      s: 'ސިކުންތުކޮޅެއް',\n      ss: 'd% ސިކުންތު',\n      m: 'މިނިޓެއް',\n      mm: 'މިނިޓު %d',\n      h: 'ގަޑިއިރެއް',\n      hh: 'ގަޑިއިރު %d',\n      d: 'ދުވަހެއް',\n      dd: 'ދުވަސް %d',\n      M: 'މަހެއް',\n      MM: 'މަސް %d',\n      y: 'އަހަރެއް',\n      yy: 'އަހަރު %d'\n    },\n    preparse: function (string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n      return string.replace(/,/g, '،');\n    },\n    week: {\n      dow: 7,\n      // Sunday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n    }\n  });\n\n  return dv;\n});","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function isFunction(input) {\n    return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n  }\n  var el = moment.defineLocale('el', {\n    monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n    monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n    months: function (momentToFormat, format) {\n      if (!momentToFormat) {\n        return this._monthsNominativeEl;\n      } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) {\n        // if there is a day number before 'MMMM'\n        return this._monthsGenitiveEl[momentToFormat.month()];\n      } else {\n        return this._monthsNominativeEl[momentToFormat.month()];\n      }\n    },\n    monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n    weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n    weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n    weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n    meridiem: function (hours, minutes, isLower) {\n      if (hours > 11) {\n        return isLower ? 'μμ' : 'ΜΜ';\n      } else {\n        return isLower ? 'πμ' : 'ΠΜ';\n      }\n    },\n    isPM: function (input) {\n      return (input + '').toLowerCase()[0] === 'μ';\n    },\n    meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendarEl: {\n      sameDay: '[Σήμερα {}] LT',\n      nextDay: '[Αύριο {}] LT',\n      nextWeek: 'dddd [{}] LT',\n      lastDay: '[Χθες {}] LT',\n      lastWeek: function () {\n        switch (this.day()) {\n          case 6:\n            return '[το προηγούμενο] dddd [{}] LT';\n          default:\n            return '[την προηγούμενη] dddd [{}] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    calendar: function (key, mom) {\n      var output = this._calendarEl[key],\n        hours = mom && mom.hours();\n      if (isFunction(output)) {\n        output = output.apply(mom);\n      }\n      return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n    },\n    relativeTime: {\n      future: 'σε %s',\n      past: '%s πριν',\n      s: 'λίγα δευτερόλεπτα',\n      ss: '%d δευτερόλεπτα',\n      m: 'ένα λεπτό',\n      mm: '%d λεπτά',\n      h: 'μία ώρα',\n      hh: '%d ώρες',\n      d: 'μία μέρα',\n      dd: '%d μέρες',\n      M: 'ένας μήνας',\n      MM: '%d μήνες',\n      y: 'ένας χρόνος',\n      yy: '%d χρόνια'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}η/,\n    ordinal: '%dη',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4st is the first week of the year.\n    }\n  });\n\n  return el;\n});","//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var enAu = moment.defineLocale('en-au', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\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    relativeTime: {\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      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 0,\n      // Sunday 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 enAu;\n});","//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var enCa = moment.defineLocale('en-ca', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'YYYY-MM-DD',\n      LL: 'MMMM D, YYYY',\n      LLL: 'MMMM D, YYYY h:mm A',\n      LLLL: 'dddd, MMMM D, YYYY h:mm A'\n    },\n    calendar: {\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    relativeTime: {\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      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    }\n  });\n  return enCa;\n});","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var enGb = moment.defineLocale('en-gb', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_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: '[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    relativeTime: {\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      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 enGb;\n});","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var enIe = moment.defineLocale('en-ie', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_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: '[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    relativeTime: {\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      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 enIe;\n});","//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var enIl = moment.defineLocale('en-il', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_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: '[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    relativeTime: {\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      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    }\n  });\n  return enIl;\n});","//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var enIn = moment.defineLocale('en-in', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\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    relativeTime: {\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      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 1st is the first week of the year.\n    }\n  });\n\n  return enIn;\n});","//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var enNz = moment.defineLocale('en-nz', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\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    relativeTime: {\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      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 enNz;\n});","//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var enSg = moment.defineLocale('en-sg', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_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: '[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    relativeTime: {\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      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 enSg;\n});","//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var eo = moment.defineLocale('eo', {\n    months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n    monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n    weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n    weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n    weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: '[la] D[-an de] MMMM, YYYY',\n      LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n      LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n      llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm'\n    },\n    meridiemParse: /[ap]\\.t\\.m/i,\n    isPM: function (input) {\n      return input.charAt(0).toLowerCase() === 'p';\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours > 11) {\n        return isLower ? 'p.t.m.' : 'P.T.M.';\n      } else {\n        return isLower ? 'a.t.m.' : 'A.T.M.';\n      }\n    },\n    calendar: {\n      sameDay: '[Hodiaŭ je] LT',\n      nextDay: '[Morgaŭ je] LT',\n      nextWeek: 'dddd[n je] LT',\n      lastDay: '[Hieraŭ je] LT',\n      lastWeek: '[pasintan] dddd[n je] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'post %s',\n      past: 'antaŭ %s',\n      s: 'kelkaj sekundoj',\n      ss: '%d sekundoj',\n      m: 'unu minuto',\n      mm: '%d minutoj',\n      h: 'unu horo',\n      hh: '%d horoj',\n      d: 'unu tago',\n      //ne 'diurno', ĉar estas uzita por proksimumo\n      dd: '%d tagoj',\n      M: 'unu monato',\n      MM: '%d monatoj',\n      y: 'unu jaro',\n      yy: '%d jaroj'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}a/,\n    ordinal: '%da',\n    week: {\n      dow: 1,\n      // 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 eo;\n});","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n    monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],\n    monthsRegex = /^(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  var es = moment.defineLocale('es', {\n    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\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: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex: /^(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 '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\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,\n      // 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    invalidDate: 'Fecha inválida'\n  });\n  return es;\n});","//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n    monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],\n    monthsRegex = /^(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  var esDo = moment.defineLocale('es-do', {\n    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\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: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex: /^(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 A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY h:mm A',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'\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 '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\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,\n      // 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 esDo;\n});","//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n    monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],\n    monthsRegex = /^(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  var esMx = moment.defineLocale('es-mx', {\n    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\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: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex: /^(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 '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\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: 0,\n      // Sunday 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    invalidDate: 'Fecha inválida'\n  });\n  return esMx;\n});","//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n    monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],\n    monthsRegex = /^(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  var esUs = moment.defineLocale('es-us', {\n    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\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: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex: /^(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 A',\n      LTS: 'h:mm:ss A',\n      L: 'MM/DD/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY h:mm A',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'\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 '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\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: 0,\n      // 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\n  return esUs;\n});","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n      ss: [number + 'sekundi', number + 'sekundit'],\n      m: ['ühe minuti', 'üks minut'],\n      mm: [number + ' minuti', number + ' minutit'],\n      h: ['ühe tunni', 'tund aega', 'üks tund'],\n      hh: [number + ' tunni', number + ' tundi'],\n      d: ['ühe päeva', 'üks päev'],\n      M: ['kuu aja', 'kuu aega', 'üks kuu'],\n      MM: [number + ' kuu', number + ' kuud'],\n      y: ['ühe aasta', 'aasta', 'üks aasta'],\n      yy: [number + ' aasta', number + ' aastat']\n    };\n    if (withoutSuffix) {\n      return format[key][2] ? format[key][2] : format[key][1];\n    }\n    return isFuture ? format[key][0] : format[key][1];\n  }\n  var et = moment.defineLocale('et', {\n    months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n    monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n    weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n    weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n    weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\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: '[Täna,] LT',\n      nextDay: '[Homme,] LT',\n      nextWeek: '[Järgmine] dddd LT',\n      lastDay: '[Eile,] LT',\n      lastWeek: '[Eelmine] dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s pärast',\n      past: '%s tagasi',\n      s: processRelativeTime,\n      ss: processRelativeTime,\n      m: processRelativeTime,\n      mm: processRelativeTime,\n      h: processRelativeTime,\n      hh: processRelativeTime,\n      d: processRelativeTime,\n      dd: '%d päeva',\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,\n      // 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 et;\n});","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var eu = moment.defineLocale('eu', {\n    months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n    monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n    weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n    weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'YYYY[ko] MMMM[ren] D[a]',\n      LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n      LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n      l: 'YYYY-M-D',\n      ll: 'YYYY[ko] MMM D[a]',\n      lll: 'YYYY[ko] MMM D[a] HH:mm',\n      llll: 'ddd, YYYY[ko] MMM D[a] HH:mm'\n    },\n    calendar: {\n      sameDay: '[gaur] LT[etan]',\n      nextDay: '[bihar] LT[etan]',\n      nextWeek: 'dddd LT[etan]',\n      lastDay: '[atzo] LT[etan]',\n      lastWeek: '[aurreko] dddd LT[etan]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s barru',\n      past: 'duela %s',\n      s: 'segundo batzuk',\n      ss: '%d segundo',\n      m: 'minutu bat',\n      mm: '%d minutu',\n      h: 'ordu bat',\n      hh: '%d ordu',\n      d: 'egun bat',\n      dd: '%d egun',\n      M: 'hilabete bat',\n      MM: '%d hilabete',\n      y: 'urte bat',\n      yy: '%d urte'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 eu;\n});","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '۱',\n      2: '۲',\n      3: '۳',\n      4: '۴',\n      5: '۵',\n      6: '۶',\n      7: '۷',\n      8: '۸',\n      9: '۹',\n      0: '۰'\n    },\n    numberMap = {\n      '۱': '1',\n      '۲': '2',\n      '۳': '3',\n      '۴': '4',\n      '۵': '5',\n      '۶': '6',\n      '۷': '7',\n      '۸': '8',\n      '۹': '9',\n      '۰': '0'\n    };\n  var fa = moment.defineLocale('fa', {\n    months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n    monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n    weekdays: 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n    weekdaysShort: 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n    weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.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    meridiemParse: /قبل از ظهر|بعد از ظهر/,\n    isPM: function (input) {\n      return /بعد از ظهر/.test(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: 'dddd [ساعت] LT',\n      lastDay: '[دیروز ساعت] LT',\n      lastWeek: 'dddd [پیش] [ساعت] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'در %s',\n      past: '%s پیش',\n      s: 'چند ثانیه',\n      ss: '%d ثانیه',\n      m: 'یک دقیقه',\n      mm: '%d دقیقه',\n      h: 'یک ساعت',\n      hh: '%d ساعت',\n      d: 'یک روز',\n      dd: '%d روز',\n      M: 'یک ماه',\n      MM: '%d ماه',\n      y: 'یک سال',\n      yy: '%d سال'\n    },\n    preparse: function (string) {\n      return string.replace(/[۰-۹]/g, function (match) {\n        return numberMap[match];\n      }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}م/,\n    ordinal: '%dم',\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n    }\n  });\n\n  return fa;\n});","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n    numbersFuture = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', numbersPast[7], numbersPast[8], numbersPast[9]];\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = '';\n    switch (key) {\n      case 's':\n        return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n      case 'ss':\n        result = isFuture ? 'sekunnin' : 'sekuntia';\n        break;\n      case 'm':\n        return isFuture ? 'minuutin' : 'minuutti';\n      case 'mm':\n        result = isFuture ? 'minuutin' : 'minuuttia';\n        break;\n      case 'h':\n        return isFuture ? 'tunnin' : 'tunti';\n      case 'hh':\n        result = isFuture ? 'tunnin' : 'tuntia';\n        break;\n      case 'd':\n        return isFuture ? 'päivän' : 'päivä';\n      case 'dd':\n        result = isFuture ? 'päivän' : 'päivää';\n        break;\n      case 'M':\n        return isFuture ? 'kuukauden' : 'kuukausi';\n      case 'MM':\n        result = isFuture ? 'kuukauden' : 'kuukautta';\n        break;\n      case 'y':\n        return isFuture ? 'vuoden' : 'vuosi';\n      case 'yy':\n        result = isFuture ? 'vuoden' : 'vuotta';\n        break;\n    }\n    result = verbalNumber(number, isFuture) + ' ' + result;\n    return result;\n  }\n  function verbalNumber(number, isFuture) {\n    return number < 10 ? isFuture ? numbersFuture[number] : numbersPast[number] : number;\n  }\n  var fi = moment.defineLocale('fi', {\n    months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n    monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n    weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n    weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n    weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n    longDateFormat: {\n      LT: 'HH.mm',\n      LTS: 'HH.mm.ss',\n      L: 'DD.MM.YYYY',\n      LL: 'Do MMMM[ta] YYYY',\n      LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n      LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n      l: 'D.M.YYYY',\n      ll: 'Do MMM YYYY',\n      lll: 'Do MMM YYYY, [klo] HH.mm',\n      llll: 'ddd, Do MMM YYYY, [klo] HH.mm'\n    },\n    calendar: {\n      sameDay: '[tänään] [klo] LT',\n      nextDay: '[huomenna] [klo] LT',\n      nextWeek: 'dddd [klo] LT',\n      lastDay: '[eilen] [klo] LT',\n      lastWeek: '[viime] dddd[na] [klo] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s päästä',\n      past: '%s sitten',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 fi;\n});","//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var fil = moment.defineLocale('fil', {\n    months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n    monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n    weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n    weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n    weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'MM/D/YYYY',\n      LL: 'MMMM D, YYYY',\n      LLL: 'MMMM D, YYYY HH:mm',\n      LLLL: 'dddd, MMMM DD, YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: 'LT [ngayong araw]',\n      nextDay: '[Bukas ng] LT',\n      nextWeek: 'LT [sa susunod na] dddd',\n      lastDay: 'LT [kahapon]',\n      lastWeek: 'LT [noong nakaraang] dddd',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'sa loob ng %s',\n      past: '%s ang nakalipas',\n      s: 'ilang segundo',\n      ss: '%d segundo',\n      m: 'isang minuto',\n      mm: '%d minuto',\n      h: 'isang oras',\n      hh: '%d oras',\n      d: 'isang araw',\n      dd: '%d araw',\n      M: 'isang buwan',\n      MM: '%d buwan',\n      y: 'isang taon',\n      yy: '%d taon'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal: function (number) {\n      return number;\n    },\n    week: {\n      dow: 1,\n      // 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 fil;\n});","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var fo = moment.defineLocale('fo', {\n    months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n    weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n    weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n    weekdaysMin: 'su_má_tý_mi_hó_fr_le'.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: '[Í dag kl.] LT',\n      nextDay: '[Í morgin kl.] LT',\n      nextWeek: 'dddd [kl.] LT',\n      lastDay: '[Í gjár kl.] LT',\n      lastWeek: '[síðstu] dddd [kl] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'um %s',\n      past: '%s síðani',\n      s: 'fá sekund',\n      ss: '%d sekundir',\n      m: 'ein minuttur',\n      mm: '%d minuttir',\n      h: 'ein tími',\n      hh: '%d tímar',\n      d: 'ein dagur',\n      dd: '%d dagar',\n      M: 'ein mánaður',\n      MM: '%d mánaðir',\n      y: 'eitt ár',\n      yy: '%d ár'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 fo;\n});","//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var monthsStrictRegex = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n    monthsShortStrictRegex = /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n    monthsRegex = /(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 = [/^janv/i, /^févr/i, /^mars/i, /^avr/i, /^mai/i, /^juin/i, /^juil/i, /^août/i, /^sept/i, /^oct/i, /^nov/i, /^déc/i];\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    monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\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,\n      // 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});","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var frCa = moment.defineLocale('fr-ca', {\n    months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact: true,\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: 'YYYY-MM-DD',\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      M: 'un mois',\n      MM: '%d mois',\n      y: 'un an',\n      yy: '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        // Words with masculine grammatical gender: mois, trimestre, jour\n        default:\n        case 'M':\n        case 'Q':\n        case 'D':\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  });\n  return frCa;\n});","//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var frCh = moment.defineLocale('fr-ch', {\n    months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact: true,\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      M: 'un mois',\n      MM: '%d mois',\n      y: 'un an',\n      yy: '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        // Words with masculine grammatical gender: mois, trimestre, jour\n        default:\n        case 'M':\n        case 'Q':\n        case 'D':\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,\n      // 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 frCh;\n});","//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n    monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n  var fy = moment.defineLocale('fy', {\n    months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\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    monthsParseExact: true,\n    weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n    weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n    weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.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: '[hjoed om] LT',\n      nextDay: '[moarn om] LT',\n      nextWeek: 'dddd [om] LT',\n      lastDay: '[juster om] LT',\n      lastWeek: '[ôfrûne] dddd [om] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'oer %s',\n      past: '%s lyn',\n      s: 'in pear sekonden',\n      ss: '%d sekonden',\n      m: 'ien minút',\n      mm: '%d minuten',\n      h: 'ien oere',\n      hh: '%d oeren',\n      d: 'ien dei',\n      dd: '%d dagen',\n      M: 'ien moanne',\n      MM: '%d moannen',\n      y: 'ien jier',\n      yy: '%d jierren'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal: function (number) {\n      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');\n    },\n    week: {\n      dow: 1,\n      // 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 fy;\n});","//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var months = ['Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Meitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deireadh Fómhair', 'Samhain', 'Nollaig'],\n    monthsShort = ['Ean', 'Feabh', 'Márt', 'Aib', 'Beal', 'Meith', 'Iúil', 'Lún', 'M.F.', 'D.F.', 'Samh', 'Noll'],\n    weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Sathairn'],\n    weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n    weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n  var ga = moment.defineLocale('ga', {\n    months: months,\n    monthsShort: monthsShort,\n    monthsParseExact: true,\n    weekdays: weekdays,\n    weekdaysShort: weekdaysShort,\n    weekdaysMin: weekdaysMin,\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: '[Inniu ag] LT',\n      nextDay: '[Amárach ag] LT',\n      nextWeek: 'dddd [ag] LT',\n      lastDay: '[Inné ag] LT',\n      lastWeek: 'dddd [seo caite] [ag] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'i %s',\n      past: '%s ó shin',\n      s: 'cúpla soicind',\n      ss: '%d soicind',\n      m: 'nóiméad',\n      mm: '%d nóiméad',\n      h: 'uair an chloig',\n      hh: '%d uair an chloig',\n      d: 'lá',\n      dd: '%d lá',\n      M: 'mí',\n      MM: '%d míonna',\n      y: 'bliain',\n      yy: '%d bliain'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n    ordinal: function (number) {\n      var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 ga;\n});","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var months = ['Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'],\n    monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'],\n    weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'],\n    weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n    weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n  var gd = moment.defineLocale('gd', {\n    months: months,\n    monthsShort: monthsShort,\n    monthsParseExact: true,\n    weekdays: weekdays,\n    weekdaysShort: weekdaysShort,\n    weekdaysMin: weekdaysMin,\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: '[An-diugh aig] LT',\n      nextDay: '[A-màireach aig] LT',\n      nextWeek: 'dddd [aig] LT',\n      lastDay: '[An-dè aig] LT',\n      lastWeek: 'dddd [seo chaidh] [aig] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'ann an %s',\n      past: 'bho chionn %s',\n      s: 'beagan diogan',\n      ss: '%d diogan',\n      m: 'mionaid',\n      mm: '%d mionaidean',\n      h: 'uair',\n      hh: '%d uairean',\n      d: 'latha',\n      dd: '%d latha',\n      M: 'mìos',\n      MM: '%d mìosan',\n      y: 'bliadhna',\n      yy: '%d bliadhna'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n    ordinal: function (number) {\n      var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 gd;\n});","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var gl = moment.defineLocale('gl', {\n    months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n    monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n    weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n    weekdaysMin: 'do_lu_ma_mé_xo_ve_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 '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n      },\n      nextDay: function () {\n        return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n      },\n      nextWeek: function () {\n        return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n      },\n      lastDay: function () {\n        return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n      },\n      lastWeek: function () {\n        return '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: function (str) {\n        if (str.indexOf('un') === 0) {\n          return 'n' + str;\n        }\n        return 'en ' + str;\n      },\n      past: 'hai %s',\n      s: 'uns segundos',\n      ss: '%d segundos',\n      m: 'un minuto',\n      mm: '%d minutos',\n      h: 'unha hora',\n      hh: '%d horas',\n      d: 'un día',\n      dd: '%d días',\n      M: 'un mes',\n      MM: '%d meses',\n      y: 'un ano',\n      yy: '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // 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 gl;\n});","//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n      ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n      m: ['एका मिणटान', 'एक मिनूट'],\n      mm: [number + ' मिणटांनी', number + ' मिणटां'],\n      h: ['एका वरान', 'एक वर'],\n      hh: [number + ' वरांनी', number + ' वरां'],\n      d: ['एका दिसान', 'एक दीस'],\n      dd: [number + ' दिसांनी', number + ' दीस'],\n      M: ['एका म्हयन्यान', 'एक म्हयनो'],\n      MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n      y: ['एका वर्सान', 'एक वर्स'],\n      yy: [number + ' वर्सांनी', number + ' वर्सां']\n    };\n    return isFuture ? format[key][0] : format[key][1];\n  }\n  var gomDeva = moment.defineLocale('gom-deva', {\n    months: {\n      standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n      format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split('_'),\n      isFormat: /MMMM(\\s)+D[oD]?/\n    },\n    monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n    weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n    weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'A h:mm [वाजतां]',\n      LTS: 'A h:mm:ss [वाजतां]',\n      L: 'DD-MM-YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n      LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n      llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]'\n    },\n    calendar: {\n      sameDay: '[आयज] LT',\n      nextDay: '[फाल्यां] LT',\n      nextWeek: '[फुडलो] dddd[,] LT',\n      lastDay: '[काल] LT',\n      lastWeek: '[फाटलो] dddd[,] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s',\n      past: '%s आदीं',\n      s: processRelativeTime,\n      ss: processRelativeTime,\n      m: processRelativeTime,\n      mm: processRelativeTime,\n      h: processRelativeTime,\n      hh: processRelativeTime,\n      d: processRelativeTime,\n      dd: processRelativeTime,\n      M: processRelativeTime,\n      MM: processRelativeTime,\n      y: processRelativeTime,\n      yy: processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        // the ordinal 'वेर' only applies to day of the month\n        case 'D':\n          return number + 'वेर';\n        default:\n        case 'M':\n        case 'Q':\n        case 'DDD':\n        case 'd':\n        case 'w':\n        case 'W':\n          return number;\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week\n      doy: 3 // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n    },\n\n    meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'राती') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'सकाळीं') {\n        return hour;\n      } else if (meridiem === 'दनपारां') {\n        return hour > 12 ? hour : hour + 12;\n      } else if (meridiem === 'सांजे') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'राती';\n      } else if (hour < 12) {\n        return 'सकाळीं';\n      } else if (hour < 16) {\n        return 'दनपारां';\n      } else if (hour < 20) {\n        return 'सांजे';\n      } else {\n        return 'राती';\n      }\n    }\n  });\n  return gomDeva;\n});","//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      s: ['thoddea sekondamni', 'thodde sekond'],\n      ss: [number + ' sekondamni', number + ' sekond'],\n      m: ['eka mintan', 'ek minut'],\n      mm: [number + ' mintamni', number + ' mintam'],\n      h: ['eka voran', 'ek vor'],\n      hh: [number + ' voramni', number + ' voram'],\n      d: ['eka disan', 'ek dis'],\n      dd: [number + ' disamni', number + ' dis'],\n      M: ['eka mhoinean', 'ek mhoino'],\n      MM: [number + ' mhoineamni', number + ' mhoine'],\n      y: ['eka vorsan', 'ek voros'],\n      yy: [number + ' vorsamni', number + ' vorsam']\n    };\n    return isFuture ? format[key][0] : format[key][1];\n  }\n  var gomLatn = moment.defineLocale('gom-latn', {\n    months: {\n      standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n      format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split('_'),\n      isFormat: /MMMM(\\s)+D[oD]?/\n    },\n    monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n    weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n    weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'A h:mm [vazta]',\n      LTS: 'A h:mm:ss [vazta]',\n      L: 'DD-MM-YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY A h:mm [vazta]',\n      LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n      llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n    },\n    calendar: {\n      sameDay: '[Aiz] LT',\n      nextDay: '[Faleam] LT',\n      nextWeek: '[Fuddlo] dddd[,] LT',\n      lastDay: '[Kal] LT',\n      lastWeek: '[Fattlo] dddd[,] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s',\n      past: '%s adim',\n      s: processRelativeTime,\n      ss: processRelativeTime,\n      m: processRelativeTime,\n      mm: processRelativeTime,\n      h: processRelativeTime,\n      hh: processRelativeTime,\n      d: processRelativeTime,\n      dd: processRelativeTime,\n      M: processRelativeTime,\n      MM: processRelativeTime,\n      y: processRelativeTime,\n      yy: processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        // the ordinal 'er' only applies to day of the month\n        case 'D':\n          return number + 'er';\n        default:\n        case 'M':\n        case 'Q':\n        case 'DDD':\n        case 'd':\n        case 'w':\n        case 'W':\n          return number;\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week\n      doy: 3 // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n    },\n\n    meridiemParse: /rati|sokallim|donparam|sanje/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'rati') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'sokallim') {\n        return hour;\n      } else if (meridiem === 'donparam') {\n        return hour > 12 ? hour : hour + 12;\n      } else if (meridiem === 'sanje') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'rati';\n      } else if (hour < 12) {\n        return 'sokallim';\n      } else if (hour < 16) {\n        return 'donparam';\n      } else if (hour < 20) {\n        return 'sanje';\n      } else {\n        return 'rati';\n      }\n    }\n  });\n  return gomLatn;\n});","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '૧',\n      2: '૨',\n      3: '૩',\n      4: '૪',\n      5: '૫',\n      6: '૬',\n      7: '૭',\n      8: '૮',\n      9: '૯',\n      0: '૦'\n    },\n    numberMap = {\n      '૧': '1',\n      '૨': '2',\n      '૩': '3',\n      '૪': '4',\n      '૫': '5',\n      '૬': '6',\n      '૭': '7',\n      '૮': '8',\n      '૯': '9',\n      '૦': '0'\n    };\n  var gu = moment.defineLocale('gu', {\n    months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n    monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n    weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n    weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm વાગ્યે',\n      LTS: 'A h:mm:ss વાગ્યે',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n    },\n    calendar: {\n      sameDay: '[આજ] LT',\n      nextDay: '[કાલે] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[ગઇકાલે] LT',\n      lastWeek: '[પાછલા] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s મા',\n      past: '%s પહેલા',\n      s: 'અમુક પળો',\n      ss: '%d સેકંડ',\n      m: 'એક મિનિટ',\n      mm: '%d મિનિટ',\n      h: 'એક કલાક',\n      hh: '%d કલાક',\n      d: 'એક દિવસ',\n      dd: '%d દિવસ',\n      M: 'એક મહિનો',\n      MM: '%d મહિનો',\n      y: 'એક વર્ષ',\n      yy: '%d વર્ષ'\n    },\n    preparse: function (string) {\n      return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n    meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'રાત') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'સવાર') {\n        return hour;\n      } else if (meridiem === 'બપોર') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'સાંજ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'રાત';\n      } else if (hour < 10) {\n        return 'સવાર';\n      } else if (hour < 17) {\n        return 'બપોર';\n      } else if (hour < 20) {\n        return 'સાંજ';\n      } else {\n        return 'રાત';\n      }\n    },\n    week: {\n      dow: 0,\n      // 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\n  return gu;\n});","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var he = moment.defineLocale('he', {\n    months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n    monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n    weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\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      l: 'D/M/YYYY',\n      ll: 'D MMM YYYY',\n      lll: 'D MMM YYYY HH:mm',\n      llll: 'ddd, D MMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[היום ב־]LT',\n      nextDay: '[מחר ב־]LT',\n      nextWeek: 'dddd [בשעה] LT',\n      lastDay: '[אתמול ב־]LT',\n      lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'בעוד %s',\n      past: 'לפני %s',\n      s: 'מספר שניות',\n      ss: '%d שניות',\n      m: 'דקה',\n      mm: '%d דקות',\n      h: 'שעה',\n      hh: function (number) {\n        if (number === 2) {\n          return 'שעתיים';\n        }\n        return number + ' שעות';\n      },\n      d: 'יום',\n      dd: function (number) {\n        if (number === 2) {\n          return 'יומיים';\n        }\n        return number + ' ימים';\n      },\n      M: 'חודש',\n      MM: function (number) {\n        if (number === 2) {\n          return 'חודשיים';\n        }\n        return number + ' חודשים';\n      },\n      y: 'שנה',\n      yy: function (number) {\n        if (number === 2) {\n          return 'שנתיים';\n        } else if (number % 10 === 0 && number !== 10) {\n          return number + ' שנה';\n        }\n        return number + ' שנים';\n      }\n    },\n    meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n    isPM: function (input) {\n      return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 5) {\n        return 'לפנות בוקר';\n      } else if (hour < 10) {\n        return 'בבוקר';\n      } else if (hour < 12) {\n        return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n      } else if (hour < 18) {\n        return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n      } else {\n        return 'בערב';\n      }\n    }\n  });\n  return he;\n});","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '१',\n      2: '२',\n      3: '३',\n      4: '४',\n      5: '५',\n      6: '६',\n      7: '७',\n      8: '८',\n      9: '९',\n      0: '०'\n    },\n    numberMap = {\n      '१': '1',\n      '२': '2',\n      '३': '3',\n      '४': '4',\n      '५': '5',\n      '६': '6',\n      '७': '7',\n      '८': '8',\n      '९': '9',\n      '०': '0'\n    },\n    monthsParse = [/^जन/i, /^फ़र|फर/i, /^मार्च/i, /^अप्रै/i, /^मई/i, /^जून/i, /^जुल/i, /^अग/i, /^सितं|सित/i, /^अक्टू/i, /^नव|नवं/i, /^दिसं|दिस/i],\n    shortMonthsParse = [/^जन/i, /^फ़र/i, /^मार्च/i, /^अप्रै/i, /^मई/i, /^जून/i, /^जुल/i, /^अग/i, /^सित/i, /^अक्टू/i, /^नव/i, /^दिस/i];\n  var hi = moment.defineLocale('hi', {\n    months: {\n      format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n      standalone: 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split('_')\n    },\n    monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n    weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n    weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n    weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm बजे',\n      LTS: 'A h:mm:ss बजे',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm बजे',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm बजे'\n    },\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: shortMonthsParse,\n    monthsRegex: /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n    monthsShortRegex: /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n    monthsStrictRegex: /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n    monthsShortStrictRegex: /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n    calendar: {\n      sameDay: '[आज] LT',\n      nextDay: '[कल] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[कल] LT',\n      lastWeek: '[पिछले] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s में',\n      past: '%s पहले',\n      s: 'कुछ ही क्षण',\n      ss: '%d सेकंड',\n      m: 'एक मिनट',\n      mm: '%d मिनट',\n      h: 'एक घंटा',\n      hh: '%d घंटे',\n      d: 'एक दिन',\n      dd: '%d दिन',\n      M: 'एक महीने',\n      MM: '%d महीने',\n      y: 'एक वर्ष',\n      yy: '%d वर्ष'\n    },\n    preparse: function (string) {\n      return string.replace(/[१२३४५६७८९०]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n    meridiemParse: /रात|सुबह|दोपहर|शाम/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'रात') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'सुबह') {\n        return hour;\n      } else if (meridiem === 'दोपहर') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'शाम') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'रात';\n      } else if (hour < 10) {\n        return 'सुबह';\n      } else if (hour < 17) {\n        return 'दोपहर';\n      } else if (hour < 20) {\n        return 'शाम';\n      } else {\n        return 'रात';\n      }\n    },\n    week: {\n      dow: 0,\n      // 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\n  return hi;\n});","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n    switch (key) {\n      case 'ss':\n        if (number === 1) {\n          result += 'sekunda';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'sekunde';\n        } else {\n          result += 'sekundi';\n        }\n        return result;\n      case 'm':\n        return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n      case 'mm':\n        if (number === 1) {\n          result += 'minuta';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'minute';\n        } else {\n          result += 'minuta';\n        }\n        return result;\n      case 'h':\n        return withoutSuffix ? 'jedan sat' : 'jednog sata';\n      case 'hh':\n        if (number === 1) {\n          result += 'sat';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'sata';\n        } else {\n          result += 'sati';\n        }\n        return result;\n      case 'dd':\n        if (number === 1) {\n          result += 'dan';\n        } else {\n          result += 'dana';\n        }\n        return result;\n      case 'MM':\n        if (number === 1) {\n          result += 'mjesec';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'mjeseca';\n        } else {\n          result += 'mjeseci';\n        }\n        return result;\n      case 'yy':\n        if (number === 1) {\n          result += 'godina';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'godine';\n        } else {\n          result += 'godina';\n        }\n        return result;\n    }\n  }\n  var hr = moment.defineLocale('hr', {\n    months: {\n      format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n      standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n    },\n    monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'Do MMMM YYYY',\n      LLL: 'Do MMMM YYYY H:mm',\n      LLLL: 'dddd, Do MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[danas u] LT',\n      nextDay: '[sutra u] LT',\n      nextWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[u] [nedjelju] [u] LT';\n          case 3:\n            return '[u] [srijedu] [u] LT';\n          case 6:\n            return '[u] [subotu] [u] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[u] dddd [u] LT';\n        }\n      },\n      lastDay: '[jučer u] LT',\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[prošlu] [nedjelju] [u] LT';\n          case 3:\n            return '[prošlu] [srijedu] [u] LT';\n          case 6:\n            return '[prošle] [subote] [u] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[prošli] dddd [u] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'prije %s',\n      s: 'par sekundi',\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: 'dan',\n      dd: translate,\n      M: 'mjesec',\n      MM: translate,\n      y: 'godinu',\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 hr;\n});","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt  : https://github.com/passatgt\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n  function translate(number, withoutSuffix, key, isFuture) {\n    var num = number;\n    switch (key) {\n      case 's':\n        return isFuture || withoutSuffix ? 'néhány másodperc' : 'néhány másodperce';\n      case 'ss':\n        return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n      case 'm':\n        return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n      case 'mm':\n        return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n      case 'h':\n        return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n      case 'hh':\n        return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n      case 'd':\n        return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n      case 'dd':\n        return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n      case 'M':\n        return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n      case 'MM':\n        return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n      case 'y':\n        return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n      case 'yy':\n        return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n    }\n    return '';\n  }\n  function week(isFuture) {\n    return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n  }\n  var hu = moment.defineLocale('hu', {\n    months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n    monthsShort: 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n    weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n    weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'YYYY.MM.DD.',\n      LL: 'YYYY. MMMM D.',\n      LLL: 'YYYY. MMMM D. H:mm',\n      LLLL: 'YYYY. MMMM D., dddd H:mm'\n    },\n    meridiemParse: /de|du/i,\n    isPM: function (input) {\n      return input.charAt(1).toLowerCase() === 'u';\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours < 12) {\n        return isLower === true ? 'de' : 'DE';\n      } else {\n        return isLower === true ? 'du' : 'DU';\n      }\n    },\n    calendar: {\n      sameDay: '[ma] LT[-kor]',\n      nextDay: '[holnap] LT[-kor]',\n      nextWeek: function () {\n        return week.call(this, true);\n      },\n      lastDay: '[tegnap] LT[-kor]',\n      lastWeek: function () {\n        return week.call(this, false);\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s múlva',\n      past: '%s',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 hu;\n});","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var hyAm = moment.defineLocale('hy-am', {\n    months: {\n      format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n      standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n    },\n    monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n    weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\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: '[այսօր] LT',\n      nextDay: '[վաղը] LT',\n      lastDay: '[երեկ] LT',\n      nextWeek: function () {\n        return 'dddd [օրը ժամը] LT';\n      },\n      lastWeek: function () {\n        return '[անցած] dddd [օրը ժամը] LT';\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s հետո',\n      past: '%s առաջ',\n      s: 'մի քանի վայրկյան',\n      ss: '%d վայրկյան',\n      m: 'րոպե',\n      mm: '%d րոպե',\n      h: 'ժամ',\n      hh: '%d ժամ',\n      d: 'օր',\n      dd: '%d օր',\n      M: 'ամիս',\n      MM: '%d ամիս',\n      y: 'տարի',\n      yy: '%d տարի'\n    },\n    meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n    isPM: function (input) {\n      return /^(ցերեկվա|երեկոյան)$/.test(input);\n    },\n    meridiem: function (hour) {\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}|\\d{1,2}-(ին|րդ)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        case 'DDD':\n        case 'w':\n        case 'W':\n        case 'DDDo':\n          if (number === 1) {\n            return number + '-ին';\n          }\n          return number + '-րդ';\n        default:\n          return number;\n      }\n    },\n    week: {\n      dow: 1,\n      // 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 hyAm;\n});","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var id = moment.defineLocale('id', {\n    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n    weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n    weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.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 [pukul] HH.mm',\n      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|siang|sore|malam/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'pagi') {\n        return hour;\n      } else if (meridiem === 'siang') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'sore' || meridiem === 'malam') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'pagi';\n      } else if (hours < 15) {\n        return 'siang';\n      } else if (hours < 19) {\n        return 'sore';\n      } else {\n        return 'malam';\n      }\n    },\n    calendar: {\n      sameDay: '[Hari ini pukul] LT',\n      nextDay: '[Besok pukul] LT',\n      nextWeek: 'dddd [pukul] LT',\n      lastDay: '[Kemarin pukul] LT',\n      lastWeek: 'dddd [lalu pukul] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dalam %s',\n      past: '%s yang lalu',\n      s: 'beberapa detik',\n      ss: '%d detik',\n      m: 'semenit',\n      mm: '%d menit',\n      h: 'sejam',\n      hh: '%d jam',\n      d: 'sehari',\n      dd: '%d hari',\n      M: 'sebulan',\n      MM: '%d bulan',\n      y: 'setahun',\n      yy: '%d tahun'\n    },\n    week: {\n      dow: 0,\n      // 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\n  return id;\n});","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function plural(n) {\n    if (n % 100 === 11) {\n      return true;\n    } else if (n % 10 === 1) {\n      return false;\n    }\n    return true;\n  }\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n      case 's':\n        return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n      case 'ss':\n        if (plural(number)) {\n          return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n        }\n        return result + 'sekúnda';\n      case 'm':\n        return withoutSuffix ? 'mínúta' : 'mínútu';\n      case 'mm':\n        if (plural(number)) {\n          return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n        } else if (withoutSuffix) {\n          return result + 'mínúta';\n        }\n        return result + 'mínútu';\n      case 'hh':\n        if (plural(number)) {\n          return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n        }\n        return result + 'klukkustund';\n      case 'd':\n        if (withoutSuffix) {\n          return 'dagur';\n        }\n        return isFuture ? 'dag' : 'degi';\n      case 'dd':\n        if (plural(number)) {\n          if (withoutSuffix) {\n            return result + 'dagar';\n          }\n          return result + (isFuture ? 'daga' : 'dögum');\n        } else if (withoutSuffix) {\n          return result + 'dagur';\n        }\n        return result + (isFuture ? 'dag' : 'degi');\n      case 'M':\n        if (withoutSuffix) {\n          return 'mánuður';\n        }\n        return isFuture ? 'mánuð' : 'mánuði';\n      case 'MM':\n        if (plural(number)) {\n          if (withoutSuffix) {\n            return result + 'mánuðir';\n          }\n          return result + (isFuture ? 'mánuði' : 'mánuðum');\n        } else if (withoutSuffix) {\n          return result + 'mánuður';\n        }\n        return result + (isFuture ? 'mánuð' : 'mánuði');\n      case 'y':\n        return withoutSuffix || isFuture ? 'ár' : 'ári';\n      case 'yy':\n        if (plural(number)) {\n          return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n        }\n        return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n    }\n  }\n  var is = moment.defineLocale('is', {\n    months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n    weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n    weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n    weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\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 [kl.] H:mm',\n      LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm'\n    },\n    calendar: {\n      sameDay: '[í dag kl.] LT',\n      nextDay: '[á morgun kl.] LT',\n      nextWeek: 'dddd [kl.] LT',\n      lastDay: '[í gær kl.] LT',\n      lastWeek: '[síðasta] dddd [kl.] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'eftir %s',\n      past: 'fyrir %s síðan',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: 'klukkustund',\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 is;\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;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var it = moment.defineLocale('it', {\n    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\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    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 '[Oggi a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") + ']LT';\n      },\n      nextDay: function () {\n        return '[Domani a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") + ']LT';\n      },\n      nextWeek: function () {\n        return 'dddd [a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") + ']LT';\n      },\n      lastDay: function () {\n        return '[Ieri a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") + ']LT';\n      },\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[La scorsa] dddd [a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") + ']LT';\n          default:\n            return '[Lo scorso] dddd [a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") + ']LT';\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,\n      // 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});","//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var itCh = moment.defineLocale('it-ch', {\n    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\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    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: '[Oggi alle] LT',\n      nextDay: '[Domani alle] LT',\n      nextWeek: 'dddd [alle] LT',\n      lastDay: '[Ieri alle] LT',\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[la scorsa] dddd [alle] LT';\n          default:\n            return '[lo scorso] dddd [alle] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: function (s) {\n        return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n      },\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      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,\n      // 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 itCh;\n});","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ja = moment.defineLocale('ja', {\n    eras: [{\n      since: '2019-05-01',\n      offset: 1,\n      name: '令和',\n      narrow: '㋿',\n      abbr: 'R'\n    }, {\n      since: '1989-01-08',\n      until: '2019-04-30',\n      offset: 1,\n      name: '平成',\n      narrow: '㍻',\n      abbr: 'H'\n    }, {\n      since: '1926-12-25',\n      until: '1989-01-07',\n      offset: 1,\n      name: '昭和',\n      narrow: '㍼',\n      abbr: 'S'\n    }, {\n      since: '1912-07-30',\n      until: '1926-12-24',\n      offset: 1,\n      name: '大正',\n      narrow: '㍽',\n      abbr: 'T'\n    }, {\n      since: '1873-01-01',\n      until: '1912-07-29',\n      offset: 6,\n      name: '明治',\n      narrow: '㍾',\n      abbr: 'M'\n    }, {\n      since: '0001-01-01',\n      until: '1873-12-31',\n      offset: 1,\n      name: '西暦',\n      narrow: 'AD',\n      abbr: 'AD'\n    }, {\n      since: '0000-12-31',\n      until: -Infinity,\n      offset: 1,\n      name: '紀元前',\n      narrow: 'BC',\n      abbr: 'BC'\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    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  return ja;\n});","//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var jv = moment.defineLocale('jv', {\n    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n    weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n    weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.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 [pukul] HH.mm',\n      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /enjing|siyang|sonten|ndalu/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'enjing') {\n        return hour;\n      } else if (meridiem === 'siyang') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'enjing';\n      } else if (hours < 15) {\n        return 'siyang';\n      } else if (hours < 19) {\n        return 'sonten';\n      } else {\n        return 'ndalu';\n      }\n    },\n    calendar: {\n      sameDay: '[Dinten puniko pukul] LT',\n      nextDay: '[Mbenjang pukul] LT',\n      nextWeek: 'dddd [pukul] LT',\n      lastDay: '[Kala wingi pukul] LT',\n      lastWeek: 'dddd [kepengker pukul] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'wonten ing %s',\n      past: '%s ingkang kepengker',\n      s: 'sawetawis detik',\n      ss: '%d detik',\n      m: 'setunggal menit',\n      mm: '%d menit',\n      h: 'setunggal jam',\n      hh: '%d jam',\n      d: 'sedinten',\n      dd: '%d dinten',\n      M: 'sewulan',\n      MM: '%d wulan',\n      y: 'setaun',\n      yy: '%d taun'\n    },\n    week: {\n      dow: 1,\n      // 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 jv;\n});","//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ka = moment.defineLocale('ka', {\n    months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n    monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n    weekdays: {\n      standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n      format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n      isFormat: /(წინა|შემდეგ)/\n    },\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: '[დღეს] LT[-ზე]',\n      nextDay: '[ხვალ] LT[-ზე]',\n      lastDay: '[გუშინ] LT[-ზე]',\n      nextWeek: '[შემდეგ] dddd LT[-ზე]',\n      lastWeek: '[წინა] dddd LT-ზე',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: function (s) {\n        return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function ($0, $1, $2) {\n          return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n        });\n      },\n      past: function (s) {\n        if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n          return s.replace(/(ი|ე)$/, 'ის წინ');\n        }\n        if (/წელი/.test(s)) {\n          return s.replace(/წელი$/, 'წლის წინ');\n        }\n        return s;\n      },\n      s: 'რამდენიმე წამი',\n      ss: '%d წამი',\n      m: 'წუთი',\n      mm: '%d წუთი',\n      h: 'საათი',\n      hh: '%d საათი',\n      d: 'დღე',\n      dd: '%d დღე',\n      M: 'თვე',\n      MM: '%d თვე',\n      y: 'წელი',\n      yy: '%d წელი'\n    },\n    dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n    ordinal: function (number) {\n      if (number === 0) {\n        return number;\n      }\n      if (number === 1) {\n        return number + '-ლი';\n      }\n      if (number < 20 || number <= 100 && number % 20 === 0 || number % 100 === 0) {\n        return 'მე-' + number;\n      }\n      return number + '-ე';\n    },\n    week: {\n      dow: 1,\n      doy: 7\n    }\n  });\n  return ka;\n});","//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var suffixes = {\n    0: '-ші',\n    1: '-ші',\n    2: '-ші',\n    3: '-ші',\n    4: '-ші',\n    5: '-ші',\n    6: '-шы',\n    7: '-ші',\n    8: '-ші',\n    9: '-шы',\n    10: '-шы',\n    20: '-шы',\n    30: '-шы',\n    40: '-шы',\n    50: '-ші',\n    60: '-шы',\n    70: '-ші',\n    80: '-ші',\n    90: '-шы',\n    100: '-ші'\n  };\n  var kk = moment.defineLocale('kk', {\n    months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n    monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n    weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\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: '[Бүгін сағат] LT',\n      nextDay: '[Ертең сағат] LT',\n      nextWeek: 'dddd [сағат] LT',\n      lastDay: '[Кеше сағат] LT',\n      lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ішінде',\n      past: '%s бұрын',\n      s: 'бірнеше секунд',\n      ss: '%d секунд',\n      m: 'бір минут',\n      mm: '%d минут',\n      h: 'бір сағат',\n      hh: '%d сағат',\n      d: 'бір күн',\n      dd: '%d күн',\n      M: 'бір ай',\n      MM: '%d ай',\n      y: 'бір жыл',\n      yy: '%d жыл'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n    ordinal: function (number) {\n      var a = number % 10,\n        b = number >= 100 ? 100 : null;\n      return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week: {\n      dow: 1,\n      // 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 kk;\n});","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '១',\n      2: '២',\n      3: '៣',\n      4: '៤',\n      5: '៥',\n      6: '៦',\n      7: '៧',\n      8: '៨',\n      9: '៩',\n      0: '០'\n    },\n    numberMap = {\n      '១': '1',\n      '២': '2',\n      '៣': '3',\n      '៤': '4',\n      '៥': '5',\n      '៦': '6',\n      '៧': '7',\n      '៨': '8',\n      '៩': '9',\n      '០': '0'\n    };\n  var km = moment.defineLocale('km', {\n    months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n    monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n    weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n    weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n    weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.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    meridiemParse: /ព្រឹក|ល្ងាច/,\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: 'dddd [ម៉ោង] LT',\n      lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n      lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%sទៀត',\n      past: '%sមុន',\n      s: 'ប៉ុន្មានវិនាទី',\n      ss: '%d វិនាទី',\n      m: 'មួយនាទី',\n      mm: '%d នាទី',\n      h: 'មួយម៉ោង',\n      hh: '%d ម៉ោង',\n      d: 'មួយថ្ងៃ',\n      dd: '%d ថ្ងៃ',\n      M: 'មួយខែ',\n      MM: '%d ខែ',\n      y: 'មួយឆ្នាំ',\n      yy: '%d ឆ្នាំ'\n    },\n    dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n    ordinal: 'ទី%d',\n    preparse: function (string) {\n      return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    week: {\n      dow: 1,\n      // 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 km;\n});","//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '೧',\n      2: '೨',\n      3: '೩',\n      4: '೪',\n      5: '೫',\n      6: '೬',\n      7: '೭',\n      8: '೮',\n      9: '೯',\n      0: '೦'\n    },\n    numberMap = {\n      '೧': '1',\n      '೨': '2',\n      '೩': '3',\n      '೪': '4',\n      '೫': '5',\n      '೬': '6',\n      '೭': '7',\n      '೮': '8',\n      '೯': '9',\n      '೦': '0'\n    };\n  var kn = moment.defineLocale('kn', {\n    months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n    monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n    weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n    weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm',\n      LTS: 'A h:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar: {\n      sameDay: '[ಇಂದು] LT',\n      nextDay: '[ನಾಳೆ] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[ನಿನ್ನೆ] LT',\n      lastWeek: '[ಕೊನೆಯ] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ನಂತರ',\n      past: '%s ಹಿಂದೆ',\n      s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n      ss: '%d ಸೆಕೆಂಡುಗಳು',\n      m: 'ಒಂದು ನಿಮಿಷ',\n      mm: '%d ನಿಮಿಷ',\n      h: 'ಒಂದು ಗಂಟೆ',\n      hh: '%d ಗಂಟೆ',\n      d: 'ಒಂದು ದಿನ',\n      dd: '%d ದಿನ',\n      M: 'ಒಂದು ತಿಂಗಳು',\n      MM: '%d ತಿಂಗಳು',\n      y: 'ಒಂದು ವರ್ಷ',\n      yy: '%d ವರ್ಷ'\n    },\n    preparse: function (string) {\n      return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'ರಾತ್ರಿ') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n        return hour;\n      } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'ಸಂಜೆ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'ರಾತ್ರಿ';\n      } else if (hour < 10) {\n        return 'ಬೆಳಿಗ್ಗೆ';\n      } else if (hour < 17) {\n        return 'ಮಧ್ಯಾಹ್ನ';\n      } else if (hour < 20) {\n        return 'ಸಂಜೆ';\n      } else {\n        return 'ರಾತ್ರಿ';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n    ordinal: function (number) {\n      return number + 'ನೇ';\n    },\n    week: {\n      dow: 0,\n      // 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\n  return kn;\n});","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ko = moment.defineLocale('ko', {\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    weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n    weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n    weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm',\n      LTS: 'A h:mm:ss',\n      L: 'YYYY.MM.DD.',\n      LL: 'YYYY년 MMMM D일',\n      LLL: 'YYYY년 MMMM D일 A h:mm',\n      LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n      l: 'YYYY.MM.DD.',\n      ll: 'YYYY년 MMMM D일',\n      lll: 'YYYY년 MMMM D일 A h:mm',\n      llll: 'YYYY년 MMMM D일 dddd A h:mm'\n    },\n    calendar: {\n      sameDay: '오늘 LT',\n      nextDay: '내일 LT',\n      nextWeek: 'dddd LT',\n      lastDay: '어제 LT',\n      lastWeek: '지난주 dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s 후',\n      past: '%s 전',\n      s: '몇 초',\n      ss: '%d초',\n      m: '1분',\n      mm: '%d분',\n      h: '한 시간',\n      hh: '%d시간',\n      d: '하루',\n      dd: '%d일',\n      M: '한 달',\n      MM: '%d달',\n      y: '일 년',\n      yy: '%d년'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '일';\n        case 'M':\n          return number + '월';\n        case 'w':\n        case 'W':\n          return number + '주';\n        default:\n          return number;\n      }\n    },\n    meridiemParse: /오전|오후/,\n    isPM: function (token) {\n      return token === '오후';\n    },\n    meridiem: function (hour, minute, isUpper) {\n      return hour < 12 ? '오전' : '오후';\n    }\n  });\n  return ko;\n});","//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '١',\n      2: '٢',\n      3: '٣',\n      4: '٤',\n      5: '٥',\n      6: '٦',\n      7: '٧',\n      8: '٨',\n      9: '٩',\n      0: '٠'\n    },\n    numberMap = {\n      '١': '1',\n      '٢': '2',\n      '٣': '3',\n      '٤': '4',\n      '٥': '5',\n      '٦': '6',\n      '٧': '7',\n      '٨': '8',\n      '٩': '9',\n      '٠': '0'\n    },\n    months = ['کانونی دووەم', 'شوبات', 'ئازار', 'نیسان', 'ئایار', 'حوزەیران', 'تەمموز', 'ئاب', 'ئەیلوول', 'تشرینی یەكەم', 'تشرینی دووەم', 'كانونی یەکەم'];\n  var ku = moment.defineLocale('ku', {\n    months: months,\n    monthsShort: months,\n    weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),\n    weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n    weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.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    meridiemParse: /ئێواره‌|به‌یانی/,\n    isPM: function (input) {\n      return /ئێواره‌/.test(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: 'dddd [كاتژمێر] LT',\n      lastDay: '[دوێنێ كاتژمێر] LT',\n      lastWeek: 'dddd [كاتژمێر] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'له‌ %s',\n      past: '%s',\n      s: 'چه‌ند چركه‌یه‌ك',\n      ss: 'چركه‌ %d',\n      m: 'یه‌ك خوله‌ك',\n      mm: '%d خوله‌ك',\n      h: 'یه‌ك كاتژمێر',\n      hh: '%d كاتژمێر',\n      d: 'یه‌ك ڕۆژ',\n      dd: '%d ڕۆژ',\n      M: 'یه‌ك مانگ',\n      MM: '%d مانگ',\n      y: 'یه‌ك ساڵ',\n      yy: '%d ساڵ'\n    },\n    preparse: function (string) {\n      return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n        return numberMap[match];\n      }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n    }\n  });\n\n  return ku;\n});","//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var suffixes = {\n    0: '-чү',\n    1: '-чи',\n    2: '-чи',\n    3: '-чү',\n    4: '-чү',\n    5: '-чи',\n    6: '-чы',\n    7: '-чи',\n    8: '-чи',\n    9: '-чу',\n    10: '-чу',\n    20: '-чы',\n    30: '-чу',\n    40: '-чы',\n    50: '-чү',\n    60: '-чы',\n    70: '-чи',\n    80: '-чи',\n    90: '-чу',\n    100: '-чү'\n  };\n  var ky = moment.defineLocale('ky', {\n    months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n    monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\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: '[Бүгүн саат] LT',\n      nextDay: '[Эртең саат] LT',\n      nextWeek: 'dddd [саат] LT',\n      lastDay: '[Кечээ саат] LT',\n      lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ичинде',\n      past: '%s мурун',\n      s: 'бирнече секунд',\n      ss: '%d секунд',\n      m: 'бир мүнөт',\n      mm: '%d мүнөт',\n      h: 'бир саат',\n      hh: '%d саат',\n      d: 'бир күн',\n      dd: '%d күн',\n      M: 'бир ай',\n      MM: '%d ай',\n      y: 'бир жыл',\n      yy: '%d жыл'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n    ordinal: function (number) {\n      var a = number % 10,\n        b = number >= 100 ? 100 : null;\n      return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week: {\n      dow: 1,\n      // 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 ky;\n});","//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      m: ['eng Minutt', 'enger Minutt'],\n      h: ['eng Stonn', 'enger Stonn'],\n      d: ['een Dag', 'engem Dag'],\n      M: ['ee Mount', 'engem Mount'],\n      y: ['ee Joer', 'engem Joer']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n  }\n  function processFutureTime(string) {\n    var number = string.substr(0, string.indexOf(' '));\n    if (eifelerRegelAppliesToNumber(number)) {\n      return 'a ' + string;\n    }\n    return 'an ' + string;\n  }\n  function processPastTime(string) {\n    var number = string.substr(0, string.indexOf(' '));\n    if (eifelerRegelAppliesToNumber(number)) {\n      return 'viru ' + string;\n    }\n    return 'virun ' + string;\n  }\n  /**\n   * Returns true if the word before the given number loses the '-n' ending.\n   * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n   *\n   * @param number {integer}\n   * @returns {boolean}\n   */\n  function eifelerRegelAppliesToNumber(number) {\n    number = parseInt(number, 10);\n    if (isNaN(number)) {\n      return false;\n    }\n    if (number < 0) {\n      // Negative Number --> always true\n      return true;\n    } else if (number < 10) {\n      // Only 1 digit\n      if (4 <= number && number <= 7) {\n        return true;\n      }\n      return false;\n    } else if (number < 100) {\n      // 2 digits\n      var lastDigit = number % 10,\n        firstDigit = number / 10;\n      if (lastDigit === 0) {\n        return eifelerRegelAppliesToNumber(firstDigit);\n      }\n      return eifelerRegelAppliesToNumber(lastDigit);\n    } else if (number < 10000) {\n      // 3 or 4 digits --> recursively check first digit\n      while (number >= 10) {\n        number = number / 10;\n      }\n      return eifelerRegelAppliesToNumber(number);\n    } else {\n      // Anything larger than 4 digits: recursively check first n-3 digits\n      number = number / 1000;\n      return eifelerRegelAppliesToNumber(number);\n    }\n  }\n  var lb = moment.defineLocale('lb', {\n    months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n    weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n    weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm [Auer]',\n      LTS: 'H:mm:ss [Auer]',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm [Auer]',\n      LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n    },\n    calendar: {\n      sameDay: '[Haut um] LT',\n      sameElse: 'L',\n      nextDay: '[Muer um] LT',\n      nextWeek: 'dddd [um] LT',\n      lastDay: '[Gëschter um] LT',\n      lastWeek: function () {\n        // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n        switch (this.day()) {\n          case 2:\n          case 4:\n            return '[Leschten] dddd [um] LT';\n          default:\n            return '[Leschte] dddd [um] LT';\n        }\n      }\n    },\n    relativeTime: {\n      future: processFutureTime,\n      past: processPastTime,\n      s: 'e puer Sekonnen',\n      ss: '%d Sekonnen',\n      m: processRelativeTime,\n      mm: '%d Minutten',\n      h: processRelativeTime,\n      hh: '%d Stonnen',\n      d: processRelativeTime,\n      dd: '%d Deeg',\n      M: processRelativeTime,\n      MM: '%d Méint',\n      y: processRelativeTime,\n      yy: '%d Joer'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 lb;\n});","//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var lo = moment.defineLocale('lo', {\n    months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n    monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n    weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n    weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n    weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.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    meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\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: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n      lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n      lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n      sameElse: 'L'\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    dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n    ordinal: function (number) {\n      return 'ທີ່' + number;\n    }\n  });\n  return lo;\n});","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var units = {\n    ss: 'sekundė_sekundžių_sekundes',\n    m: 'minutė_minutės_minutę',\n    mm: 'minutės_minučių_minutes',\n    h: 'valanda_valandos_valandą',\n    hh: 'valandos_valandų_valandas',\n    d: 'diena_dienos_dieną',\n    dd: 'dienos_dienų_dienas',\n    M: 'mėnuo_mėnesio_mėnesį',\n    MM: 'mėnesiai_mėnesių_mėnesius',\n    y: 'metai_metų_metus',\n    yy: 'metai_metų_metus'\n  };\n  function translateSeconds(number, withoutSuffix, key, isFuture) {\n    if (withoutSuffix) {\n      return 'kelios sekundės';\n    } else {\n      return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n    }\n  }\n  function translateSingular(number, withoutSuffix, key, isFuture) {\n    return withoutSuffix ? forms(key)[0] : isFuture ? forms(key)[1] : forms(key)[2];\n  }\n  function special(number) {\n    return number % 10 === 0 || number > 10 && number < 20;\n  }\n  function forms(key) {\n    return units[key].split('_');\n  }\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    if (number === 1) {\n      return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n    } else if (withoutSuffix) {\n      return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n    } else {\n      if (isFuture) {\n        return result + forms(key)[1];\n      } else {\n        return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n      }\n    }\n  }\n  var lt = moment.defineLocale('lt', {\n    months: {\n      format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n      standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n      isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n    },\n    monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n    weekdays: {\n      format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n      standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n      isFormat: /dddd HH:mm/\n    },\n    weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n    weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'YYYY [m.] MMMM D [d.]',\n      LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n      LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n      l: 'YYYY-MM-DD',\n      ll: 'YYYY [m.] MMMM D [d.]',\n      lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n      llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n    },\n    calendar: {\n      sameDay: '[Šiandien] LT',\n      nextDay: '[Rytoj] LT',\n      nextWeek: 'dddd LT',\n      lastDay: '[Vakar] LT',\n      lastWeek: '[Praėjusį] dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'po %s',\n      past: 'prieš %s',\n      s: translateSeconds,\n      ss: translate,\n      m: translateSingular,\n      mm: translate,\n      h: translateSingular,\n      hh: translate,\n      d: translateSingular,\n      dd: translate,\n      M: translateSingular,\n      MM: translate,\n      y: translateSingular,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n    ordinal: function (number) {\n      return number + '-oji';\n    },\n    week: {\n      dow: 1,\n      // 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 lt;\n});","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var units = {\n    ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n    m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n    mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n    h: 'stundas_stundām_stunda_stundas'.split('_'),\n    hh: 'stundas_stundām_stunda_stundas'.split('_'),\n    d: 'dienas_dienām_diena_dienas'.split('_'),\n    dd: 'dienas_dienām_diena_dienas'.split('_'),\n    M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n    MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n    y: 'gada_gadiem_gads_gadi'.split('_'),\n    yy: 'gada_gadiem_gads_gadi'.split('_')\n  };\n  /**\n   * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n   */\n  function format(forms, number, withoutSuffix) {\n    if (withoutSuffix) {\n      // E.g. \"21 minūte\", \"3 minūtes\".\n      return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n    } else {\n      // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n      // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n      return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n    }\n  }\n  function relativeTimeWithPlural(number, withoutSuffix, key) {\n    return number + ' ' + format(units[key], number, withoutSuffix);\n  }\n  function relativeTimeWithSingular(number, withoutSuffix, key) {\n    return format(units[key], number, withoutSuffix);\n  }\n  function relativeSeconds(number, withoutSuffix) {\n    return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n  }\n  var lv = moment.defineLocale('lv', {\n    months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n    weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n    weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n    weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY.',\n      LL: 'YYYY. [gada] D. MMMM',\n      LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n      LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n    },\n    calendar: {\n      sameDay: '[Šodien pulksten] LT',\n      nextDay: '[Rīt pulksten] LT',\n      nextWeek: 'dddd [pulksten] LT',\n      lastDay: '[Vakar pulksten] LT',\n      lastWeek: '[Pagājušā] dddd [pulksten] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'pēc %s',\n      past: 'pirms %s',\n      s: relativeSeconds,\n      ss: relativeTimeWithPlural,\n      m: relativeTimeWithSingular,\n      mm: relativeTimeWithPlural,\n      h: relativeTimeWithSingular,\n      hh: relativeTimeWithPlural,\n      d: relativeTimeWithSingular,\n      dd: relativeTimeWithPlural,\n      M: relativeTimeWithSingular,\n      MM: relativeTimeWithPlural,\n      y: relativeTimeWithSingular,\n      yy: relativeTimeWithPlural\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 lv;\n});","//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var translator = {\n    words: {\n      //Different grammatical cases\n      ss: ['sekund', 'sekunda', 'sekundi'],\n      m: ['jedan minut', 'jednog minuta'],\n      mm: ['minut', 'minuta', 'minuta'],\n      h: ['jedan sat', 'jednog sata'],\n      hh: ['sat', 'sata', 'sati'],\n      dd: ['dan', 'dana', 'dana'],\n      MM: ['mjesec', 'mjeseca', 'mjeseci'],\n      yy: ['godina', 'godine', 'godina']\n    },\n    correctGrammaticalCase: function (number, wordKey) {\n      return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];\n    },\n    translate: function (number, withoutSuffix, key) {\n      var wordKey = translator.words[key];\n      if (key.length === 1) {\n        return withoutSuffix ? wordKey[0] : wordKey[1];\n      } else {\n        return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n      }\n    }\n  };\n  var me = moment.defineLocale('me', {\n    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact: true,\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: '[danas u] LT',\n      nextDay: '[sjutra u] LT',\n      nextWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[u] [nedjelju] [u] LT';\n          case 3:\n            return '[u] [srijedu] [u] LT';\n          case 6:\n            return '[u] [subotu] [u] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[u] dddd [u] LT';\n        }\n      },\n      lastDay: '[juče u] LT',\n      lastWeek: function () {\n        var lastWeekDays = ['[prošle] [nedjelje] [u] LT', '[prošlog] [ponedjeljka] [u] LT', '[prošlog] [utorka] [u] LT', '[prošle] [srijede] [u] LT', '[prošlog] [četvrtka] [u] LT', '[prošlog] [petka] [u] LT', '[prošle] [subote] [u] LT'];\n        return lastWeekDays[this.day()];\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'prije %s',\n      s: 'nekoliko sekundi',\n      ss: translator.translate,\n      m: translator.translate,\n      mm: translator.translate,\n      h: translator.translate,\n      hh: translator.translate,\n      d: 'dan',\n      dd: translator.translate,\n      M: 'mjesec',\n      MM: translator.translate,\n      y: 'godinu',\n      yy: translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 me;\n});","//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var mi = moment.defineLocale('mi', {\n    months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n    monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n    monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n    weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n    weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n    weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.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 [i] HH:mm',\n      LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n    },\n    calendar: {\n      sameDay: '[i teie mahana, i] LT',\n      nextDay: '[apopo i] LT',\n      nextWeek: 'dddd [i] LT',\n      lastDay: '[inanahi i] LT',\n      lastWeek: 'dddd [whakamutunga i] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'i roto i %s',\n      past: '%s i mua',\n      s: 'te hēkona ruarua',\n      ss: '%d hēkona',\n      m: 'he meneti',\n      mm: '%d meneti',\n      h: 'te haora',\n      hh: '%d haora',\n      d: 'he ra',\n      dd: '%d ra',\n      M: 'he marama',\n      MM: '%d marama',\n      y: 'he tau',\n      yy: '%d tau'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // 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 mi;\n});","//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var mk = moment.defineLocale('mk', {\n    months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n    monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n    weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n    weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n    weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'D.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      nextWeek: '[Во] dddd [во] LT',\n      lastDay: '[Вчера во] LT',\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n          case 3:\n          case 6:\n            return '[Изминатата] dddd [во] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[Изминатиот] dddd [во] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'за %s',\n      past: 'пред %s',\n      s: 'неколку секунди',\n      ss: '%d секунди',\n      m: 'една минута',\n      mm: '%d минути',\n      h: 'еден час',\n      hh: '%d часа',\n      d: 'еден ден',\n      dd: '%d дена',\n      M: 'еден месец',\n      MM: '%d месеци',\n      y: 'една година',\n      yy: '%d години'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n    ordinal: function (number) {\n      var lastDigit = number % 10,\n        last2Digits = number % 100;\n      if (number === 0) {\n        return number + '-ев';\n      } else if (last2Digits === 0) {\n        return number + '-ен';\n      } else if (last2Digits > 10 && last2Digits < 20) {\n        return number + '-ти';\n      } else if (lastDigit === 1) {\n        return number + '-ви';\n      } else if (lastDigit === 2) {\n        return number + '-ри';\n      } else if (lastDigit === 7 || lastDigit === 8) {\n        return number + '-ми';\n      } else {\n        return number + '-ти';\n      }\n    },\n    week: {\n      dow: 1,\n      // 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 mk;\n});","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ml = moment.defineLocale('ml', {\n    months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n    monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n    weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n    weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm -നു',\n      LTS: 'A h:mm:ss -നു',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm -നു',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm -നു'\n    },\n    calendar: {\n      sameDay: '[ഇന്ന്] LT',\n      nextDay: '[നാളെ] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[ഇന്നലെ] LT',\n      lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s കഴിഞ്ഞ്',\n      past: '%s മുൻപ്',\n      s: 'അൽപ നിമിഷങ്ങൾ',\n      ss: '%d സെക്കൻഡ്',\n      m: 'ഒരു മിനിറ്റ്',\n      mm: '%d മിനിറ്റ്',\n      h: 'ഒരു മണിക്കൂർ',\n      hh: '%d മണിക്കൂർ',\n      d: 'ഒരു ദിവസം',\n      dd: '%d ദിവസം',\n      M: 'ഒരു മാസം',\n      MM: '%d മാസം',\n      y: 'ഒരു വർഷം',\n      yy: '%d വർഷം'\n    },\n    meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'രാത്രി' && hour >= 4 || meridiem === 'ഉച്ച കഴിഞ്ഞ്' || meridiem === 'വൈകുന്നേരം') {\n        return hour + 12;\n      } else {\n        return hour;\n      }\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 if (hour < 20) {\n        return 'വൈകുന്നേരം';\n      } else {\n        return 'രാത്രി';\n      }\n    }\n  });\n  return ml;\n});","//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function translate(number, withoutSuffix, key, isFuture) {\n    switch (key) {\n      case 's':\n        return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n      case 'ss':\n        return number + (withoutSuffix ? ' секунд' : ' секундын');\n      case 'm':\n      case 'mm':\n        return number + (withoutSuffix ? ' минут' : ' минутын');\n      case 'h':\n      case 'hh':\n        return number + (withoutSuffix ? ' цаг' : ' цагийн');\n      case 'd':\n      case 'dd':\n        return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n      case 'M':\n      case 'MM':\n        return number + (withoutSuffix ? ' сар' : ' сарын');\n      case 'y':\n      case 'yy':\n        return number + (withoutSuffix ? ' жил' : ' жилийн');\n      default:\n        return number;\n    }\n  }\n  var mn = moment.defineLocale('mn', {\n    months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n    monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n    weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n    weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'YYYY оны MMMMын D',\n      LLL: 'YYYY оны MMMMын D HH:mm',\n      LLLL: 'dddd, YYYY оны MMMMын D 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: '[Ирэх] dddd LT',\n      lastDay: '[Өчигдөр] LT',\n      lastWeek: '[Өнгөрсөн] dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s дараа',\n      past: '%s өмнө',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n    ordinal: function (number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + ' өдөр';\n        default:\n          return number;\n      }\n    }\n  });\n  return mn;\n});","//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '१',\n      2: '२',\n      3: '३',\n      4: '४',\n      5: '५',\n      6: '६',\n      7: '७',\n      8: '८',\n      9: '९',\n      0: '०'\n    },\n    numberMap = {\n      '१': '1',\n      '२': '2',\n      '३': '3',\n      '४': '4',\n      '५': '5',\n      '६': '6',\n      '७': '7',\n      '८': '8',\n      '९': '9',\n      '०': '0'\n    };\n  function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n    var output = '';\n    if (withoutSuffix) {\n      switch (string) {\n        case 's':\n          output = 'काही सेकंद';\n          break;\n        case 'ss':\n          output = '%d सेकंद';\n          break;\n        case 'm':\n          output = 'एक मिनिट';\n          break;\n        case 'mm':\n          output = '%d मिनिटे';\n          break;\n        case 'h':\n          output = 'एक तास';\n          break;\n        case 'hh':\n          output = '%d तास';\n          break;\n        case 'd':\n          output = 'एक दिवस';\n          break;\n        case 'dd':\n          output = '%d दिवस';\n          break;\n        case 'M':\n          output = 'एक महिना';\n          break;\n        case 'MM':\n          output = '%d महिने';\n          break;\n        case 'y':\n          output = 'एक वर्ष';\n          break;\n        case 'yy':\n          output = '%d वर्षे';\n          break;\n      }\n    } else {\n      switch (string) {\n        case 's':\n          output = 'काही सेकंदां';\n          break;\n        case 'ss':\n          output = '%d सेकंदां';\n          break;\n        case 'm':\n          output = 'एका मिनिटा';\n          break;\n        case 'mm':\n          output = '%d मिनिटां';\n          break;\n        case 'h':\n          output = 'एका तासा';\n          break;\n        case 'hh':\n          output = '%d तासां';\n          break;\n        case 'd':\n          output = 'एका दिवसा';\n          break;\n        case 'dd':\n          output = '%d दिवसां';\n          break;\n        case 'M':\n          output = 'एका महिन्या';\n          break;\n        case 'MM':\n          output = '%d महिन्यां';\n          break;\n        case 'y':\n          output = 'एका वर्षा';\n          break;\n        case 'yy':\n          output = '%d वर्षां';\n          break;\n      }\n    }\n    return output.replace(/%d/i, number);\n  }\n  var mr = moment.defineLocale('mr', {\n    months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n    monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n    weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n    weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm वाजता',\n      LTS: 'A h:mm:ss वाजता',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm वाजता',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता'\n    },\n    calendar: {\n      sameDay: '[आज] LT',\n      nextDay: '[उद्या] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[काल] LT',\n      lastWeek: '[मागील] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%sमध्ये',\n      past: '%sपूर्वी',\n      s: relativeTimeMr,\n      ss: relativeTimeMr,\n      m: relativeTimeMr,\n      mm: relativeTimeMr,\n      h: relativeTimeMr,\n      hh: relativeTimeMr,\n      d: relativeTimeMr,\n      dd: relativeTimeMr,\n      M: relativeTimeMr,\n      MM: relativeTimeMr,\n      y: relativeTimeMr,\n      yy: relativeTimeMr\n    },\n    preparse: function (string) {\n      return string.replace(/[१२३४५६७८९०]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n        return hour;\n      } else if (meridiem === 'दुपारी' || meridiem === 'सायंकाळी' || meridiem === 'रात्री') {\n        return hour >= 12 ? hour : hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour >= 0 && hour < 6) {\n        return 'पहाटे';\n      } else if (hour < 12) {\n        return 'सकाळी';\n      } else if (hour < 17) {\n        return 'दुपारी';\n      } else if (hour < 20) {\n        return 'सायंकाळी';\n      } else {\n        return 'रात्री';\n      }\n    },\n    week: {\n      dow: 0,\n      // 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\n  return mr;\n});","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ms = moment.defineLocale('ms', {\n    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.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 [pukul] HH.mm',\n      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|tengahari|petang|malam/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'pagi') {\n        return hour;\n      } else if (meridiem === 'tengahari') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'petang' || meridiem === 'malam') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'pagi';\n      } else if (hours < 15) {\n        return 'tengahari';\n      } else if (hours < 19) {\n        return 'petang';\n      } else {\n        return 'malam';\n      }\n    },\n    calendar: {\n      sameDay: '[Hari ini pukul] LT',\n      nextDay: '[Esok pukul] LT',\n      nextWeek: 'dddd [pukul] LT',\n      lastDay: '[Kelmarin pukul] LT',\n      lastWeek: 'dddd [lepas pukul] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dalam %s',\n      past: '%s yang lepas',\n      s: 'beberapa saat',\n      ss: '%d saat',\n      m: 'seminit',\n      mm: '%d minit',\n      h: 'sejam',\n      hh: '%d jam',\n      d: 'sehari',\n      dd: '%d hari',\n      M: 'sebulan',\n      MM: '%d bulan',\n      y: 'setahun',\n      yy: '%d tahun'\n    },\n    week: {\n      dow: 1,\n      // 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 ms;\n});","//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var msMy = moment.defineLocale('ms-my', {\n    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.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 [pukul] HH.mm',\n      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|tengahari|petang|malam/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'pagi') {\n        return hour;\n      } else if (meridiem === 'tengahari') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'petang' || meridiem === 'malam') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'pagi';\n      } else if (hours < 15) {\n        return 'tengahari';\n      } else if (hours < 19) {\n        return 'petang';\n      } else {\n        return 'malam';\n      }\n    },\n    calendar: {\n      sameDay: '[Hari ini pukul] LT',\n      nextDay: '[Esok pukul] LT',\n      nextWeek: 'dddd [pukul] LT',\n      lastDay: '[Kelmarin pukul] LT',\n      lastWeek: 'dddd [lepas pukul] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dalam %s',\n      past: '%s yang lepas',\n      s: 'beberapa saat',\n      ss: '%d saat',\n      m: 'seminit',\n      mm: '%d minit',\n      h: 'sejam',\n      hh: '%d jam',\n      d: 'sehari',\n      dd: '%d hari',\n      M: 'sebulan',\n      MM: '%d bulan',\n      y: 'setahun',\n      yy: '%d tahun'\n    },\n    week: {\n      dow: 1,\n      // 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 msMy;\n});","//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var mt = moment.defineLocale('mt', {\n    months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n    monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n    weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n    weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n    weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.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: '[Illum fil-]LT',\n      nextDay: '[Għada fil-]LT',\n      nextWeek: 'dddd [fil-]LT',\n      lastDay: '[Il-bieraħ fil-]LT',\n      lastWeek: 'dddd [li għadda] [fil-]LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'f’ %s',\n      past: '%s ilu',\n      s: 'ftit sekondi',\n      ss: '%d sekondi',\n      m: 'minuta',\n      mm: '%d minuti',\n      h: 'siegħa',\n      hh: '%d siegħat',\n      d: 'ġurnata',\n      dd: '%d ġranet',\n      M: 'xahar',\n      MM: '%d xhur',\n      y: 'sena',\n      yy: '%d sni'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // 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 mt;\n});","//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '၁',\n      2: '၂',\n      3: '၃',\n      4: '၄',\n      5: '၅',\n      6: '၆',\n      7: '၇',\n      8: '၈',\n      9: '၉',\n      0: '၀'\n    },\n    numberMap = {\n      '၁': '1',\n      '၂': '2',\n      '၃': '3',\n      '၄': '4',\n      '၅': '5',\n      '၆': '6',\n      '၇': '7',\n      '၈': '8',\n      '၉': '9',\n      '၀': '0'\n    };\n  var my = moment.defineLocale('my', {\n    months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n    monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n    weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\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: '[ယနေ.] LT [မှာ]',\n      nextDay: '[မနက်ဖြန်] LT [မှာ]',\n      nextWeek: 'dddd LT [မှာ]',\n      lastDay: '[မနေ.က] LT [မှာ]',\n      lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'လာမည့် %s မှာ',\n      past: 'လွန်ခဲ့သော %s က',\n      s: 'စက္ကန်.အနည်းငယ်',\n      ss: '%d စက္ကန့်',\n      m: 'တစ်မိနစ်',\n      mm: '%d မိနစ်',\n      h: 'တစ်နာရီ',\n      hh: '%d နာရီ',\n      d: 'တစ်ရက်',\n      dd: '%d ရက်',\n      M: 'တစ်လ',\n      MM: '%d လ',\n      y: 'တစ်နှစ်',\n      yy: '%d နှစ်'\n    },\n    preparse: function (string) {\n      return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    week: {\n      dow: 1,\n      // 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 my;\n});","//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var nb = moment.defineLocale('nb', {\n    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n    weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n    weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.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 [kl.] HH:mm',\n      LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar: {\n      sameDay: '[i dag kl.] LT',\n      nextDay: '[i morgen kl.] LT',\n      nextWeek: 'dddd [kl.] LT',\n      lastDay: '[i går kl.] LT',\n      lastWeek: '[forrige] dddd [kl.] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'om %s',\n      past: '%s siden',\n      s: 'noen sekunder',\n      ss: '%d sekunder',\n      m: 'ett minutt',\n      mm: '%d minutter',\n      h: 'en time',\n      hh: '%d timer',\n      d: 'en dag',\n      dd: '%d dager',\n      w: 'en uke',\n      ww: '%d uker',\n      M: 'en måned',\n      MM: '%d måneder',\n      y: 'ett år',\n      yy: '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 nb;\n});","//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '१',\n      2: '२',\n      3: '३',\n      4: '४',\n      5: '५',\n      6: '६',\n      7: '७',\n      8: '८',\n      9: '९',\n      0: '०'\n    },\n    numberMap = {\n      '१': '1',\n      '२': '2',\n      '३': '3',\n      '४': '4',\n      '५': '5',\n      '६': '6',\n      '७': '7',\n      '८': '8',\n      '९': '9',\n      '०': '0'\n    };\n  var ne = moment.defineLocale('ne', {\n    months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n    monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n    weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n    weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'Aको h:mm बजे',\n      LTS: 'Aको h:mm:ss बजे',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, Aको h:mm बजे',\n      LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे'\n    },\n    preparse: function (string) {\n      return string.replace(/[१२३४५६७८९०]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'राति') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'बिहान') {\n        return hour;\n      } else if (meridiem === 'दिउँसो') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'साँझ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 3) {\n        return 'राति';\n      } else if (hour < 12) {\n        return 'बिहान';\n      } else if (hour < 16) {\n        return 'दिउँसो';\n      } else if (hour < 20) {\n        return 'साँझ';\n      } else {\n        return 'राति';\n      }\n    },\n    calendar: {\n      sameDay: '[आज] LT',\n      nextDay: '[भोलि] LT',\n      nextWeek: '[आउँदो] dddd[,] LT',\n      lastDay: '[हिजो] LT',\n      lastWeek: '[गएको] dddd[,] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%sमा',\n      past: '%s अगाडि',\n      s: 'केही क्षण',\n      ss: '%d सेकेण्ड',\n      m: 'एक मिनेट',\n      mm: '%d मिनेट',\n      h: 'एक घण्टा',\n      hh: '%d घण्टा',\n      d: 'एक दिन',\n      dd: '%d दिन',\n      M: 'एक महिना',\n      MM: '%d महिना',\n      y: 'एक बर्ष',\n      yy: '%d बर्ष'\n    },\n    week: {\n      dow: 0,\n      // 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\n  return ne;\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;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n    monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i],\n    monthsRegex = /^(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  var nl = moment.defineLocale('nl', {\n    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\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    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays: '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 number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');\n    },\n    week: {\n      dow: 1,\n      // 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});","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n    monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i],\n    monthsRegex = /^(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  var nlBe = moment.defineLocale('nl-be', {\n    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\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    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays: '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      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 number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');\n    },\n    week: {\n      dow: 1,\n      // 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 nlBe;\n});","//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var nn = moment.defineLocale('nn', {\n    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n    weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n    weekdaysMin: 'su_må_ty_on_to_fr_la'.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 [kl.] H:mm',\n      LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar: {\n      sameDay: '[I dag klokka] LT',\n      nextDay: '[I morgon klokka] LT',\n      nextWeek: 'dddd [klokka] LT',\n      lastDay: '[I går klokka] LT',\n      lastWeek: '[Føregåande] dddd [klokka] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'om %s',\n      past: '%s sidan',\n      s: 'nokre sekund',\n      ss: '%d sekund',\n      m: 'eit minutt',\n      mm: '%d minutt',\n      h: 'ein time',\n      hh: '%d timar',\n      d: 'ein dag',\n      dd: '%d dagar',\n      w: 'ei veke',\n      ww: '%d veker',\n      M: 'ein månad',\n      MM: '%d månader',\n      y: 'eit år',\n      yy: '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 nn;\n});","//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ocLnc = moment.defineLocale('oc-lnc', {\n    months: {\n      standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split('_'),\n      format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split('_'),\n      isFormat: /D[oD]?(\\s)+MMMM/\n    },\n    monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split('_'),\n    weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n    weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM [de] YYYY',\n      ll: 'D MMM YYYY',\n      LLL: 'D MMMM [de] YYYY [a] H:mm',\n      lll: 'D MMM YYYY, H:mm',\n      LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n      llll: 'ddd D MMM YYYY, H:mm'\n    },\n    calendar: {\n      sameDay: '[uèi a] LT',\n      nextDay: '[deman a] LT',\n      nextWeek: 'dddd [a] LT',\n      lastDay: '[ièr a] LT',\n      lastWeek: 'dddd [passat a] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: \"d'aquí %s\",\n      past: 'fa %s',\n      s: 'unas segondas',\n      ss: '%d segondas',\n      m: 'una minuta',\n      mm: '%d minutas',\n      h: 'una ora',\n      hh: '%d oras',\n      d: 'un jorn',\n      dd: '%d jorns',\n      M: 'un mes',\n      MM: '%d meses',\n      y: 'un an',\n      yy: '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n    ordinal: function (number, period) {\n      var output = number === 1 ? 'r' : number === 2 ? 'n' : number === 3 ? 'r' : number === 4 ? 't' : 'è';\n      if (period === 'w' || period === 'W') {\n        output = 'a';\n      }\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4\n    }\n  });\n  return ocLnc;\n});","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '੧',\n      2: '੨',\n      3: '੩',\n      4: '੪',\n      5: '੫',\n      6: '੬',\n      7: '੭',\n      8: '੮',\n      9: '੯',\n      0: '੦'\n    },\n    numberMap = {\n      '੧': '1',\n      '੨': '2',\n      '੩': '3',\n      '੪': '4',\n      '੫': '5',\n      '੬': '6',\n      '੭': '7',\n      '੮': '8',\n      '੯': '9',\n      '੦': '0'\n    };\n  var paIn = moment.defineLocale('pa-in', {\n    // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n    months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n    monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n    weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n    weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n    weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm ਵਜੇ',\n      LTS: 'A h:mm:ss ਵਜੇ',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n    },\n    calendar: {\n      sameDay: '[ਅਜ] LT',\n      nextDay: '[ਕਲ] LT',\n      nextWeek: '[ਅਗਲਾ] dddd, LT',\n      lastDay: '[ਕਲ] LT',\n      lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ਵਿੱਚ',\n      past: '%s ਪਿਛਲੇ',\n      s: 'ਕੁਝ ਸਕਿੰਟ',\n      ss: '%d ਸਕਿੰਟ',\n      m: 'ਇਕ ਮਿੰਟ',\n      mm: '%d ਮਿੰਟ',\n      h: 'ਇੱਕ ਘੰਟਾ',\n      hh: '%d ਘੰਟੇ',\n      d: 'ਇੱਕ ਦਿਨ',\n      dd: '%d ਦਿਨ',\n      M: 'ਇੱਕ ਮਹੀਨਾ',\n      MM: '%d ਮਹੀਨੇ',\n      y: 'ਇੱਕ ਸਾਲ',\n      yy: '%d ਸਾਲ'\n    },\n    preparse: function (string) {\n      return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n    meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'ਰਾਤ') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'ਸਵੇਰ') {\n        return hour;\n      } else if (meridiem === 'ਦੁਪਹਿਰ') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'ਸ਼ਾਮ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'ਰਾਤ';\n      } else if (hour < 10) {\n        return 'ਸਵੇਰ';\n      } else if (hour < 17) {\n        return 'ਦੁਪਹਿਰ';\n      } else if (hour < 20) {\n        return 'ਸ਼ਾਮ';\n      } else {\n        return 'ਰਾਤ';\n      }\n    },\n    week: {\n      dow: 0,\n      // 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\n  return paIn;\n});","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n    monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'),\n    monthsParse = [/^sty/i, /^lut/i, /^mar/i, /^kwi/i, /^maj/i, /^cze/i, /^lip/i, /^sie/i, /^wrz/i, /^paź/i, /^lis/i, /^gru/i];\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  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: '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          case 2:\n            return '[We wtorek o] LT';\n          case 3:\n            return '[W środę o] LT';\n          case 6:\n            return '[W sobotę o] LT';\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,\n      // 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});","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var pt = moment.defineLocale('pt', {\n    months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n    monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n    weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n    weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n    weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY HH:mm',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Hoje às] LT',\n      nextDay: '[Amanhã às] LT',\n      nextWeek: 'dddd [às] LT',\n      lastDay: '[Ontem às] LT',\n      lastWeek: function () {\n        return this.day() === 0 || this.day() === 6 ? '[Último] dddd [às] LT' // Saturday + Sunday\n        : '[Última] dddd [às] LT'; // Monday - Friday\n      },\n\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'em %s',\n      past: 'há %s',\n      s: 'segundos',\n      ss: '%d segundos',\n      m: 'um minuto',\n      mm: '%d minutos',\n      h: 'uma hora',\n      hh: '%d horas',\n      d: 'um dia',\n      dd: '%d dias',\n      w: 'uma semana',\n      ww: '%d semanas',\n      M: 'um mês',\n      MM: '%d meses',\n      y: 'um ano',\n      yy: '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // 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 pt;\n});","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ptBr = moment.defineLocale('pt-br', {\n    months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n    monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n    weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split('_'),\n    weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n    weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n    },\n    calendar: {\n      sameDay: '[Hoje às] LT',\n      nextDay: '[Amanhã às] LT',\n      nextWeek: 'dddd [às] LT',\n      lastDay: '[Ontem às] LT',\n      lastWeek: function () {\n        return this.day() === 0 || this.day() === 6 ? '[Último] dddd [às] LT' // Saturday + Sunday\n        : '[Última] dddd [às] LT'; // Monday - Friday\n      },\n\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'em %s',\n      past: 'há %s',\n      s: 'poucos segundos',\n      ss: '%d segundos',\n      m: 'um minuto',\n      mm: '%d minutos',\n      h: 'uma hora',\n      hh: '%d horas',\n      d: 'um dia',\n      dd: '%d dias',\n      M: 'um mês',\n      MM: '%d meses',\n      y: 'um ano',\n      yy: '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    invalidDate: 'Data inválida'\n  });\n  return ptBr;\n});","//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n        ss: 'secunde',\n        mm: 'minute',\n        hh: 'ore',\n        dd: 'zile',\n        ww: 'săptămâni',\n        MM: 'luni',\n        yy: 'ani'\n      },\n      separator = ' ';\n    if (number % 100 >= 20 || number >= 100 && number % 100 === 0) {\n      separator = ' de ';\n    }\n    return number + separator + format[key];\n  }\n  var ro = moment.defineLocale('ro', {\n    months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n    monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n    weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n    weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\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: '[azi la] LT',\n      nextDay: '[mâine la] LT',\n      nextWeek: 'dddd [la] LT',\n      lastDay: '[ieri la] LT',\n      lastWeek: '[fosta] dddd [la] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'peste %s',\n      past: '%s în urmă',\n      s: 'câteva secunde',\n      ss: relativeTimeWithPlural,\n      m: 'un minut',\n      mm: relativeTimeWithPlural,\n      h: 'o oră',\n      hh: relativeTimeWithPlural,\n      d: 'o zi',\n      dd: relativeTimeWithPlural,\n      w: 'o săptămână',\n      ww: relativeTimeWithPlural,\n      M: 'o lună',\n      MM: relativeTimeWithPlural,\n      y: 'un an',\n      yy: relativeTimeWithPlural\n    },\n    week: {\n      dow: 1,\n      // 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 ro;\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;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : 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 = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\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      standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n    },\n    monthsShort: {\n      // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n      format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n      standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n    },\n    weekdays: {\n      standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n      format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n      isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/\n    },\n    weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n    weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n    monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n    // копия предыдущего\n    monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n    // полные названия с падежами\n    monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n    // Выражение, которое соответствует только сокращённым формам\n    monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/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,\n      // 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});","//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var months = ['جنوري', 'فيبروري', 'مارچ', 'اپريل', 'مئي', 'جون', 'جولاءِ', 'آگسٽ', 'سيپٽمبر', 'آڪٽوبر', 'نومبر', 'ڊسمبر'],\n    days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n  var sd = moment.defineLocale('sd', {\n    months: months,\n    monthsShort: months,\n    weekdays: days,\n    weekdaysShort: days,\n    weekdaysMin: days,\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    meridiemParse: /صبح|شام/,\n    isPM: function (input) {\n      return 'شام' === input;\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 12) {\n        return 'صبح';\n      }\n      return 'شام';\n    },\n    calendar: {\n      sameDay: '[اڄ] LT',\n      nextDay: '[سڀاڻي] LT',\n      nextWeek: 'dddd [اڳين هفتي تي] LT',\n      lastDay: '[ڪالهه] LT',\n      lastWeek: '[گزريل هفتي] dddd [تي] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s پوء',\n      past: '%s اڳ',\n      s: 'چند سيڪنڊ',\n      ss: '%d سيڪنڊ',\n      m: 'هڪ منٽ',\n      mm: '%d منٽ',\n      h: 'هڪ ڪلاڪ',\n      hh: '%d ڪلاڪ',\n      d: 'هڪ ڏينهن',\n      dd: '%d ڏينهن',\n      M: 'هڪ مهينو',\n      MM: '%d مهينا',\n      y: 'هڪ سال',\n      yy: '%d سال'\n    },\n    preparse: function (string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n      return string.replace(/,/g, '،');\n    },\n    week: {\n      dow: 1,\n      // 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 sd;\n});","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var se = moment.defineLocale('se', {\n    months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n    monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n    weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n    weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n    weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'MMMM D. [b.] YYYY',\n      LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n      LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n    },\n    calendar: {\n      sameDay: '[otne ti] LT',\n      nextDay: '[ihttin ti] LT',\n      nextWeek: 'dddd [ti] LT',\n      lastDay: '[ikte ti] LT',\n      lastWeek: '[ovddit] dddd [ti] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s geažes',\n      past: 'maŋit %s',\n      s: 'moadde sekunddat',\n      ss: '%d sekunddat',\n      m: 'okta minuhta',\n      mm: '%d minuhtat',\n      h: 'okta diimmu',\n      hh: '%d diimmut',\n      d: 'okta beaivi',\n      dd: '%d beaivvit',\n      M: 'okta mánnu',\n      MM: '%d mánut',\n      y: 'okta jahki',\n      yy: '%d jagit'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 se;\n});","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n\n  /*jshint -W100*/\n  var si = moment.defineLocale('si', {\n    months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n    monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n    weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n    weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n    weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'a h:mm',\n      LTS: 'a h:mm:ss',\n      L: 'YYYY/MM/DD',\n      LL: 'YYYY MMMM D',\n      LLL: 'YYYY MMMM D, a h:mm',\n      LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n    },\n    calendar: {\n      sameDay: '[අද] LT[ට]',\n      nextDay: '[හෙට] LT[ට]',\n      nextWeek: 'dddd LT[ට]',\n      lastDay: '[ඊයේ] LT[ට]',\n      lastWeek: '[පසුගිය] dddd LT[ට]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%sකින්',\n      past: '%sකට පෙර',\n      s: 'තත්පර කිහිපය',\n      ss: 'තත්පර %d',\n      m: 'මිනිත්තුව',\n      mm: 'මිනිත්තු %d',\n      h: 'පැය',\n      hh: 'පැය %d',\n      d: 'දිනය',\n      dd: 'දින %d',\n      M: 'මාසය',\n      MM: 'මාස %d',\n      y: 'වසර',\n      yy: 'වසර %d'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n    ordinal: function (number) {\n      return number + ' වැනි';\n    },\n    meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n    isPM: function (input) {\n      return input === 'ප.ව.' || input === 'පස් වරු';\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours > 11) {\n        return isLower ? 'ප.ව.' : 'පස් වරු';\n      } else {\n        return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n      }\n    }\n  });\n  return si;\n});","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n    monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n  function plural(n) {\n    return n > 1 && n < 5;\n  }\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n      case 's':\n        // a few seconds / in a few seconds / a few seconds ago\n        return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n      case 'ss':\n        // 9 seconds / in 9 seconds / 9 seconds ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'sekundy' : 'sekúnd');\n        } else {\n          return result + 'sekundami';\n        }\n      case 'm':\n        // a minute / in a minute / a minute ago\n        return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n      case 'mm':\n        // 9 minutes / in 9 minutes / 9 minutes ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'minúty' : 'minút');\n        } else {\n          return result + 'minútami';\n        }\n      case 'h':\n        // an hour / in an hour / an hour ago\n        return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n      case 'hh':\n        // 9 hours / in 9 hours / 9 hours ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'hodiny' : 'hodín');\n        } else {\n          return result + 'hodinami';\n        }\n      case 'd':\n        // a day / in a day / a day ago\n        return withoutSuffix || isFuture ? 'deň' : 'dňom';\n      case 'dd':\n        // 9 days / in 9 days / 9 days ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'dni' : 'dní');\n        } else {\n          return result + 'dňami';\n        }\n      case 'M':\n        // a month / in a month / a month ago\n        return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n      case 'MM':\n        // 9 months / in 9 months / 9 months ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'mesiace' : 'mesiacov');\n        } else {\n          return result + 'mesiacmi';\n        }\n      case 'y':\n        // a year / in a year / a year ago\n        return withoutSuffix || isFuture ? 'rok' : 'rokom';\n      case 'yy':\n        // 9 years / in 9 years / 9 years ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'roky' : 'rokov');\n        } else {\n          return result + 'rokmi';\n        }\n    }\n  }\n  var sk = moment.defineLocale('sk', {\n    months: months,\n    monthsShort: monthsShort,\n    weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n    weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n    weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\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: '[dnes o] LT',\n      nextDay: '[zajtra o] LT',\n      nextWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[v nedeľu o] LT';\n          case 1:\n          case 2:\n            return '[v] dddd [o] LT';\n          case 3:\n            return '[v stredu o] LT';\n          case 4:\n            return '[vo štvrtok o] LT';\n          case 5:\n            return '[v piatok o] LT';\n          case 6:\n            return '[v sobotu o] LT';\n        }\n      },\n      lastDay: '[včera o] LT',\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[minulú nedeľu o] LT';\n          case 1:\n          case 2:\n            return '[minulý] dddd [o] LT';\n          case 3:\n            return '[minulú stredu o] LT';\n          case 4:\n          case 5:\n            return '[minulý] dddd [o] LT';\n          case 6:\n            return '[minulú sobotu o] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'pred %s',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 sk;\n});","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n      case 's':\n        return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n      case 'ss':\n        if (number === 1) {\n          result += withoutSuffix ? 'sekundo' : 'sekundi';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n        } else {\n          result += 'sekund';\n        }\n        return result;\n      case 'm':\n        return withoutSuffix ? 'ena minuta' : 'eno minuto';\n      case 'mm':\n        if (number === 1) {\n          result += withoutSuffix ? 'minuta' : 'minuto';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n        } else {\n          result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n        }\n        return result;\n      case 'h':\n        return withoutSuffix ? 'ena ura' : 'eno uro';\n      case 'hh':\n        if (number === 1) {\n          result += withoutSuffix ? 'ura' : 'uro';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'uri' : 'urama';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'ure' : 'urami';\n        } else {\n          result += withoutSuffix || isFuture ? 'ur' : 'urami';\n        }\n        return result;\n      case 'd':\n        return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n      case 'dd':\n        if (number === 1) {\n          result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n        } else {\n          result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n        }\n        return result;\n      case 'M':\n        return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n      case 'MM':\n        if (number === 1) {\n          result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n        } else {\n          result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n        }\n        return result;\n      case 'y':\n        return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n      case 'yy':\n        if (number === 1) {\n          result += withoutSuffix || isFuture ? 'leto' : 'letom';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'leta' : 'leti';\n        } else {\n          result += withoutSuffix || isFuture ? 'let' : 'leti';\n        }\n        return result;\n    }\n  }\n  var sl = moment.defineLocale('sl', {\n    months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n    weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n    weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n    weekdaysParseExact: true,\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: '[danes ob] LT',\n      nextDay: '[jutri ob] LT',\n      nextWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[v] [nedeljo] [ob] LT';\n          case 3:\n            return '[v] [sredo] [ob] LT';\n          case 6:\n            return '[v] [soboto] [ob] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[v] dddd [ob] LT';\n        }\n      },\n      lastDay: '[včeraj ob] LT',\n      lastWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[prejšnjo] [nedeljo] [ob] LT';\n          case 3:\n            return '[prejšnjo] [sredo] [ob] LT';\n          case 6:\n            return '[prejšnjo] [soboto] [ob] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[prejšnji] dddd [ob] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'čez %s',\n      past: 'pred %s',\n      s: processRelativeTime,\n      ss: processRelativeTime,\n      m: processRelativeTime,\n      mm: processRelativeTime,\n      h: processRelativeTime,\n      hh: processRelativeTime,\n      d: processRelativeTime,\n      dd: processRelativeTime,\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,\n      // 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 sl;\n});","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var sq = moment.defineLocale('sq', {\n    months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n    monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n    weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n    weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n    weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n    weekdaysParseExact: true,\n    meridiemParse: /PD|MD/,\n    isPM: function (input) {\n      return input.charAt(0) === 'M';\n    },\n    meridiem: function (hours, minutes, isLower) {\n      return hours < 12 ? 'PD' : 'MD';\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: '[Sot në] LT',\n      nextDay: '[Nesër në] LT',\n      nextWeek: 'dddd [në] LT',\n      lastDay: '[Dje në] LT',\n      lastWeek: 'dddd [e kaluar në] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'në %s',\n      past: '%s më parë',\n      s: 'disa sekonda',\n      ss: '%d sekonda',\n      m: 'një minutë',\n      mm: '%d minuta',\n      h: 'një orë',\n      hh: '%d orë',\n      d: 'një ditë',\n      dd: '%d ditë',\n      M: 'një muaj',\n      MM: '%d muaj',\n      y: 'një vit',\n      yy: '%d vite'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 sq;\n});","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var translator = {\n    words: {\n      //Different grammatical cases\n      ss: ['sekunda', 'sekunde', 'sekundi'],\n      m: ['jedan minut', 'jedne minute'],\n      mm: ['minut', 'minute', 'minuta'],\n      h: ['jedan sat', 'jednog sata'],\n      hh: ['sat', 'sata', 'sati'],\n      dd: ['dan', 'dana', 'dana'],\n      MM: ['mesec', 'meseca', 'meseci'],\n      yy: ['godina', 'godine', 'godina']\n    },\n    correctGrammaticalCase: function (number, wordKey) {\n      return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];\n    },\n    translate: function (number, withoutSuffix, key) {\n      var wordKey = translator.words[key];\n      if (key.length === 1) {\n        return withoutSuffix ? wordKey[0] : wordKey[1];\n      } else {\n        return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n      }\n    }\n  };\n  var sr = moment.defineLocale('sr', {\n    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'D. M. 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: '[danas u] LT',\n      nextDay: '[sutra u] LT',\n      nextWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[u] [nedelju] [u] LT';\n          case 3:\n            return '[u] [sredu] [u] LT';\n          case 6:\n            return '[u] [subotu] [u] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[u] dddd [u] LT';\n        }\n      },\n      lastDay: '[juče u] LT',\n      lastWeek: function () {\n        var lastWeekDays = ['[prošle] [nedelje] [u] LT', '[prošlog] [ponedeljka] [u] LT', '[prošlog] [utorka] [u] LT', '[prošle] [srede] [u] LT', '[prošlog] [četvrtka] [u] LT', '[prošlog] [petka] [u] LT', '[prošle] [subote] [u] LT'];\n        return lastWeekDays[this.day()];\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'pre %s',\n      s: 'nekoliko sekundi',\n      ss: translator.translate,\n      m: translator.translate,\n      mm: translator.translate,\n      h: translator.translate,\n      hh: translator.translate,\n      d: 'dan',\n      dd: translator.translate,\n      M: 'mesec',\n      MM: translator.translate,\n      y: 'godinu',\n      yy: translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 sr;\n});","//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var translator = {\n    words: {\n      //Different grammatical cases\n      ss: ['секунда', 'секунде', 'секунди'],\n      m: ['један минут', 'једне минуте'],\n      mm: ['минут', 'минуте', 'минута'],\n      h: ['један сат', 'једног сата'],\n      hh: ['сат', 'сата', 'сати'],\n      dd: ['дан', 'дана', 'дана'],\n      MM: ['месец', 'месеца', 'месеци'],\n      yy: ['година', 'године', 'година']\n    },\n    correctGrammaticalCase: function (number, wordKey) {\n      return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];\n    },\n    translate: function (number, withoutSuffix, key) {\n      var wordKey = translator.words[key];\n      if (key.length === 1) {\n        return withoutSuffix ? wordKey[0] : wordKey[1];\n      } else {\n        return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n      }\n    }\n  };\n  var srCyrl = moment.defineLocale('sr-cyrl', {\n    months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n    monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n    weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n    weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'D. M. 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      nextWeek: function () {\n        switch (this.day()) {\n          case 0:\n            return '[у] [недељу] [у] LT';\n          case 3:\n            return '[у] [среду] [у] LT';\n          case 6:\n            return '[у] [суботу] [у] LT';\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[у] dddd [у] LT';\n        }\n      },\n      lastDay: '[јуче у] LT',\n      lastWeek: function () {\n        var lastWeekDays = ['[прошле] [недеље] [у] LT', '[прошлог] [понедељка] [у] LT', '[прошлог] [уторка] [у] LT', '[прошле] [среде] [у] LT', '[прошлог] [четвртка] [у] LT', '[прошлог] [петка] [у] LT', '[прошле] [суботе] [у] LT'];\n        return lastWeekDays[this.day()];\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'за %s',\n      past: 'пре %s',\n      s: 'неколико секунди',\n      ss: translator.translate,\n      m: translator.translate,\n      mm: translator.translate,\n      h: translator.translate,\n      hh: translator.translate,\n      d: 'дан',\n      dd: translator.translate,\n      M: 'месец',\n      MM: translator.translate,\n      y: 'годину',\n      yy: translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 1st is the first week of the year.\n    }\n  });\n\n  return srCyrl;\n});","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ss = moment.defineLocale('ss', {\n    months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n    monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n    weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n    weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n    weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: '[Namuhla nga] LT',\n      nextDay: '[Kusasa nga] LT',\n      nextWeek: 'dddd [nga] LT',\n      lastDay: '[Itolo nga] LT',\n      lastWeek: 'dddd [leliphelile] [nga] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'nga %s',\n      past: 'wenteka nga %s',\n      s: 'emizuzwana lomcane',\n      ss: '%d mzuzwana',\n      m: 'umzuzu',\n      mm: '%d emizuzu',\n      h: 'lihora',\n      hh: '%d emahora',\n      d: 'lilanga',\n      dd: '%d emalanga',\n      M: 'inyanga',\n      MM: '%d tinyanga',\n      y: 'umnyaka',\n      yy: '%d iminyaka'\n    },\n    meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n    meridiem: function (hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'ekuseni';\n      } else if (hours < 15) {\n        return 'emini';\n      } else if (hours < 19) {\n        return 'entsambama';\n      } else {\n        return 'ebusuku';\n      }\n    },\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'ekuseni') {\n        return hour;\n      } else if (meridiem === 'emini') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n        if (hour === 0) {\n          return 0;\n        }\n        return hour + 12;\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal: '%d',\n    week: {\n      dow: 1,\n      // 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 ss;\n});","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var sv = moment.defineLocale('sv', {\n    months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n    weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n    weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY [kl.] HH:mm',\n      LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n      lll: 'D MMM YYYY HH:mm',\n      llll: 'ddd D MMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Idag] LT',\n      nextDay: '[Imorgon] LT',\n      lastDay: '[Igår] LT',\n      nextWeek: '[På] dddd LT',\n      lastWeek: '[I] dddd[s] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'om %s',\n      past: 'för %s sedan',\n      s: 'några sekunder',\n      ss: '%d sekunder',\n      m: 'en minut',\n      mm: '%d minuter',\n      h: 'en timme',\n      hh: '%d timmar',\n      d: 'en dag',\n      dd: '%d dagar',\n      M: 'en månad',\n      MM: '%d månader',\n      y: 'ett år',\n      yy: '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? ':e' : b === 1 ? ':a' : b === 2 ? ':a' : b === 3 ? ':e' : ':e';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 sv;\n});","//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var sw = moment.defineLocale('sw', {\n    months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n    weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n    weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n    weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'hh:mm A',\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: '[leo saa] LT',\n      nextDay: '[kesho saa] LT',\n      nextWeek: '[wiki ijayo] dddd [saat] LT',\n      lastDay: '[jana] LT',\n      lastWeek: '[wiki iliyopita] dddd [saat] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s baadaye',\n      past: 'tokea %s',\n      s: 'hivi punde',\n      ss: 'sekunde %d',\n      m: 'dakika moja',\n      mm: 'dakika %d',\n      h: 'saa limoja',\n      hh: 'masaa %d',\n      d: 'siku moja',\n      dd: 'siku %d',\n      M: 'mwezi mmoja',\n      MM: 'miezi %d',\n      y: 'mwaka mmoja',\n      yy: 'miaka %d'\n    },\n    week: {\n      dow: 1,\n      // 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 sw;\n});","//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var symbolMap = {\n      1: '௧',\n      2: '௨',\n      3: '௩',\n      4: '௪',\n      5: '௫',\n      6: '௬',\n      7: '௭',\n      8: '௮',\n      9: '௯',\n      0: '௦'\n    },\n    numberMap = {\n      '௧': '1',\n      '௨': '2',\n      '௩': '3',\n      '௪': '4',\n      '௫': '5',\n      '௬': '6',\n      '௭': '7',\n      '௮': '8',\n      '௯': '9',\n      '௦': '0'\n    };\n  var ta = moment.defineLocale('ta', {\n    months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n    monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n    weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\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: '[இன்று] LT',\n      nextDay: '[நாளை] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[நேற்று] LT',\n      lastWeek: '[கடந்த வாரம்] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s இல்',\n      past: '%s முன்',\n      s: 'ஒரு சில விநாடிகள்',\n      ss: '%d விநாடிகள்',\n      m: 'ஒரு நிமிடம்',\n      mm: '%d நிமிடங்கள்',\n      h: 'ஒரு மணி நேரம்',\n      hh: '%d மணி நேரம்',\n      d: 'ஒரு நாள்',\n      dd: '%d நாட்கள்',\n      M: 'ஒரு மாதம்',\n      MM: '%d மாதங்கள்',\n      y: 'ஒரு வருடம்',\n      yy: '%d ஆண்டுகள்'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n    ordinal: function (number) {\n      return number + 'வது';\n    },\n    preparse: function (string) {\n      return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function (string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    // refer http://ta.wikipedia.org/s/1er1\n    meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 2) {\n        return ' யாமம்';\n      } else if (hour < 6) {\n        return ' வைகறை'; // வைகறை\n      } else if (hour < 10) {\n        return ' காலை'; // காலை\n      } else if (hour < 14) {\n        return ' நண்பகல்'; // நண்பகல்\n      } else if (hour < 18) {\n        return ' எற்பாடு'; // எற்பாடு\n      } else if (hour < 22) {\n        return ' மாலை'; // மாலை\n      } else {\n        return ' யாமம்';\n      }\n    },\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'யாமம்') {\n        return hour < 2 ? hour : hour + 12;\n      } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n        return hour;\n      } else if (meridiem === 'நண்பகல்') {\n        return hour >= 10 ? hour : hour + 12;\n      } else {\n        return hour + 12;\n      }\n    },\n    week: {\n      dow: 0,\n      // 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\n  return ta;\n});","//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var te = moment.defineLocale('te', {\n    months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n    monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n    weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n    weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm',\n      LTS: 'A h:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar: {\n      sameDay: '[నేడు] LT',\n      nextDay: '[రేపు] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[నిన్న] LT',\n      lastWeek: '[గత] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s లో',\n      past: '%s క్రితం',\n      s: 'కొన్ని క్షణాలు',\n      ss: '%d సెకన్లు',\n      m: 'ఒక నిమిషం',\n      mm: '%d నిమిషాలు',\n      h: 'ఒక గంట',\n      hh: '%d గంటలు',\n      d: 'ఒక రోజు',\n      dd: '%d రోజులు',\n      M: 'ఒక నెల',\n      MM: '%d నెలలు',\n      y: 'ఒక సంవత్సరం',\n      yy: '%d సంవత్సరాలు'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n    ordinal: '%dవ',\n    meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'రాత్రి') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'ఉదయం') {\n        return hour;\n      } else if (meridiem === 'మధ్యాహ్నం') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'సాయంత్రం') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'రాత్రి';\n      } else if (hour < 10) {\n        return 'ఉదయం';\n      } else if (hour < 17) {\n        return 'మధ్యాహ్నం';\n      } else if (hour < 20) {\n        return 'సాయంత్రం';\n      } else {\n        return 'రాత్రి';\n      }\n    },\n    week: {\n      dow: 0,\n      // 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\n  return te;\n});","//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var tet = moment.defineLocale('tet', {\n    months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n    monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n    weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n    weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n    weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_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: '[Ohin iha] LT',\n      nextDay: '[Aban iha] LT',\n      nextWeek: 'dddd [iha] LT',\n      lastDay: '[Horiseik iha] LT',\n      lastWeek: 'dddd [semana kotuk] [iha] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'iha %s',\n      past: '%s liuba',\n      s: 'segundu balun',\n      ss: 'segundu %d',\n      m: 'minutu ida',\n      mm: 'minutu %d',\n      h: 'oras ida',\n      hh: 'oras %d',\n      d: 'loron ida',\n      dd: 'loron %d',\n      M: 'fulan ida',\n      MM: 'fulan %d',\n      y: 'tinan ida',\n      yy: 'tinan %d'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 tet;\n});","//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var suffixes = {\n    0: '-ум',\n    1: '-ум',\n    2: '-юм',\n    3: '-юм',\n    4: '-ум',\n    5: '-ум',\n    6: '-ум',\n    7: '-ум',\n    8: '-ум',\n    9: '-ум',\n    10: '-ум',\n    12: '-ум',\n    13: '-ум',\n    20: '-ум',\n    30: '-юм',\n    40: '-ум',\n    50: '-ум',\n    60: '-ум',\n    70: '-ум',\n    80: '-ум',\n    90: '-ум',\n    100: '-ум'\n  };\n  var tg = moment.defineLocale('tg', {\n    months: {\n      format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split('_'),\n      standalone: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_')\n    },\n    monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\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: '[Имрӯз соати] LT',\n      nextDay: '[Фардо соати] LT',\n      lastDay: '[Дирӯз соати] LT',\n      nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n      lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'баъди %s',\n      past: '%s пеш',\n      s: 'якчанд сония',\n      m: 'як дақиқа',\n      mm: '%d дақиқа',\n      h: 'як соат',\n      hh: '%d соат',\n      d: 'як рӯз',\n      dd: '%d рӯз',\n      M: 'як моҳ',\n      MM: '%d моҳ',\n      y: 'як сол',\n      yy: '%d сол'\n    },\n    meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'шаб') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'субҳ') {\n        return hour;\n      } else if (meridiem === 'рӯз') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'бегоҳ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 4) {\n        return 'шаб';\n      } else if (hour < 11) {\n        return 'субҳ';\n      } else if (hour < 16) {\n        return 'рӯз';\n      } else if (hour < 19) {\n        return 'бегоҳ';\n      } else {\n        return 'шаб';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n    ordinal: function (number) {\n      var a = number % 10,\n        b = number >= 100 ? 100 : null;\n      return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 1th is the first week of the year.\n    }\n  });\n\n  return tg;\n});","//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var th = moment.defineLocale('th', {\n    months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n    monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n    weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'),\n    // yes, three characters difference\n    weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n    weekdaysParseExact: true,\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    meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\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: 'dddd[หน้า เวลา] LT',\n      lastDay: '[เมื่อวานนี้ เวลา] LT',\n      lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n      sameElse: 'L'\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      w: '1 สัปดาห์',\n      ww: '%d สัปดาห์',\n      M: '1 เดือน',\n      MM: '%d เดือน',\n      y: '1 ปี',\n      yy: '%d ปี'\n    }\n  });\n  return th;\n});","//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var suffixes = {\n    1: \"'inji\",\n    5: \"'inji\",\n    8: \"'inji\",\n    70: \"'inji\",\n    80: \"'inji\",\n    2: \"'nji\",\n    7: \"'nji\",\n    20: \"'nji\",\n    50: \"'nji\",\n    3: \"'ünji\",\n    4: \"'ünji\",\n    100: \"'ünji\",\n    6: \"'njy\",\n    9: \"'unjy\",\n    10: \"'unjy\",\n    30: \"'unjy\",\n    60: \"'ynjy\",\n    90: \"'ynjy\"\n  };\n  var tk = moment.defineLocale('tk', {\n    months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split('_'),\n    monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n    weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split('_'),\n    weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n    weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.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: '[bugün sagat] LT',\n      nextDay: '[ertir sagat] LT',\n      nextWeek: '[indiki] dddd [sagat] LT',\n      lastDay: '[düýn] LT',\n      lastWeek: '[geçen] dddd [sagat] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s soň',\n      past: '%s öň',\n      s: 'birnäçe sekunt',\n      m: 'bir minut',\n      mm: '%d minut',\n      h: 'bir sagat',\n      hh: '%d sagat',\n      d: 'bir gün',\n      dd: '%d gün',\n      M: 'bir aý',\n      MM: '%d aý',\n      y: 'bir ýyl',\n      yy: '%d ýyl'\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 + \"'unjy\";\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,\n      // 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 tk;\n});","//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var tlPh = moment.defineLocale('tl-ph', {\n    months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n    monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n    weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n    weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n    weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'MM/D/YYYY',\n      LL: 'MMMM D, YYYY',\n      LLL: 'MMMM D, YYYY HH:mm',\n      LLLL: 'dddd, MMMM DD, YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: 'LT [ngayong araw]',\n      nextDay: '[Bukas ng] LT',\n      nextWeek: 'LT [sa susunod na] dddd',\n      lastDay: 'LT [kahapon]',\n      lastWeek: 'LT [noong nakaraang] dddd',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'sa loob ng %s',\n      past: '%s ang nakalipas',\n      s: 'ilang segundo',\n      ss: '%d segundo',\n      m: 'isang minuto',\n      mm: '%d minuto',\n      h: 'isang oras',\n      hh: '%d oras',\n      d: 'isang araw',\n      dd: '%d araw',\n      M: 'isang buwan',\n      MM: '%d buwan',\n      y: 'isang taon',\n      yy: '%d taon'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal: function (number) {\n      return number;\n    },\n    week: {\n      dow: 1,\n      // 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 tlPh;\n});","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n  function translateFuture(output) {\n    var time = output;\n    time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'leS' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'waQ' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'nem' : time + ' pIq';\n    return time;\n  }\n  function translatePast(output) {\n    var time = output;\n    time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'Hu’' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'wen' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'ben' : time + ' ret';\n    return time;\n  }\n  function translate(number, withoutSuffix, string, isFuture) {\n    var numberNoun = numberAsNoun(number);\n    switch (string) {\n      case 'ss':\n        return numberNoun + ' lup';\n      case 'mm':\n        return numberNoun + ' tup';\n      case 'hh':\n        return numberNoun + ' rep';\n      case 'dd':\n        return numberNoun + ' jaj';\n      case 'MM':\n        return numberNoun + ' jar';\n      case 'yy':\n        return numberNoun + ' DIS';\n    }\n  }\n  function numberAsNoun(number) {\n    var hundred = Math.floor(number % 1000 / 100),\n      ten = Math.floor(number % 100 / 10),\n      one = number % 10,\n      word = '';\n    if (hundred > 0) {\n      word += numbersNouns[hundred] + 'vatlh';\n    }\n    if (ten > 0) {\n      word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n    }\n    if (one > 0) {\n      word += (word !== '' ? ' ' : '') + numbersNouns[one];\n    }\n    return word === '' ? 'pagh' : word;\n  }\n  var tlh = moment.defineLocale('tlh', {\n    months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n    monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.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: '[DaHjaj] LT',\n      nextDay: '[wa’leS] LT',\n      nextWeek: 'LLL',\n      lastDay: '[wa’Hu’] LT',\n      lastWeek: 'LLL',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: translateFuture,\n      past: translatePast,\n      s: 'puS lup',\n      ss: translate,\n      m: 'wa’ tup',\n      mm: translate,\n      h: 'wa’ rep',\n      hh: translate,\n      d: 'wa’ jaj',\n      dd: translate,\n      M: 'wa’ jar',\n      MM: translate,\n      y: 'wa’ DIS',\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // 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 tlh;\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;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\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  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    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    weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.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,\n      // 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});","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n\n  // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n  // This is currently too difficult (maybe even impossible) to add.\n  var tzl = moment.defineLocale('tzl', {\n    months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n    monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n    weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n    weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n    weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n    longDateFormat: {\n      LT: 'HH.mm',\n      LTS: 'HH.mm.ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM [dallas] YYYY',\n      LLL: 'D. MMMM [dallas] YYYY HH.mm',\n      LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n    },\n    meridiemParse: /d\\'o|d\\'a/i,\n    isPM: function (input) {\n      return \"d'o\" === input.toLowerCase();\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours > 11) {\n        return isLower ? \"d'o\" : \"D'O\";\n      } else {\n        return isLower ? \"d'a\" : \"D'A\";\n      }\n    },\n    calendar: {\n      sameDay: '[oxhi à] LT',\n      nextDay: '[demà à] LT',\n      nextWeek: 'dddd [à] LT',\n      lastDay: '[ieiri à] LT',\n      lastWeek: '[sür el] dddd [lasteu à] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'osprei %s',\n      past: 'ja%s',\n      s: processRelativeTime,\n      ss: processRelativeTime,\n      m: processRelativeTime,\n      mm: processRelativeTime,\n      h: processRelativeTime,\n      hh: processRelativeTime,\n      d: processRelativeTime,\n      dd: processRelativeTime,\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,\n      // 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  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      s: ['viensas secunds', \"'iensas secunds\"],\n      ss: [number + ' secunds', '' + number + ' secunds'],\n      m: [\"'n míut\", \"'iens míut\"],\n      mm: [number + ' míuts', '' + number + ' míuts'],\n      h: [\"'n þora\", \"'iensa þora\"],\n      hh: [number + ' þoras', '' + number + ' þoras'],\n      d: [\"'n ziua\", \"'iensa ziua\"],\n      dd: [number + ' ziuas', '' + number + ' ziuas'],\n      M: [\"'n mes\", \"'iens mes\"],\n      MM: [number + ' mesen', '' + number + ' mesen'],\n      y: [\"'n ar\", \"'iens ar\"],\n      yy: [number + ' ars', '' + number + ' ars']\n    };\n    return isFuture ? format[key][0] : withoutSuffix ? format[key][0] : format[key][1];\n  }\n  return tzl;\n});","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var tzm = moment.defineLocale('tzm', {\n    months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n    monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n    weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\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: '[ⴰⵙⴷⵅ ⴴ] LT',\n      nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n      nextWeek: 'dddd [ⴴ] LT',\n      lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n      lastWeek: 'dddd [ⴴ] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n      past: 'ⵢⴰⵏ %s',\n      s: 'ⵉⵎⵉⴽ',\n      ss: '%d ⵉⵎⵉⴽ',\n      m: 'ⵎⵉⵏⵓⴺ',\n      mm: '%d ⵎⵉⵏⵓⴺ',\n      h: 'ⵙⴰⵄⴰ',\n      hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n      d: 'ⴰⵙⵙ',\n      dd: '%d oⵙⵙⴰⵏ',\n      M: 'ⴰⵢoⵓⵔ',\n      MM: '%d ⵉⵢⵢⵉⵔⵏ',\n      y: 'ⴰⵙⴳⴰⵙ',\n      yy: '%d ⵉⵙⴳⴰⵙⵏ'\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n    }\n  });\n\n  return tzm;\n});","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var tzmLatn = moment.defineLocale('tzm-latn', {\n    months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n    monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n    weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.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: '[asdkh g] LT',\n      nextDay: '[aska g] LT',\n      nextWeek: 'dddd [g] LT',\n      lastDay: '[assant g] LT',\n      lastWeek: 'dddd [g] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dadkh s yan %s',\n      past: 'yan %s',\n      s: 'imik',\n      ss: '%d imik',\n      m: 'minuḍ',\n      mm: '%d minuḍ',\n      h: 'saɛa',\n      hh: '%d tassaɛin',\n      d: 'ass',\n      dd: '%d ossan',\n      M: 'ayowr',\n      MM: '%d iyyirn',\n      y: 'asgas',\n      yy: '%d isgasn'\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n    }\n  });\n\n  return tzmLatn;\n});","//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var ugCn = moment.defineLocale('ug-cn', {\n    months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),\n    monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),\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: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n    },\n    meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === 'يېرىم كېچە' || meridiem === 'سەھەر' || meridiem === 'چۈشتىن بۇرۇن') {\n        return hour;\n      } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n        return hour + 12;\n      } else {\n        return hour >= 11 ? hour : hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      var hm = hour * 100 + minute;\n      if (hm < 600) {\n        return 'يېرىم كېچە';\n      } else if (hm < 900) {\n        return 'سەھەر';\n      } else if (hm < 1130) {\n        return 'چۈشتىن بۇرۇن';\n      } else if (hm < 1230) {\n        return 'چۈش';\n      } else if (hm < 1800) {\n        return 'چۈشتىن كېيىن';\n      } else {\n        return 'كەچ';\n      }\n    },\n    calendar: {\n      sameDay: '[بۈگۈن سائەت] LT',\n      nextDay: '[ئەتە سائەت] LT',\n      nextWeek: '[كېلەركى] dddd [سائەت] LT',\n      lastDay: '[تۆنۈگۈن] LT',\n      lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s كېيىن',\n      past: '%s بۇرۇن',\n      s: 'نەچچە سېكونت',\n      ss: '%d سېكونت',\n      m: 'بىر مىنۇت',\n      mm: '%d مىنۇت',\n      h: 'بىر سائەت',\n      hh: '%d سائەت',\n      d: 'بىر كۈن',\n      dd: '%d كۈن',\n      M: 'بىر ئاي',\n      MM: '%d ئاي',\n      y: 'بىر يىل',\n      yy: '%d يىل'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '-كۈنى';\n        case 'w':\n        case 'W':\n          return number + '-ھەپتە';\n        default:\n          return number;\n      }\n    },\n    preparse: function (string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n      return string.replace(/,/g, '،');\n    },\n    week: {\n      // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 1st is the first week of the year.\n    }\n  });\n\n  return ugCn;\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;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  function plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : 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: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n        accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n        genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n      },\n      nounCase;\n    if (m === true) {\n      return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));\n    }\n    if (!m) {\n      return weekdays['nominative'];\n    }\n    nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format) ? 'accusative' : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format) ? 'genitive' : '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  var uk = moment.defineLocale('uk', {\n    months: {\n      format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n      standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n    },\n    monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\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,\n      // 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});","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var months = ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئی', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n  var ur = moment.defineLocale('ur', {\n    months: months,\n    monthsShort: months,\n    weekdays: days,\n    weekdaysShort: days,\n    weekdaysMin: days,\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    meridiemParse: /صبح|شام/,\n    isPM: function (input) {\n      return 'شام' === input;\n    },\n    meridiem: function (hour, minute, isLower) {\n      if (hour < 12) {\n        return 'صبح';\n      }\n      return 'شام';\n    },\n    calendar: {\n      sameDay: '[آج بوقت] LT',\n      nextDay: '[کل بوقت] LT',\n      nextWeek: 'dddd [بوقت] LT',\n      lastDay: '[گذشتہ روز بوقت] LT',\n      lastWeek: '[گذشتہ] dddd [بوقت] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s بعد',\n      past: '%s قبل',\n      s: 'چند سیکنڈ',\n      ss: '%d سیکنڈ',\n      m: 'ایک منٹ',\n      mm: '%d منٹ',\n      h: 'ایک گھنٹہ',\n      hh: '%d گھنٹے',\n      d: 'ایک دن',\n      dd: '%d دن',\n      M: 'ایک ماہ',\n      MM: '%d ماہ',\n      y: 'ایک سال',\n      yy: '%d سال'\n    },\n    preparse: function (string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n      return string.replace(/,/g, '،');\n    },\n    week: {\n      dow: 1,\n      // 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 ur;\n});","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var uz = moment.defineLocale('uz', {\n    months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n    monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\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: 'D MMMM YYYY, dddd HH:mm'\n    },\n    calendar: {\n      sameDay: '[Бугун соат] LT [да]',\n      nextDay: '[Эртага] LT [да]',\n      nextWeek: 'dddd [куни соат] LT [да]',\n      lastDay: '[Кеча соат] LT [да]',\n      lastWeek: '[Утган] dddd [куни соат] LT [да]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'Якин %s ичида',\n      past: 'Бир неча %s олдин',\n      s: 'фурсат',\n      ss: '%d фурсат',\n      m: 'бир дакика',\n      mm: '%d дакика',\n      h: 'бир соат',\n      hh: '%d соат',\n      d: 'бир кун',\n      dd: '%d кун',\n      M: 'бир ой',\n      MM: '%d ой',\n      y: 'бир йил',\n      yy: '%d йил'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 4th is the first week of the year.\n    }\n  });\n\n  return uz;\n});","//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var uzLatn = moment.defineLocale('uz-latn', {\n    months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n    monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n    weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n    weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n    weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.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: 'D MMMM YYYY, dddd HH:mm'\n    },\n    calendar: {\n      sameDay: '[Bugun soat] LT [da]',\n      nextDay: '[Ertaga] LT [da]',\n      nextWeek: 'dddd [kuni soat] LT [da]',\n      lastDay: '[Kecha soat] LT [da]',\n      lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'Yaqin %s ichida',\n      past: 'Bir necha %s oldin',\n      s: 'soniya',\n      ss: '%d soniya',\n      m: 'bir daqiqa',\n      mm: '%d daqiqa',\n      h: 'bir soat',\n      hh: '%d soat',\n      d: 'bir kun',\n      dd: '%d kun',\n      M: 'bir oy',\n      MM: '%d oy',\n      y: 'bir yil',\n      yy: '%d yil'\n    },\n    week: {\n      dow: 1,\n      // 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 uzLatn;\n});","//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var vi = moment.defineLocale('vi', {\n    months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n    monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n    weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    weekdaysParseExact: true,\n    meridiemParse: /sa|ch/i,\n    isPM: function (input) {\n      return /^ch$/i.test(input);\n    },\n    meridiem: function (hours, minutes, isLower) {\n      if (hours < 12) {\n        return isLower ? 'sa' : 'SA';\n      } else {\n        return isLower ? 'ch' : 'CH';\n      }\n    },\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM [năm] YYYY',\n      LLL: 'D MMMM [năm] YYYY HH:mm',\n      LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n      l: 'DD/M/YYYY',\n      ll: 'D MMM YYYY',\n      lll: 'D MMM YYYY HH:mm',\n      llll: 'ddd, D MMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Hôm nay lúc] LT',\n      nextDay: '[Ngày mai lúc] LT',\n      nextWeek: 'dddd [tuần tới lúc] LT',\n      lastDay: '[Hôm qua lúc] LT',\n      lastWeek: 'dddd [tuần trước lúc] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s tới',\n      past: '%s trước',\n      s: 'vài giây',\n      ss: '%d giây',\n      m: 'một phút',\n      mm: '%d phút',\n      h: 'một giờ',\n      hh: '%d giờ',\n      d: 'một ngày',\n      dd: '%d ngày',\n      w: 'một tuần',\n      ww: '%d tuần',\n      M: 'một tháng',\n      MM: '%d tháng',\n      y: 'một năm',\n      yy: '%d năm'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal: function (number) {\n      return number;\n    },\n    week: {\n      dow: 1,\n      // 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 vi;\n});","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var xPseudo = moment.defineLocale('x-pseudo', {\n    months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n    monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n    weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n    weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\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: '[T~ódá~ý át] LT',\n      nextDay: '[T~ómó~rró~w át] LT',\n      nextWeek: 'dddd [át] LT',\n      lastDay: '[Ý~ést~érdá~ý át] LT',\n      lastWeek: '[L~ást] dddd [át] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'í~ñ %s',\n      past: '%s á~gó',\n      s: 'á ~féw ~sécó~ñds',\n      ss: '%d s~écóñ~ds',\n      m: 'á ~míñ~úté',\n      mm: '%d m~íñú~tés',\n      h: 'á~ñ hó~úr',\n      hh: '%d h~óúrs',\n      d: 'á ~dáý',\n      dd: '%d d~áýs',\n      M: 'á ~móñ~th',\n      MM: '%d m~óñt~hs',\n      y: 'á ~ýéár',\n      yy: '%d ý~éárs'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal: function (number) {\n      var b = number % 10,\n        output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // 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 xPseudo;\n});","//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var yo = moment.defineLocale('yo', {\n    months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n    monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n    weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n    weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n    weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: '[Ònì ni] LT',\n      nextDay: '[Ọ̀la ni] LT',\n      nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n      lastDay: '[Àna ni] LT',\n      lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'ní %s',\n      past: '%s kọjá',\n      s: 'ìsẹjú aayá die',\n      ss: 'aayá %d',\n      m: 'ìsẹjú kan',\n      mm: 'ìsẹjú %d',\n      h: 'wákati kan',\n      hh: 'wákati %d',\n      d: 'ọjọ́ kan',\n      dd: 'ọjọ́ %d',\n      M: 'osù kan',\n      MM: 'osù %d',\n      y: 'ọdún kan',\n      yy: 'ọdún %d'\n    },\n    dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n    ordinal: 'ọjọ́ %d',\n    week: {\n      dow: 1,\n      // 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 yo;\n});","//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var zhCn = moment.defineLocale('zh-cn', {\n    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\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日Ah点mm分',\n      LLLL: 'YYYY年M月D日ddddAh点mm分',\n      l: 'YYYY/M/D',\n      ll: 'YYYY年M月D日',\n      lll: 'YYYY年M月D日 HH:mm',\n      llll: 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n        return hour;\n      } else if (meridiem === '下午' || meridiem === '晚上') {\n        return hour + 12;\n      } else {\n        // '中午'\n        return hour >= 11 ? hour : hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      var hm = hour * 100 + minute;\n      if (hm < 600) {\n        return '凌晨';\n      } else if (hm < 900) {\n        return '早上';\n      } else if (hm < 1130) {\n        return '上午';\n      } else if (hm < 1230) {\n        return '中午';\n      } else if (hm < 1800) {\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 '[下]dddLT';\n        } else {\n          return '[本]dddLT';\n        }\n      },\n      lastDay: '[昨天]LT',\n      lastWeek: function (now) {\n        if (this.week() !== now.week()) {\n          return '[上]dddLT';\n        } else {\n          return '[本]dddLT';\n        }\n      },\n      sameElse: 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '日';\n        case 'M':\n          return number + '月';\n        case 'w':\n        case 'W':\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      w: '1 周',\n      ww: '%d 周',\n      M: '1 个月',\n      MM: '%d 个月',\n      y: '1 年',\n      yy: '%d 年'\n    },\n    week: {\n      // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n      dow: 1,\n      // 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 zhCn;\n});","//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var zhHk = moment.defineLocale('zh-hk', {\n    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\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/M/D',\n      ll: 'YYYY年M月D日',\n      lll: 'YYYY年M月D日 HH:mm',\n      llll: 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n        return hour;\n      } else if (meridiem === '中午') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === '下午' || meridiem === '晚上') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      var hm = hour * 100 + minute;\n      if (hm < 600) {\n        return '凌晨';\n      } else if (hm < 900) {\n        return '早上';\n      } else if (hm < 1200) {\n        return '上午';\n      } else if (hm === 1200) {\n        return '中午';\n      } else if (hm < 1800) {\n        return '下午';\n      } else {\n        return '晚上';\n      }\n    },\n    calendar: {\n      sameDay: '[今天]LT',\n      nextDay: '[明天]LT',\n      nextWeek: '[下]ddddLT',\n      lastDay: '[昨天]LT',\n      lastWeek: '[上]ddddLT',\n      sameElse: 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '日';\n        case 'M':\n          return number + '月';\n        case 'w':\n        case 'W':\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  return zhHk;\n});","//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var zhMo = moment.defineLocale('zh-mo', {\n    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'YYYY年M月D日',\n      LLL: 'YYYY年M月D日 HH:mm',\n      LLLL: 'YYYY年M月D日dddd HH:mm',\n      l: 'D/M/YYYY',\n      ll: 'YYYY年M月D日',\n      lll: 'YYYY年M月D日 HH:mm',\n      llll: 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n        return hour;\n      } else if (meridiem === '中午') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === '下午' || meridiem === '晚上') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      var hm = hour * 100 + minute;\n      if (hm < 600) {\n        return '凌晨';\n      } else if (hm < 900) {\n        return '早上';\n      } else if (hm < 1130) {\n        return '上午';\n      } else if (hm < 1230) {\n        return '中午';\n      } else if (hm < 1800) {\n        return '下午';\n      } else {\n        return '晚上';\n      }\n    },\n    calendar: {\n      sameDay: '[今天] LT',\n      nextDay: '[明天] LT',\n      nextWeek: '[下]dddd LT',\n      lastDay: '[昨天] LT',\n      lastWeek: '[上]dddd LT',\n      sameElse: 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '日';\n        case 'M':\n          return number + '月';\n        case 'w':\n        case 'W':\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  return zhMo;\n});","//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  //! moment.js locale configuration\n  var zhTw = moment.defineLocale('zh-tw', {\n    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\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/M/D',\n      ll: 'YYYY年M月D日',\n      lll: 'YYYY年M月D日 HH:mm',\n      llll: 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour: function (hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n        return hour;\n      } else if (meridiem === '中午') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === '下午' || meridiem === '晚上') {\n        return hour + 12;\n      }\n    },\n    meridiem: function (hour, minute, isLower) {\n      var hm = hour * 100 + minute;\n      if (hm < 600) {\n        return '凌晨';\n      } else if (hm < 900) {\n        return '早上';\n      } else if (hm < 1130) {\n        return '上午';\n      } else if (hm < 1230) {\n        return '中午';\n      } else if (hm < 1800) {\n        return '下午';\n      } else {\n        return '晚上';\n      }\n    },\n    calendar: {\n      sameDay: '[今天] LT',\n      nextDay: '[明天] LT',\n      nextWeek: '[下]dddd LT',\n      lastDay: '[昨天] LT',\n      lastWeek: '[上]dddd LT',\n      sameElse: 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n    ordinal: function (number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '日';\n        case 'M':\n          return number + '月';\n        case 'w':\n        case 'W':\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  return zhTw;\n});","/*!\n * Chart.js v2.9.4\n * https://www.chartjs.org\n * (c) 2020 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function () {\n    try {\n      return require('moment');\n    } catch (e) {}\n  }()) : typeof define === 'function' && define.amd ? define(['require'], function (require) {\n    return factory(function () {\n      try {\n        return require('moment');\n      } catch (e) {}\n    }());\n  }) : (global = global || self, global.Chart = factory(global.moment));\n})(this, function (moment) {\n  'use strict';\n\n  moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n  function createCommonjsModule(fn, module) {\n    return module = {\n      exports: {}\n    }, fn(module, module.exports), module.exports;\n  }\n  function getCjsExportFromNamespace(n) {\n    return n && n['default'] || n;\n  }\n  var colorName = {\n    \"aliceblue\": [240, 248, 255],\n    \"antiquewhite\": [250, 235, 215],\n    \"aqua\": [0, 255, 255],\n    \"aquamarine\": [127, 255, 212],\n    \"azure\": [240, 255, 255],\n    \"beige\": [245, 245, 220],\n    \"bisque\": [255, 228, 196],\n    \"black\": [0, 0, 0],\n    \"blanchedalmond\": [255, 235, 205],\n    \"blue\": [0, 0, 255],\n    \"blueviolet\": [138, 43, 226],\n    \"brown\": [165, 42, 42],\n    \"burlywood\": [222, 184, 135],\n    \"cadetblue\": [95, 158, 160],\n    \"chartreuse\": [127, 255, 0],\n    \"chocolate\": [210, 105, 30],\n    \"coral\": [255, 127, 80],\n    \"cornflowerblue\": [100, 149, 237],\n    \"cornsilk\": [255, 248, 220],\n    \"crimson\": [220, 20, 60],\n    \"cyan\": [0, 255, 255],\n    \"darkblue\": [0, 0, 139],\n    \"darkcyan\": [0, 139, 139],\n    \"darkgoldenrod\": [184, 134, 11],\n    \"darkgray\": [169, 169, 169],\n    \"darkgreen\": [0, 100, 0],\n    \"darkgrey\": [169, 169, 169],\n    \"darkkhaki\": [189, 183, 107],\n    \"darkmagenta\": [139, 0, 139],\n    \"darkolivegreen\": [85, 107, 47],\n    \"darkorange\": [255, 140, 0],\n    \"darkorchid\": [153, 50, 204],\n    \"darkred\": [139, 0, 0],\n    \"darksalmon\": [233, 150, 122],\n    \"darkseagreen\": [143, 188, 143],\n    \"darkslateblue\": [72, 61, 139],\n    \"darkslategray\": [47, 79, 79],\n    \"darkslategrey\": [47, 79, 79],\n    \"darkturquoise\": [0, 206, 209],\n    \"darkviolet\": [148, 0, 211],\n    \"deeppink\": [255, 20, 147],\n    \"deepskyblue\": [0, 191, 255],\n    \"dimgray\": [105, 105, 105],\n    \"dimgrey\": [105, 105, 105],\n    \"dodgerblue\": [30, 144, 255],\n    \"firebrick\": [178, 34, 34],\n    \"floralwhite\": [255, 250, 240],\n    \"forestgreen\": [34, 139, 34],\n    \"fuchsia\": [255, 0, 255],\n    \"gainsboro\": [220, 220, 220],\n    \"ghostwhite\": [248, 248, 255],\n    \"gold\": [255, 215, 0],\n    \"goldenrod\": [218, 165, 32],\n    \"gray\": [128, 128, 128],\n    \"green\": [0, 128, 0],\n    \"greenyellow\": [173, 255, 47],\n    \"grey\": [128, 128, 128],\n    \"honeydew\": [240, 255, 240],\n    \"hotpink\": [255, 105, 180],\n    \"indianred\": [205, 92, 92],\n    \"indigo\": [75, 0, 130],\n    \"ivory\": [255, 255, 240],\n    \"khaki\": [240, 230, 140],\n    \"lavender\": [230, 230, 250],\n    \"lavenderblush\": [255, 240, 245],\n    \"lawngreen\": [124, 252, 0],\n    \"lemonchiffon\": [255, 250, 205],\n    \"lightblue\": [173, 216, 230],\n    \"lightcoral\": [240, 128, 128],\n    \"lightcyan\": [224, 255, 255],\n    \"lightgoldenrodyellow\": [250, 250, 210],\n    \"lightgray\": [211, 211, 211],\n    \"lightgreen\": [144, 238, 144],\n    \"lightgrey\": [211, 211, 211],\n    \"lightpink\": [255, 182, 193],\n    \"lightsalmon\": [255, 160, 122],\n    \"lightseagreen\": [32, 178, 170],\n    \"lightskyblue\": [135, 206, 250],\n    \"lightslategray\": [119, 136, 153],\n    \"lightslategrey\": [119, 136, 153],\n    \"lightsteelblue\": [176, 196, 222],\n    \"lightyellow\": [255, 255, 224],\n    \"lime\": [0, 255, 0],\n    \"limegreen\": [50, 205, 50],\n    \"linen\": [250, 240, 230],\n    \"magenta\": [255, 0, 255],\n    \"maroon\": [128, 0, 0],\n    \"mediumaquamarine\": [102, 205, 170],\n    \"mediumblue\": [0, 0, 205],\n    \"mediumorchid\": [186, 85, 211],\n    \"mediumpurple\": [147, 112, 219],\n    \"mediumseagreen\": [60, 179, 113],\n    \"mediumslateblue\": [123, 104, 238],\n    \"mediumspringgreen\": [0, 250, 154],\n    \"mediumturquoise\": [72, 209, 204],\n    \"mediumvioletred\": [199, 21, 133],\n    \"midnightblue\": [25, 25, 112],\n    \"mintcream\": [245, 255, 250],\n    \"mistyrose\": [255, 228, 225],\n    \"moccasin\": [255, 228, 181],\n    \"navajowhite\": [255, 222, 173],\n    \"navy\": [0, 0, 128],\n    \"oldlace\": [253, 245, 230],\n    \"olive\": [128, 128, 0],\n    \"olivedrab\": [107, 142, 35],\n    \"orange\": [255, 165, 0],\n    \"orangered\": [255, 69, 0],\n    \"orchid\": [218, 112, 214],\n    \"palegoldenrod\": [238, 232, 170],\n    \"palegreen\": [152, 251, 152],\n    \"paleturquoise\": [175, 238, 238],\n    \"palevioletred\": [219, 112, 147],\n    \"papayawhip\": [255, 239, 213],\n    \"peachpuff\": [255, 218, 185],\n    \"peru\": [205, 133, 63],\n    \"pink\": [255, 192, 203],\n    \"plum\": [221, 160, 221],\n    \"powderblue\": [176, 224, 230],\n    \"purple\": [128, 0, 128],\n    \"rebeccapurple\": [102, 51, 153],\n    \"red\": [255, 0, 0],\n    \"rosybrown\": [188, 143, 143],\n    \"royalblue\": [65, 105, 225],\n    \"saddlebrown\": [139, 69, 19],\n    \"salmon\": [250, 128, 114],\n    \"sandybrown\": [244, 164, 96],\n    \"seagreen\": [46, 139, 87],\n    \"seashell\": [255, 245, 238],\n    \"sienna\": [160, 82, 45],\n    \"silver\": [192, 192, 192],\n    \"skyblue\": [135, 206, 235],\n    \"slateblue\": [106, 90, 205],\n    \"slategray\": [112, 128, 144],\n    \"slategrey\": [112, 128, 144],\n    \"snow\": [255, 250, 250],\n    \"springgreen\": [0, 255, 127],\n    \"steelblue\": [70, 130, 180],\n    \"tan\": [210, 180, 140],\n    \"teal\": [0, 128, 128],\n    \"thistle\": [216, 191, 216],\n    \"tomato\": [255, 99, 71],\n    \"turquoise\": [64, 224, 208],\n    \"violet\": [238, 130, 238],\n    \"wheat\": [245, 222, 179],\n    \"white\": [255, 255, 255],\n    \"whitesmoke\": [245, 245, 245],\n    \"yellow\": [255, 255, 0],\n    \"yellowgreen\": [154, 205, 50]\n  };\n  var conversions = createCommonjsModule(function (module) {\n    /* MIT license */\n\n    // NOTE: conversions should only return primitive values (i.e. arrays, or\n    //       values that give correct `typeof` results).\n    //       do not use box values types (i.e. Number(), String(), etc.)\n\n    var reverseKeywords = {};\n    for (var key in colorName) {\n      if (colorName.hasOwnProperty(key)) {\n        reverseKeywords[colorName[key]] = key;\n      }\n    }\n    var convert = module.exports = {\n      rgb: {\n        channels: 3,\n        labels: 'rgb'\n      },\n      hsl: {\n        channels: 3,\n        labels: 'hsl'\n      },\n      hsv: {\n        channels: 3,\n        labels: 'hsv'\n      },\n      hwb: {\n        channels: 3,\n        labels: 'hwb'\n      },\n      cmyk: {\n        channels: 4,\n        labels: 'cmyk'\n      },\n      xyz: {\n        channels: 3,\n        labels: 'xyz'\n      },\n      lab: {\n        channels: 3,\n        labels: 'lab'\n      },\n      lch: {\n        channels: 3,\n        labels: 'lch'\n      },\n      hex: {\n        channels: 1,\n        labels: ['hex']\n      },\n      keyword: {\n        channels: 1,\n        labels: ['keyword']\n      },\n      ansi16: {\n        channels: 1,\n        labels: ['ansi16']\n      },\n      ansi256: {\n        channels: 1,\n        labels: ['ansi256']\n      },\n      hcg: {\n        channels: 3,\n        labels: ['h', 'c', 'g']\n      },\n      apple: {\n        channels: 3,\n        labels: ['r16', 'g16', 'b16']\n      },\n      gray: {\n        channels: 1,\n        labels: ['gray']\n      }\n    };\n\n    // hide .channels and .labels properties\n    for (var model in convert) {\n      if (convert.hasOwnProperty(model)) {\n        if (!('channels' in convert[model])) {\n          throw new Error('missing channels property: ' + model);\n        }\n        if (!('labels' in convert[model])) {\n          throw new Error('missing channel labels property: ' + model);\n        }\n        if (convert[model].labels.length !== convert[model].channels) {\n          throw new Error('channel and label counts mismatch: ' + model);\n        }\n        var channels = convert[model].channels;\n        var labels = convert[model].labels;\n        delete convert[model].channels;\n        delete convert[model].labels;\n        Object.defineProperty(convert[model], 'channels', {\n          value: channels\n        });\n        Object.defineProperty(convert[model], 'labels', {\n          value: labels\n        });\n      }\n    }\n    convert.rgb.hsl = function (rgb) {\n      var r = rgb[0] / 255;\n      var g = rgb[1] / 255;\n      var b = rgb[2] / 255;\n      var min = Math.min(r, g, b);\n      var max = Math.max(r, g, b);\n      var delta = max - min;\n      var h;\n      var s;\n      var l;\n      if (max === min) {\n        h = 0;\n      } else if (r === max) {\n        h = (g - b) / delta;\n      } else if (g === max) {\n        h = 2 + (b - r) / delta;\n      } else if (b === max) {\n        h = 4 + (r - g) / delta;\n      }\n      h = Math.min(h * 60, 360);\n      if (h < 0) {\n        h += 360;\n      }\n      l = (min + max) / 2;\n      if (max === min) {\n        s = 0;\n      } else if (l <= 0.5) {\n        s = delta / (max + min);\n      } else {\n        s = delta / (2 - max - min);\n      }\n      return [h, s * 100, l * 100];\n    };\n    convert.rgb.hsv = function (rgb) {\n      var rdif;\n      var gdif;\n      var bdif;\n      var h;\n      var s;\n      var r = rgb[0] / 255;\n      var g = rgb[1] / 255;\n      var b = rgb[2] / 255;\n      var v = Math.max(r, g, b);\n      var diff = v - Math.min(r, g, b);\n      var diffc = function (c) {\n        return (v - c) / 6 / diff + 1 / 2;\n      };\n      if (diff === 0) {\n        h = s = 0;\n      } else {\n        s = diff / v;\n        rdif = diffc(r);\n        gdif = diffc(g);\n        bdif = diffc(b);\n        if (r === v) {\n          h = bdif - gdif;\n        } else if (g === v) {\n          h = 1 / 3 + rdif - bdif;\n        } else if (b === v) {\n          h = 2 / 3 + gdif - rdif;\n        }\n        if (h < 0) {\n          h += 1;\n        } else if (h > 1) {\n          h -= 1;\n        }\n      }\n      return [h * 360, s * 100, v * 100];\n    };\n    convert.rgb.hwb = function (rgb) {\n      var r = rgb[0];\n      var g = rgb[1];\n      var b = rgb[2];\n      var h = convert.rgb.hsl(rgb)[0];\n      var w = 1 / 255 * Math.min(r, Math.min(g, b));\n      b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n      return [h, w * 100, b * 100];\n    };\n    convert.rgb.cmyk = function (rgb) {\n      var r = rgb[0] / 255;\n      var g = rgb[1] / 255;\n      var b = rgb[2] / 255;\n      var c;\n      var m;\n      var y;\n      var k;\n      k = Math.min(1 - r, 1 - g, 1 - b);\n      c = (1 - r - k) / (1 - k) || 0;\n      m = (1 - g - k) / (1 - k) || 0;\n      y = (1 - b - k) / (1 - k) || 0;\n      return [c * 100, m * 100, y * 100, k * 100];\n    };\n\n    /**\n     * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n     * */\n    function comparativeDistance(x, y) {\n      return Math.pow(x[0] - y[0], 2) + Math.pow(x[1] - y[1], 2) + Math.pow(x[2] - y[2], 2);\n    }\n    convert.rgb.keyword = function (rgb) {\n      var reversed = reverseKeywords[rgb];\n      if (reversed) {\n        return reversed;\n      }\n      var currentClosestDistance = Infinity;\n      var currentClosestKeyword;\n      for (var keyword in colorName) {\n        if (colorName.hasOwnProperty(keyword)) {\n          var value = colorName[keyword];\n\n          // Compute comparative distance\n          var distance = comparativeDistance(rgb, value);\n\n          // Check if its less, if so set as closest\n          if (distance < currentClosestDistance) {\n            currentClosestDistance = distance;\n            currentClosestKeyword = keyword;\n          }\n        }\n      }\n      return currentClosestKeyword;\n    };\n    convert.keyword.rgb = function (keyword) {\n      return colorName[keyword];\n    };\n    convert.rgb.xyz = function (rgb) {\n      var r = rgb[0] / 255;\n      var g = rgb[1] / 255;\n      var b = rgb[2] / 255;\n\n      // assume sRGB\n      r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n      g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n      b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n      var x = r * 0.4124 + g * 0.3576 + b * 0.1805;\n      var y = r * 0.2126 + g * 0.7152 + b * 0.0722;\n      var z = r * 0.0193 + g * 0.1192 + b * 0.9505;\n      return [x * 100, y * 100, z * 100];\n    };\n    convert.rgb.lab = function (rgb) {\n      var xyz = convert.rgb.xyz(rgb);\n      var x = xyz[0];\n      var y = xyz[1];\n      var z = xyz[2];\n      var l;\n      var a;\n      var b;\n      x /= 95.047;\n      y /= 100;\n      z /= 108.883;\n      x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;\n      y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;\n      z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;\n      l = 116 * y - 16;\n      a = 500 * (x - y);\n      b = 200 * (y - z);\n      return [l, a, b];\n    };\n    convert.hsl.rgb = function (hsl) {\n      var h = hsl[0] / 360;\n      var s = hsl[1] / 100;\n      var l = hsl[2] / 100;\n      var t1;\n      var t2;\n      var t3;\n      var rgb;\n      var val;\n      if (s === 0) {\n        val = l * 255;\n        return [val, val, val];\n      }\n      if (l < 0.5) {\n        t2 = l * (1 + s);\n      } else {\n        t2 = l + s - l * s;\n      }\n      t1 = 2 * l - t2;\n      rgb = [0, 0, 0];\n      for (var i = 0; i < 3; i++) {\n        t3 = h + 1 / 3 * -(i - 1);\n        if (t3 < 0) {\n          t3++;\n        }\n        if (t3 > 1) {\n          t3--;\n        }\n        if (6 * t3 < 1) {\n          val = t1 + (t2 - t1) * 6 * t3;\n        } else if (2 * t3 < 1) {\n          val = t2;\n        } else if (3 * t3 < 2) {\n          val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n        } else {\n          val = t1;\n        }\n        rgb[i] = val * 255;\n      }\n      return rgb;\n    };\n    convert.hsl.hsv = function (hsl) {\n      var h = hsl[0];\n      var s = hsl[1] / 100;\n      var l = hsl[2] / 100;\n      var smin = s;\n      var lmin = Math.max(l, 0.01);\n      var sv;\n      var v;\n      l *= 2;\n      s *= l <= 1 ? l : 2 - l;\n      smin *= lmin <= 1 ? lmin : 2 - lmin;\n      v = (l + s) / 2;\n      sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s / (l + s);\n      return [h, sv * 100, v * 100];\n    };\n    convert.hsv.rgb = function (hsv) {\n      var h = hsv[0] / 60;\n      var s = hsv[1] / 100;\n      var v = hsv[2] / 100;\n      var hi = Math.floor(h) % 6;\n      var f = h - Math.floor(h);\n      var p = 255 * v * (1 - s);\n      var q = 255 * v * (1 - s * f);\n      var t = 255 * v * (1 - s * (1 - f));\n      v *= 255;\n      switch (hi) {\n        case 0:\n          return [v, t, p];\n        case 1:\n          return [q, v, p];\n        case 2:\n          return [p, v, t];\n        case 3:\n          return [p, q, v];\n        case 4:\n          return [t, p, v];\n        case 5:\n          return [v, p, q];\n      }\n    };\n    convert.hsv.hsl = function (hsv) {\n      var h = hsv[0];\n      var s = hsv[1] / 100;\n      var v = hsv[2] / 100;\n      var vmin = Math.max(v, 0.01);\n      var lmin;\n      var sl;\n      var l;\n      l = (2 - s) * v;\n      lmin = (2 - s) * vmin;\n      sl = s * vmin;\n      sl /= lmin <= 1 ? lmin : 2 - lmin;\n      sl = sl || 0;\n      l /= 2;\n      return [h, sl * 100, l * 100];\n    };\n\n    // http://dev.w3.org/csswg/css-color/#hwb-to-rgb\n    convert.hwb.rgb = function (hwb) {\n      var h = hwb[0] / 360;\n      var wh = hwb[1] / 100;\n      var bl = hwb[2] / 100;\n      var ratio = wh + bl;\n      var i;\n      var v;\n      var f;\n      var n;\n\n      // wh + bl cant be > 1\n      if (ratio > 1) {\n        wh /= ratio;\n        bl /= ratio;\n      }\n      i = Math.floor(6 * h);\n      v = 1 - bl;\n      f = 6 * h - i;\n      if ((i & 0x01) !== 0) {\n        f = 1 - f;\n      }\n      n = wh + f * (v - wh); // linear interpolation\n\n      var r;\n      var g;\n      var b;\n      switch (i) {\n        default:\n        case 6:\n        case 0:\n          r = v;\n          g = n;\n          b = wh;\n          break;\n        case 1:\n          r = n;\n          g = v;\n          b = wh;\n          break;\n        case 2:\n          r = wh;\n          g = v;\n          b = n;\n          break;\n        case 3:\n          r = wh;\n          g = n;\n          b = v;\n          break;\n        case 4:\n          r = n;\n          g = wh;\n          b = v;\n          break;\n        case 5:\n          r = v;\n          g = wh;\n          b = n;\n          break;\n      }\n      return [r * 255, g * 255, b * 255];\n    };\n    convert.cmyk.rgb = function (cmyk) {\n      var c = cmyk[0] / 100;\n      var m = cmyk[1] / 100;\n      var y = cmyk[2] / 100;\n      var k = cmyk[3] / 100;\n      var r;\n      var g;\n      var b;\n      r = 1 - Math.min(1, c * (1 - k) + k);\n      g = 1 - Math.min(1, m * (1 - k) + k);\n      b = 1 - Math.min(1, y * (1 - k) + k);\n      return [r * 255, g * 255, b * 255];\n    };\n    convert.xyz.rgb = function (xyz) {\n      var x = xyz[0] / 100;\n      var y = xyz[1] / 100;\n      var z = xyz[2] / 100;\n      var r;\n      var g;\n      var b;\n      r = x * 3.2406 + y * -1.5372 + z * -0.4986;\n      g = x * -0.9689 + y * 1.8758 + z * 0.0415;\n      b = x * 0.0557 + y * -0.2040 + z * 1.0570;\n\n      // assume sRGB\n      r = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r * 12.92;\n      g = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g * 12.92;\n      b = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b * 12.92;\n      r = Math.min(Math.max(0, r), 1);\n      g = Math.min(Math.max(0, g), 1);\n      b = Math.min(Math.max(0, b), 1);\n      return [r * 255, g * 255, b * 255];\n    };\n    convert.xyz.lab = function (xyz) {\n      var x = xyz[0];\n      var y = xyz[1];\n      var z = xyz[2];\n      var l;\n      var a;\n      var b;\n      x /= 95.047;\n      y /= 100;\n      z /= 108.883;\n      x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;\n      y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;\n      z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;\n      l = 116 * y - 16;\n      a = 500 * (x - y);\n      b = 200 * (y - z);\n      return [l, a, b];\n    };\n    convert.lab.xyz = function (lab) {\n      var l = lab[0];\n      var a = lab[1];\n      var b = lab[2];\n      var x;\n      var y;\n      var z;\n      y = (l + 16) / 116;\n      x = a / 500 + y;\n      z = y - b / 200;\n      var y2 = Math.pow(y, 3);\n      var x2 = Math.pow(x, 3);\n      var z2 = Math.pow(z, 3);\n      y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n      x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n      z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n      x *= 95.047;\n      y *= 100;\n      z *= 108.883;\n      return [x, y, z];\n    };\n    convert.lab.lch = function (lab) {\n      var l = lab[0];\n      var a = lab[1];\n      var b = lab[2];\n      var hr;\n      var h;\n      var c;\n      hr = Math.atan2(b, a);\n      h = hr * 360 / 2 / Math.PI;\n      if (h < 0) {\n        h += 360;\n      }\n      c = Math.sqrt(a * a + b * b);\n      return [l, c, h];\n    };\n    convert.lch.lab = function (lch) {\n      var l = lch[0];\n      var c = lch[1];\n      var h = lch[2];\n      var a;\n      var b;\n      var hr;\n      hr = h / 360 * 2 * Math.PI;\n      a = c * Math.cos(hr);\n      b = c * Math.sin(hr);\n      return [l, a, b];\n    };\n    convert.rgb.ansi16 = function (args) {\n      var r = args[0];\n      var g = args[1];\n      var b = args[2];\n      var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n      value = Math.round(value / 50);\n      if (value === 0) {\n        return 30;\n      }\n      var ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255));\n      if (value === 2) {\n        ansi += 60;\n      }\n      return ansi;\n    };\n    convert.hsv.ansi16 = function (args) {\n      // optimization here; we already know the value and don't need to get\n      // it converted for us.\n      return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n    };\n    convert.rgb.ansi256 = function (args) {\n      var r = args[0];\n      var g = args[1];\n      var b = args[2];\n\n      // we use the extended greyscale palette here, with the exception of\n      // black and white. normal palette only has 4 greyscale shades.\n      if (r === g && g === b) {\n        if (r < 8) {\n          return 16;\n        }\n        if (r > 248) {\n          return 231;\n        }\n        return Math.round((r - 8) / 247 * 24) + 232;\n      }\n      var ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5);\n      return ansi;\n    };\n    convert.ansi16.rgb = function (args) {\n      var color = args % 10;\n\n      // handle greyscale\n      if (color === 0 || color === 7) {\n        if (args > 50) {\n          color += 3.5;\n        }\n        color = color / 10.5 * 255;\n        return [color, color, color];\n      }\n      var mult = (~~(args > 50) + 1) * 0.5;\n      var r = (color & 1) * mult * 255;\n      var g = (color >> 1 & 1) * mult * 255;\n      var b = (color >> 2 & 1) * mult * 255;\n      return [r, g, b];\n    };\n    convert.ansi256.rgb = function (args) {\n      // handle greyscale\n      if (args >= 232) {\n        var c = (args - 232) * 10 + 8;\n        return [c, c, c];\n      }\n      args -= 16;\n      var rem;\n      var r = Math.floor(args / 36) / 5 * 255;\n      var g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n      var b = rem % 6 / 5 * 255;\n      return [r, g, b];\n    };\n    convert.rgb.hex = function (args) {\n      var integer = ((Math.round(args[0]) & 0xFF) << 16) + ((Math.round(args[1]) & 0xFF) << 8) + (Math.round(args[2]) & 0xFF);\n      var string = integer.toString(16).toUpperCase();\n      return '000000'.substring(string.length) + string;\n    };\n    convert.hex.rgb = function (args) {\n      var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n      if (!match) {\n        return [0, 0, 0];\n      }\n      var colorString = match[0];\n      if (match[0].length === 3) {\n        colorString = colorString.split('').map(function (char) {\n          return char + char;\n        }).join('');\n      }\n      var integer = parseInt(colorString, 16);\n      var r = integer >> 16 & 0xFF;\n      var g = integer >> 8 & 0xFF;\n      var b = integer & 0xFF;\n      return [r, g, b];\n    };\n    convert.rgb.hcg = function (rgb) {\n      var r = rgb[0] / 255;\n      var g = rgb[1] / 255;\n      var b = rgb[2] / 255;\n      var max = Math.max(Math.max(r, g), b);\n      var min = Math.min(Math.min(r, g), b);\n      var chroma = max - min;\n      var grayscale;\n      var hue;\n      if (chroma < 1) {\n        grayscale = min / (1 - chroma);\n      } else {\n        grayscale = 0;\n      }\n      if (chroma <= 0) {\n        hue = 0;\n      } else if (max === r) {\n        hue = (g - b) / chroma % 6;\n      } else if (max === g) {\n        hue = 2 + (b - r) / chroma;\n      } else {\n        hue = 4 + (r - g) / chroma + 4;\n      }\n      hue /= 6;\n      hue %= 1;\n      return [hue * 360, chroma * 100, grayscale * 100];\n    };\n    convert.hsl.hcg = function (hsl) {\n      var s = hsl[1] / 100;\n      var l = hsl[2] / 100;\n      var c = 1;\n      var f = 0;\n      if (l < 0.5) {\n        c = 2.0 * s * l;\n      } else {\n        c = 2.0 * s * (1.0 - l);\n      }\n      if (c < 1.0) {\n        f = (l - 0.5 * c) / (1.0 - c);\n      }\n      return [hsl[0], c * 100, f * 100];\n    };\n    convert.hsv.hcg = function (hsv) {\n      var s = hsv[1] / 100;\n      var v = hsv[2] / 100;\n      var c = s * v;\n      var f = 0;\n      if (c < 1.0) {\n        f = (v - c) / (1 - c);\n      }\n      return [hsv[0], c * 100, f * 100];\n    };\n    convert.hcg.rgb = function (hcg) {\n      var h = hcg[0] / 360;\n      var c = hcg[1] / 100;\n      var g = hcg[2] / 100;\n      if (c === 0.0) {\n        return [g * 255, g * 255, g * 255];\n      }\n      var pure = [0, 0, 0];\n      var hi = h % 1 * 6;\n      var v = hi % 1;\n      var w = 1 - v;\n      var mg = 0;\n      switch (Math.floor(hi)) {\n        case 0:\n          pure[0] = 1;\n          pure[1] = v;\n          pure[2] = 0;\n          break;\n        case 1:\n          pure[0] = w;\n          pure[1] = 1;\n          pure[2] = 0;\n          break;\n        case 2:\n          pure[0] = 0;\n          pure[1] = 1;\n          pure[2] = v;\n          break;\n        case 3:\n          pure[0] = 0;\n          pure[1] = w;\n          pure[2] = 1;\n          break;\n        case 4:\n          pure[0] = v;\n          pure[1] = 0;\n          pure[2] = 1;\n          break;\n        default:\n          pure[0] = 1;\n          pure[1] = 0;\n          pure[2] = w;\n      }\n      mg = (1.0 - c) * g;\n      return [(c * pure[0] + mg) * 255, (c * pure[1] + mg) * 255, (c * pure[2] + mg) * 255];\n    };\n    convert.hcg.hsv = function (hcg) {\n      var c = hcg[1] / 100;\n      var g = hcg[2] / 100;\n      var v = c + g * (1.0 - c);\n      var f = 0;\n      if (v > 0.0) {\n        f = c / v;\n      }\n      return [hcg[0], f * 100, v * 100];\n    };\n    convert.hcg.hsl = function (hcg) {\n      var c = hcg[1] / 100;\n      var g = hcg[2] / 100;\n      var l = g * (1.0 - c) + 0.5 * c;\n      var s = 0;\n      if (l > 0.0 && l < 0.5) {\n        s = c / (2 * l);\n      } else if (l >= 0.5 && l < 1.0) {\n        s = c / (2 * (1 - l));\n      }\n      return [hcg[0], s * 100, l * 100];\n    };\n    convert.hcg.hwb = function (hcg) {\n      var c = hcg[1] / 100;\n      var g = hcg[2] / 100;\n      var v = c + g * (1.0 - c);\n      return [hcg[0], (v - c) * 100, (1 - v) * 100];\n    };\n    convert.hwb.hcg = function (hwb) {\n      var w = hwb[1] / 100;\n      var b = hwb[2] / 100;\n      var v = 1 - b;\n      var c = v - w;\n      var g = 0;\n      if (c < 1) {\n        g = (v - c) / (1 - c);\n      }\n      return [hwb[0], c * 100, g * 100];\n    };\n    convert.apple.rgb = function (apple) {\n      return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255];\n    };\n    convert.rgb.apple = function (rgb) {\n      return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535];\n    };\n    convert.gray.rgb = function (args) {\n      return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n    };\n    convert.gray.hsl = convert.gray.hsv = function (args) {\n      return [0, 0, args[0]];\n    };\n    convert.gray.hwb = function (gray) {\n      return [0, 100, gray[0]];\n    };\n    convert.gray.cmyk = function (gray) {\n      return [0, 0, 0, gray[0]];\n    };\n    convert.gray.lab = function (gray) {\n      return [gray[0], 0, 0];\n    };\n    convert.gray.hex = function (gray) {\n      var val = Math.round(gray[0] / 100 * 255) & 0xFF;\n      var integer = (val << 16) + (val << 8) + val;\n      var string = integer.toString(16).toUpperCase();\n      return '000000'.substring(string.length) + string;\n    };\n    convert.rgb.gray = function (rgb) {\n      var val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n      return [val / 255 * 100];\n    };\n  });\n  var conversions_1 = conversions.rgb;\n  var conversions_2 = conversions.hsl;\n  var conversions_3 = conversions.hsv;\n  var conversions_4 = conversions.hwb;\n  var conversions_5 = conversions.cmyk;\n  var conversions_6 = conversions.xyz;\n  var conversions_7 = conversions.lab;\n  var conversions_8 = conversions.lch;\n  var conversions_9 = conversions.hex;\n  var conversions_10 = conversions.keyword;\n  var conversions_11 = conversions.ansi16;\n  var conversions_12 = conversions.ansi256;\n  var conversions_13 = conversions.hcg;\n  var conversions_14 = conversions.apple;\n  var conversions_15 = conversions.gray;\n\n  /*\n  \tthis function routes a model to all other models.\n  \n  \tall functions that are routed have a property `.conversion` attached\n  \tto the returned synthetic function. This property is an array\n  \tof strings, each with the steps in between the 'from' and 'to'\n  \tcolor models (inclusive).\n  \n  \tconversions that are not possible simply are not included.\n  */\n\n  function buildGraph() {\n    var graph = {};\n    // https://jsperf.com/object-keys-vs-for-in-with-closure/3\n    var models = Object.keys(conversions);\n    for (var len = models.length, i = 0; i < len; i++) {\n      graph[models[i]] = {\n        // http://jsperf.com/1-vs-infinity\n        // micro-opt, but this is simple.\n        distance: -1,\n        parent: null\n      };\n    }\n    return graph;\n  }\n\n  // https://en.wikipedia.org/wiki/Breadth-first_search\n  function deriveBFS(fromModel) {\n    var graph = buildGraph();\n    var queue = [fromModel]; // unshift -> queue -> pop\n\n    graph[fromModel].distance = 0;\n    while (queue.length) {\n      var current = queue.pop();\n      var adjacents = Object.keys(conversions[current]);\n      for (var len = adjacents.length, i = 0; i < len; i++) {\n        var adjacent = adjacents[i];\n        var node = graph[adjacent];\n        if (node.distance === -1) {\n          node.distance = graph[current].distance + 1;\n          node.parent = current;\n          queue.unshift(adjacent);\n        }\n      }\n    }\n    return graph;\n  }\n  function link(from, to) {\n    return function (args) {\n      return to(from(args));\n    };\n  }\n  function wrapConversion(toModel, graph) {\n    var path = [graph[toModel].parent, toModel];\n    var fn = conversions[graph[toModel].parent][toModel];\n    var cur = graph[toModel].parent;\n    while (graph[cur].parent) {\n      path.unshift(graph[cur].parent);\n      fn = link(conversions[graph[cur].parent][cur], fn);\n      cur = graph[cur].parent;\n    }\n    fn.conversion = path;\n    return fn;\n  }\n  var route = function (fromModel) {\n    var graph = deriveBFS(fromModel);\n    var conversion = {};\n    var models = Object.keys(graph);\n    for (var len = models.length, i = 0; i < len; i++) {\n      var toModel = models[i];\n      var node = graph[toModel];\n      if (node.parent === null) {\n        // no possible conversion, or this node is the source model.\n        continue;\n      }\n      conversion[toModel] = wrapConversion(toModel, graph);\n    }\n    return conversion;\n  };\n  var convert = {};\n  var models = Object.keys(conversions);\n  function wrapRaw(fn) {\n    var wrappedFn = function (args) {\n      if (args === undefined || args === null) {\n        return args;\n      }\n      if (arguments.length > 1) {\n        args = Array.prototype.slice.call(arguments);\n      }\n      return fn(args);\n    };\n\n    // preserve .conversion property if there is one\n    if ('conversion' in fn) {\n      wrappedFn.conversion = fn.conversion;\n    }\n    return wrappedFn;\n  }\n  function wrapRounded(fn) {\n    var wrappedFn = function (args) {\n      if (args === undefined || args === null) {\n        return args;\n      }\n      if (arguments.length > 1) {\n        args = Array.prototype.slice.call(arguments);\n      }\n      var result = fn(args);\n\n      // we're assuming the result is an array here.\n      // see notice in conversions.js; don't use box types\n      // in conversion functions.\n      if (typeof result === 'object') {\n        for (var len = result.length, i = 0; i < len; i++) {\n          result[i] = Math.round(result[i]);\n        }\n      }\n      return result;\n    };\n\n    // preserve .conversion property if there is one\n    if ('conversion' in fn) {\n      wrappedFn.conversion = fn.conversion;\n    }\n    return wrappedFn;\n  }\n  models.forEach(function (fromModel) {\n    convert[fromModel] = {};\n    Object.defineProperty(convert[fromModel], 'channels', {\n      value: conversions[fromModel].channels\n    });\n    Object.defineProperty(convert[fromModel], 'labels', {\n      value: conversions[fromModel].labels\n    });\n    var routes = route(fromModel);\n    var routeModels = Object.keys(routes);\n    routeModels.forEach(function (toModel) {\n      var fn = routes[toModel];\n      convert[fromModel][toModel] = wrapRounded(fn);\n      convert[fromModel][toModel].raw = wrapRaw(fn);\n    });\n  });\n  var colorConvert = convert;\n  var colorName$1 = {\n    \"aliceblue\": [240, 248, 255],\n    \"antiquewhite\": [250, 235, 215],\n    \"aqua\": [0, 255, 255],\n    \"aquamarine\": [127, 255, 212],\n    \"azure\": [240, 255, 255],\n    \"beige\": [245, 245, 220],\n    \"bisque\": [255, 228, 196],\n    \"black\": [0, 0, 0],\n    \"blanchedalmond\": [255, 235, 205],\n    \"blue\": [0, 0, 255],\n    \"blueviolet\": [138, 43, 226],\n    \"brown\": [165, 42, 42],\n    \"burlywood\": [222, 184, 135],\n    \"cadetblue\": [95, 158, 160],\n    \"chartreuse\": [127, 255, 0],\n    \"chocolate\": [210, 105, 30],\n    \"coral\": [255, 127, 80],\n    \"cornflowerblue\": [100, 149, 237],\n    \"cornsilk\": [255, 248, 220],\n    \"crimson\": [220, 20, 60],\n    \"cyan\": [0, 255, 255],\n    \"darkblue\": [0, 0, 139],\n    \"darkcyan\": [0, 139, 139],\n    \"darkgoldenrod\": [184, 134, 11],\n    \"darkgray\": [169, 169, 169],\n    \"darkgreen\": [0, 100, 0],\n    \"darkgrey\": [169, 169, 169],\n    \"darkkhaki\": [189, 183, 107],\n    \"darkmagenta\": [139, 0, 139],\n    \"darkolivegreen\": [85, 107, 47],\n    \"darkorange\": [255, 140, 0],\n    \"darkorchid\": [153, 50, 204],\n    \"darkred\": [139, 0, 0],\n    \"darksalmon\": [233, 150, 122],\n    \"darkseagreen\": [143, 188, 143],\n    \"darkslateblue\": [72, 61, 139],\n    \"darkslategray\": [47, 79, 79],\n    \"darkslategrey\": [47, 79, 79],\n    \"darkturquoise\": [0, 206, 209],\n    \"darkviolet\": [148, 0, 211],\n    \"deeppink\": [255, 20, 147],\n    \"deepskyblue\": [0, 191, 255],\n    \"dimgray\": [105, 105, 105],\n    \"dimgrey\": [105, 105, 105],\n    \"dodgerblue\": [30, 144, 255],\n    \"firebrick\": [178, 34, 34],\n    \"floralwhite\": [255, 250, 240],\n    \"forestgreen\": [34, 139, 34],\n    \"fuchsia\": [255, 0, 255],\n    \"gainsboro\": [220, 220, 220],\n    \"ghostwhite\": [248, 248, 255],\n    \"gold\": [255, 215, 0],\n    \"goldenrod\": [218, 165, 32],\n    \"gray\": [128, 128, 128],\n    \"green\": [0, 128, 0],\n    \"greenyellow\": [173, 255, 47],\n    \"grey\": [128, 128, 128],\n    \"honeydew\": [240, 255, 240],\n    \"hotpink\": [255, 105, 180],\n    \"indianred\": [205, 92, 92],\n    \"indigo\": [75, 0, 130],\n    \"ivory\": [255, 255, 240],\n    \"khaki\": [240, 230, 140],\n    \"lavender\": [230, 230, 250],\n    \"lavenderblush\": [255, 240, 245],\n    \"lawngreen\": [124, 252, 0],\n    \"lemonchiffon\": [255, 250, 205],\n    \"lightblue\": [173, 216, 230],\n    \"lightcoral\": [240, 128, 128],\n    \"lightcyan\": [224, 255, 255],\n    \"lightgoldenrodyellow\": [250, 250, 210],\n    \"lightgray\": [211, 211, 211],\n    \"lightgreen\": [144, 238, 144],\n    \"lightgrey\": [211, 211, 211],\n    \"lightpink\": [255, 182, 193],\n    \"lightsalmon\": [255, 160, 122],\n    \"lightseagreen\": [32, 178, 170],\n    \"lightskyblue\": [135, 206, 250],\n    \"lightslategray\": [119, 136, 153],\n    \"lightslategrey\": [119, 136, 153],\n    \"lightsteelblue\": [176, 196, 222],\n    \"lightyellow\": [255, 255, 224],\n    \"lime\": [0, 255, 0],\n    \"limegreen\": [50, 205, 50],\n    \"linen\": [250, 240, 230],\n    \"magenta\": [255, 0, 255],\n    \"maroon\": [128, 0, 0],\n    \"mediumaquamarine\": [102, 205, 170],\n    \"mediumblue\": [0, 0, 205],\n    \"mediumorchid\": [186, 85, 211],\n    \"mediumpurple\": [147, 112, 219],\n    \"mediumseagreen\": [60, 179, 113],\n    \"mediumslateblue\": [123, 104, 238],\n    \"mediumspringgreen\": [0, 250, 154],\n    \"mediumturquoise\": [72, 209, 204],\n    \"mediumvioletred\": [199, 21, 133],\n    \"midnightblue\": [25, 25, 112],\n    \"mintcream\": [245, 255, 250],\n    \"mistyrose\": [255, 228, 225],\n    \"moccasin\": [255, 228, 181],\n    \"navajowhite\": [255, 222, 173],\n    \"navy\": [0, 0, 128],\n    \"oldlace\": [253, 245, 230],\n    \"olive\": [128, 128, 0],\n    \"olivedrab\": [107, 142, 35],\n    \"orange\": [255, 165, 0],\n    \"orangered\": [255, 69, 0],\n    \"orchid\": [218, 112, 214],\n    \"palegoldenrod\": [238, 232, 170],\n    \"palegreen\": [152, 251, 152],\n    \"paleturquoise\": [175, 238, 238],\n    \"palevioletred\": [219, 112, 147],\n    \"papayawhip\": [255, 239, 213],\n    \"peachpuff\": [255, 218, 185],\n    \"peru\": [205, 133, 63],\n    \"pink\": [255, 192, 203],\n    \"plum\": [221, 160, 221],\n    \"powderblue\": [176, 224, 230],\n    \"purple\": [128, 0, 128],\n    \"rebeccapurple\": [102, 51, 153],\n    \"red\": [255, 0, 0],\n    \"rosybrown\": [188, 143, 143],\n    \"royalblue\": [65, 105, 225],\n    \"saddlebrown\": [139, 69, 19],\n    \"salmon\": [250, 128, 114],\n    \"sandybrown\": [244, 164, 96],\n    \"seagreen\": [46, 139, 87],\n    \"seashell\": [255, 245, 238],\n    \"sienna\": [160, 82, 45],\n    \"silver\": [192, 192, 192],\n    \"skyblue\": [135, 206, 235],\n    \"slateblue\": [106, 90, 205],\n    \"slategray\": [112, 128, 144],\n    \"slategrey\": [112, 128, 144],\n    \"snow\": [255, 250, 250],\n    \"springgreen\": [0, 255, 127],\n    \"steelblue\": [70, 130, 180],\n    \"tan\": [210, 180, 140],\n    \"teal\": [0, 128, 128],\n    \"thistle\": [216, 191, 216],\n    \"tomato\": [255, 99, 71],\n    \"turquoise\": [64, 224, 208],\n    \"violet\": [238, 130, 238],\n    \"wheat\": [245, 222, 179],\n    \"white\": [255, 255, 255],\n    \"whitesmoke\": [245, 245, 245],\n    \"yellow\": [255, 255, 0],\n    \"yellowgreen\": [154, 205, 50]\n  };\n\n  /* MIT license */\n\n  var colorString = {\n    getRgba: getRgba,\n    getHsla: getHsla,\n    getRgb: getRgb,\n    getHsl: getHsl,\n    getHwb: getHwb,\n    getAlpha: getAlpha,\n    hexString: hexString,\n    rgbString: rgbString,\n    rgbaString: rgbaString,\n    percentString: percentString,\n    percentaString: percentaString,\n    hslString: hslString,\n    hslaString: hslaString,\n    hwbString: hwbString,\n    keyword: keyword\n  };\n  function getRgba(string) {\n    if (!string) {\n      return;\n    }\n    var abbr = /^#([a-fA-F0-9]{3,4})$/i,\n      hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n      rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n      per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n      keyword = /(\\w+)/;\n    var rgb = [0, 0, 0],\n      a = 1,\n      match = string.match(abbr),\n      hexAlpha = \"\";\n    if (match) {\n      match = match[1];\n      hexAlpha = match[3];\n      for (var i = 0; i < rgb.length; i++) {\n        rgb[i] = parseInt(match[i] + match[i], 16);\n      }\n      if (hexAlpha) {\n        a = Math.round(parseInt(hexAlpha + hexAlpha, 16) / 255 * 100) / 100;\n      }\n    } else if (match = string.match(hex)) {\n      hexAlpha = match[2];\n      match = match[1];\n      for (var i = 0; i < rgb.length; i++) {\n        rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n      }\n      if (hexAlpha) {\n        a = Math.round(parseInt(hexAlpha, 16) / 255 * 100) / 100;\n      }\n    } else if (match = string.match(rgba)) {\n      for (var i = 0; i < rgb.length; i++) {\n        rgb[i] = parseInt(match[i + 1]);\n      }\n      a = parseFloat(match[4]);\n    } else if (match = string.match(per)) {\n      for (var i = 0; i < rgb.length; i++) {\n        rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n      }\n      a = parseFloat(match[4]);\n    } else if (match = string.match(keyword)) {\n      if (match[1] == \"transparent\") {\n        return [0, 0, 0, 0];\n      }\n      rgb = colorName$1[match[1]];\n      if (!rgb) {\n        return;\n      }\n    }\n    for (var i = 0; i < rgb.length; i++) {\n      rgb[i] = scale(rgb[i], 0, 255);\n    }\n    if (!a && a != 0) {\n      a = 1;\n    } else {\n      a = scale(a, 0, 1);\n    }\n    rgb[3] = a;\n    return rgb;\n  }\n  function getHsla(string) {\n    if (!string) {\n      return;\n    }\n    var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n    var match = string.match(hsl);\n    if (match) {\n      var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n        s = scale(parseFloat(match[2]), 0, 100),\n        l = scale(parseFloat(match[3]), 0, 100),\n        a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, s, l, a];\n    }\n  }\n  function getHwb(string) {\n    if (!string) {\n      return;\n    }\n    var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n    var match = string.match(hwb);\n    if (match) {\n      var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n        w = scale(parseFloat(match[2]), 0, 100),\n        b = scale(parseFloat(match[3]), 0, 100),\n        a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, w, b, a];\n    }\n  }\n  function getRgb(string) {\n    var rgba = getRgba(string);\n    return rgba && rgba.slice(0, 3);\n  }\n  function getHsl(string) {\n    var hsla = getHsla(string);\n    return hsla && hsla.slice(0, 3);\n  }\n  function getAlpha(string) {\n    var vals = getRgba(string);\n    if (vals) {\n      return vals[3];\n    } else if (vals = getHsla(string)) {\n      return vals[3];\n    } else if (vals = getHwb(string)) {\n      return vals[3];\n    }\n  }\n\n  // generators\n  function hexString(rgba, a) {\n    var a = a !== undefined && rgba.length === 3 ? a : rgba[3];\n    return \"#\" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (a >= 0 && a < 1 ? hexDouble(Math.round(a * 255)) : \"\");\n  }\n  function rgbString(rgba, alpha) {\n    if (alpha < 1 || rgba[3] && rgba[3] < 1) {\n      return rgbaString(rgba, alpha);\n    }\n    return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n  }\n  function rgbaString(rgba, alpha) {\n    if (alpha === undefined) {\n      alpha = rgba[3] !== undefined ? rgba[3] : 1;\n    }\n    return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \", \" + alpha + \")\";\n  }\n  function percentString(rgba, alpha) {\n    if (alpha < 1 || rgba[3] && rgba[3] < 1) {\n      return percentaString(rgba, alpha);\n    }\n    var r = Math.round(rgba[0] / 255 * 100),\n      g = Math.round(rgba[1] / 255 * 100),\n      b = Math.round(rgba[2] / 255 * 100);\n    return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n  }\n  function percentaString(rgba, alpha) {\n    var r = Math.round(rgba[0] / 255 * 100),\n      g = Math.round(rgba[1] / 255 * 100),\n      b = Math.round(rgba[2] / 255 * 100);\n    return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n  }\n  function hslString(hsla, alpha) {\n    if (alpha < 1 || hsla[3] && hsla[3] < 1) {\n      return hslaString(hsla, alpha);\n    }\n    return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n  }\n  function hslaString(hsla, alpha) {\n    if (alpha === undefined) {\n      alpha = hsla[3] !== undefined ? hsla[3] : 1;\n    }\n    return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \" + alpha + \")\";\n  }\n\n  // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n  // (hwb have alpha optional & 1 is default value)\n  function hwbString(hwb, alpha) {\n    if (alpha === undefined) {\n      alpha = hwb[3] !== undefined ? hwb[3] : 1;\n    }\n    return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\" + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n  }\n  function keyword(rgb) {\n    return reverseNames[rgb.slice(0, 3)];\n  }\n\n  // helpers\n  function scale(num, min, max) {\n    return Math.min(Math.max(min, num), max);\n  }\n  function hexDouble(num) {\n    var str = num.toString(16).toUpperCase();\n    return str.length < 2 ? \"0\" + str : str;\n  }\n\n  //create a list of reverse color names\n  var reverseNames = {};\n  for (var name in colorName$1) {\n    reverseNames[colorName$1[name]] = name;\n  }\n\n  /* MIT license */\n\n  var Color = function (obj) {\n    if (obj instanceof Color) {\n      return obj;\n    }\n    if (!(this instanceof Color)) {\n      return new Color(obj);\n    }\n    this.valid = false;\n    this.values = {\n      rgb: [0, 0, 0],\n      hsl: [0, 0, 0],\n      hsv: [0, 0, 0],\n      hwb: [0, 0, 0],\n      cmyk: [0, 0, 0, 0],\n      alpha: 1\n    };\n\n    // parse Color() argument\n    var vals;\n    if (typeof obj === 'string') {\n      vals = colorString.getRgba(obj);\n      if (vals) {\n        this.setValues('rgb', vals);\n      } else if (vals = colorString.getHsla(obj)) {\n        this.setValues('hsl', vals);\n      } else if (vals = colorString.getHwb(obj)) {\n        this.setValues('hwb', vals);\n      }\n    } else if (typeof obj === 'object') {\n      vals = obj;\n      if (vals.r !== undefined || vals.red !== undefined) {\n        this.setValues('rgb', vals);\n      } else if (vals.l !== undefined || vals.lightness !== undefined) {\n        this.setValues('hsl', vals);\n      } else if (vals.v !== undefined || vals.value !== undefined) {\n        this.setValues('hsv', vals);\n      } else if (vals.w !== undefined || vals.whiteness !== undefined) {\n        this.setValues('hwb', vals);\n      } else if (vals.c !== undefined || vals.cyan !== undefined) {\n        this.setValues('cmyk', vals);\n      }\n    }\n  };\n  Color.prototype = {\n    isValid: function () {\n      return this.valid;\n    },\n    rgb: function () {\n      return this.setSpace('rgb', arguments);\n    },\n    hsl: function () {\n      return this.setSpace('hsl', arguments);\n    },\n    hsv: function () {\n      return this.setSpace('hsv', arguments);\n    },\n    hwb: function () {\n      return this.setSpace('hwb', arguments);\n    },\n    cmyk: function () {\n      return this.setSpace('cmyk', arguments);\n    },\n    rgbArray: function () {\n      return this.values.rgb;\n    },\n    hslArray: function () {\n      return this.values.hsl;\n    },\n    hsvArray: function () {\n      return this.values.hsv;\n    },\n    hwbArray: function () {\n      var values = this.values;\n      if (values.alpha !== 1) {\n        return values.hwb.concat([values.alpha]);\n      }\n      return values.hwb;\n    },\n    cmykArray: function () {\n      return this.values.cmyk;\n    },\n    rgbaArray: function () {\n      var values = this.values;\n      return values.rgb.concat([values.alpha]);\n    },\n    hslaArray: function () {\n      var values = this.values;\n      return values.hsl.concat([values.alpha]);\n    },\n    alpha: function (val) {\n      if (val === undefined) {\n        return this.values.alpha;\n      }\n      this.setValues('alpha', val);\n      return this;\n    },\n    red: function (val) {\n      return this.setChannel('rgb', 0, val);\n    },\n    green: function (val) {\n      return this.setChannel('rgb', 1, val);\n    },\n    blue: function (val) {\n      return this.setChannel('rgb', 2, val);\n    },\n    hue: function (val) {\n      if (val) {\n        val %= 360;\n        val = val < 0 ? 360 + val : val;\n      }\n      return this.setChannel('hsl', 0, val);\n    },\n    saturation: function (val) {\n      return this.setChannel('hsl', 1, val);\n    },\n    lightness: function (val) {\n      return this.setChannel('hsl', 2, val);\n    },\n    saturationv: function (val) {\n      return this.setChannel('hsv', 1, val);\n    },\n    whiteness: function (val) {\n      return this.setChannel('hwb', 1, val);\n    },\n    blackness: function (val) {\n      return this.setChannel('hwb', 2, val);\n    },\n    value: function (val) {\n      return this.setChannel('hsv', 2, val);\n    },\n    cyan: function (val) {\n      return this.setChannel('cmyk', 0, val);\n    },\n    magenta: function (val) {\n      return this.setChannel('cmyk', 1, val);\n    },\n    yellow: function (val) {\n      return this.setChannel('cmyk', 2, val);\n    },\n    black: function (val) {\n      return this.setChannel('cmyk', 3, val);\n    },\n    hexString: function () {\n      return colorString.hexString(this.values.rgb);\n    },\n    rgbString: function () {\n      return colorString.rgbString(this.values.rgb, this.values.alpha);\n    },\n    rgbaString: function () {\n      return colorString.rgbaString(this.values.rgb, this.values.alpha);\n    },\n    percentString: function () {\n      return colorString.percentString(this.values.rgb, this.values.alpha);\n    },\n    hslString: function () {\n      return colorString.hslString(this.values.hsl, this.values.alpha);\n    },\n    hslaString: function () {\n      return colorString.hslaString(this.values.hsl, this.values.alpha);\n    },\n    hwbString: function () {\n      return colorString.hwbString(this.values.hwb, this.values.alpha);\n    },\n    keyword: function () {\n      return colorString.keyword(this.values.rgb, this.values.alpha);\n    },\n    rgbNumber: function () {\n      var rgb = this.values.rgb;\n      return rgb[0] << 16 | rgb[1] << 8 | rgb[2];\n    },\n    luminosity: function () {\n      // http://www.w3.org/TR/WCAG20/#relativeluminancedef\n      var rgb = this.values.rgb;\n      var lum = [];\n      for (var i = 0; i < rgb.length; i++) {\n        var chan = rgb[i] / 255;\n        lum[i] = chan <= 0.03928 ? chan / 12.92 : Math.pow((chan + 0.055) / 1.055, 2.4);\n      }\n      return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n    },\n    contrast: function (color2) {\n      // http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n      var lum1 = this.luminosity();\n      var lum2 = color2.luminosity();\n      if (lum1 > lum2) {\n        return (lum1 + 0.05) / (lum2 + 0.05);\n      }\n      return (lum2 + 0.05) / (lum1 + 0.05);\n    },\n    level: function (color2) {\n      var contrastRatio = this.contrast(color2);\n      if (contrastRatio >= 7.1) {\n        return 'AAA';\n      }\n      return contrastRatio >= 4.5 ? 'AA' : '';\n    },\n    dark: function () {\n      // YIQ equation from http://24ways.org/2010/calculating-color-contrast\n      var rgb = this.values.rgb;\n      var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n      return yiq < 128;\n    },\n    light: function () {\n      return !this.dark();\n    },\n    negate: function () {\n      var rgb = [];\n      for (var i = 0; i < 3; i++) {\n        rgb[i] = 255 - this.values.rgb[i];\n      }\n      this.setValues('rgb', rgb);\n      return this;\n    },\n    lighten: function (ratio) {\n      var hsl = this.values.hsl;\n      hsl[2] += hsl[2] * ratio;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n    darken: function (ratio) {\n      var hsl = this.values.hsl;\n      hsl[2] -= hsl[2] * ratio;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n    saturate: function (ratio) {\n      var hsl = this.values.hsl;\n      hsl[1] += hsl[1] * ratio;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n    desaturate: function (ratio) {\n      var hsl = this.values.hsl;\n      hsl[1] -= hsl[1] * ratio;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n    whiten: function (ratio) {\n      var hwb = this.values.hwb;\n      hwb[1] += hwb[1] * ratio;\n      this.setValues('hwb', hwb);\n      return this;\n    },\n    blacken: function (ratio) {\n      var hwb = this.values.hwb;\n      hwb[2] += hwb[2] * ratio;\n      this.setValues('hwb', hwb);\n      return this;\n    },\n    greyscale: function () {\n      var rgb = this.values.rgb;\n      // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n      var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n      this.setValues('rgb', [val, val, val]);\n      return this;\n    },\n    clearer: function (ratio) {\n      var alpha = this.values.alpha;\n      this.setValues('alpha', alpha - alpha * ratio);\n      return this;\n    },\n    opaquer: function (ratio) {\n      var alpha = this.values.alpha;\n      this.setValues('alpha', alpha + alpha * ratio);\n      return this;\n    },\n    rotate: function (degrees) {\n      var hsl = this.values.hsl;\n      var hue = (hsl[0] + degrees) % 360;\n      hsl[0] = hue < 0 ? 360 + hue : hue;\n      this.setValues('hsl', hsl);\n      return this;\n    },\n    /**\n     * Ported from sass implementation in C\n     * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n     */\n    mix: function (mixinColor, weight) {\n      var color1 = this;\n      var color2 = mixinColor;\n      var p = weight === undefined ? 0.5 : weight;\n      var w = 2 * p - 1;\n      var a = color1.alpha() - color2.alpha();\n      var w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      var w2 = 1 - w1;\n      return this.rgb(w1 * color1.red() + w2 * color2.red(), w1 * color1.green() + w2 * color2.green(), w1 * color1.blue() + w2 * color2.blue()).alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n    },\n    toJSON: function () {\n      return this.rgb();\n    },\n    clone: function () {\n      // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n      // making the final build way to big to embed in Chart.js. So let's do it manually,\n      // assuming that values to clone are 1 dimension arrays containing only numbers,\n      // except 'alpha' which is a number.\n      var result = new Color();\n      var source = this.values;\n      var target = result.values;\n      var value, type;\n      for (var prop in source) {\n        if (source.hasOwnProperty(prop)) {\n          value = source[prop];\n          type = {}.toString.call(value);\n          if (type === '[object Array]') {\n            target[prop] = value.slice(0);\n          } else if (type === '[object Number]') {\n            target[prop] = value;\n          } else {\n            console.error('unexpected color value:', value);\n          }\n        }\n      }\n      return result;\n    }\n  };\n  Color.prototype.spaces = {\n    rgb: ['red', 'green', 'blue'],\n    hsl: ['hue', 'saturation', 'lightness'],\n    hsv: ['hue', 'saturation', 'value'],\n    hwb: ['hue', 'whiteness', 'blackness'],\n    cmyk: ['cyan', 'magenta', 'yellow', 'black']\n  };\n  Color.prototype.maxes = {\n    rgb: [255, 255, 255],\n    hsl: [360, 100, 100],\n    hsv: [360, 100, 100],\n    hwb: [360, 100, 100],\n    cmyk: [100, 100, 100, 100]\n  };\n  Color.prototype.getValues = function (space) {\n    var values = this.values;\n    var vals = {};\n    for (var i = 0; i < space.length; i++) {\n      vals[space.charAt(i)] = values[space][i];\n    }\n    if (values.alpha !== 1) {\n      vals.a = values.alpha;\n    }\n\n    // {r: 255, g: 255, b: 255, a: 0.4}\n    return vals;\n  };\n  Color.prototype.setValues = function (space, vals) {\n    var values = this.values;\n    var spaces = this.spaces;\n    var maxes = this.maxes;\n    var alpha = 1;\n    var i;\n    this.valid = true;\n    if (space === 'alpha') {\n      alpha = vals;\n    } else if (vals.length) {\n      // [10, 10, 10]\n      values[space] = vals.slice(0, space.length);\n      alpha = vals[space.length];\n    } else if (vals[space.charAt(0)] !== undefined) {\n      // {r: 10, g: 10, b: 10}\n      for (i = 0; i < space.length; i++) {\n        values[space][i] = vals[space.charAt(i)];\n      }\n      alpha = vals.a;\n    } else if (vals[spaces[space][0]] !== undefined) {\n      // {red: 10, green: 10, blue: 10}\n      var chans = spaces[space];\n      for (i = 0; i < space.length; i++) {\n        values[space][i] = vals[chans[i]];\n      }\n      alpha = vals.alpha;\n    }\n    values.alpha = Math.max(0, Math.min(1, alpha === undefined ? values.alpha : alpha));\n    if (space === 'alpha') {\n      return false;\n    }\n    var capped;\n\n    // cap values of the space prior converting all values\n    for (i = 0; i < space.length; i++) {\n      capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n      values[space][i] = Math.round(capped);\n    }\n\n    // convert to all the other color spaces\n    for (var sname in spaces) {\n      if (sname !== space) {\n        values[sname] = colorConvert[space][sname](values[space]);\n      }\n    }\n    return true;\n  };\n  Color.prototype.setSpace = function (space, args) {\n    var vals = args[0];\n    if (vals === undefined) {\n      // color.rgb()\n      return this.getValues(space);\n    }\n\n    // color.rgb(10, 10, 10)\n    if (typeof vals === 'number') {\n      vals = Array.prototype.slice.call(args);\n    }\n    this.setValues(space, vals);\n    return this;\n  };\n  Color.prototype.setChannel = function (space, index, val) {\n    var svalues = this.values[space];\n    if (val === undefined) {\n      // color.red()\n      return svalues[index];\n    } else if (val === svalues[index]) {\n      // color.red(color.red())\n      return this;\n    }\n\n    // color.red(100)\n    svalues[index] = val;\n    this.setValues(space, svalues);\n    return this;\n  };\n  if (typeof window !== 'undefined') {\n    window.Color = Color;\n  }\n  var chartjsColor = Color;\n  function isValidKey(key) {\n    return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n  }\n\n  /**\r\n   * @namespace Chart.helpers\r\n   */\n  var helpers = {\n    /**\r\n     * An empty function that can be used, for example, for optional callback.\r\n     */\n    noop: function () {},\n    /**\r\n     * Returns a unique id, sequentially generated from a global variable.\r\n     * @returns {number}\r\n     * @function\r\n     */\n    uid: function () {\n      var id = 0;\n      return function () {\n        return id++;\n      };\n    }(),\n    /**\r\n     * Returns true if `value` is neither null nor undefined, else returns false.\r\n     * @param {*} value - The value to test.\r\n     * @returns {boolean}\r\n     * @since 2.7.0\r\n     */\n    isNullOrUndef: function (value) {\n      return value === null || typeof value === 'undefined';\n    },\n    /**\r\n     * Returns true if `value` is an array (including typed arrays), else returns false.\r\n     * @param {*} value - The value to test.\r\n     * @returns {boolean}\r\n     * @function\r\n     */\n    isArray: function (value) {\n      if (Array.isArray && Array.isArray(value)) {\n        return true;\n      }\n      var type = Object.prototype.toString.call(value);\n      if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n        return true;\n      }\n      return false;\n    },\n    /**\r\n     * Returns true if `value` is an object (excluding null), else returns false.\r\n     * @param {*} value - The value to test.\r\n     * @returns {boolean}\r\n     * @since 2.7.0\r\n     */\n    isObject: function (value) {\n      return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n    },\n    /**\r\n     * Returns true if `value` is a finite number, else returns false\r\n     * @param {*} value  - The value to test.\r\n     * @returns {boolean}\r\n     */\n    isFinite: function (value) {\n      return (typeof value === 'number' || value instanceof Number) && isFinite(value);\n    },\n    /**\r\n     * Returns `value` if defined, else returns `defaultValue`.\r\n     * @param {*} value - The value to return if defined.\r\n     * @param {*} defaultValue - The value to return if `value` is undefined.\r\n     * @returns {*}\r\n     */\n    valueOrDefault: function (value, defaultValue) {\n      return typeof value === 'undefined' ? defaultValue : value;\n    },\n    /**\r\n     * Returns value at the given `index` in array if defined, else returns `defaultValue`.\r\n     * @param {Array} value - The array to lookup for value at `index`.\r\n     * @param {number} index - The index in `value` to lookup for value.\r\n     * @param {*} defaultValue - The value to return if `value[index]` is undefined.\r\n     * @returns {*}\r\n     */\n    valueAtIndexOrDefault: function (value, index, defaultValue) {\n      return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n    },\n    /**\r\n     * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\r\n     * value returned by `fn`. If `fn` is not a function, this method returns undefined.\r\n     * @param {function} fn - The function to call.\r\n     * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\r\n     * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n     * @returns {*}\r\n     */\n    callback: function (fn, args, thisArg) {\n      if (fn && typeof fn.call === 'function') {\n        return fn.apply(thisArg, args);\n      }\n    },\n    /**\r\n     * Note(SB) for performance sake, this method should only be used when loopable type\r\n     * is unknown or in none intensive code (not called often and small loopable). Else\r\n     * it's preferable to use a regular for() loop and save extra function calls.\r\n     * @param {object|Array} loopable - The object or array to be iterated.\r\n     * @param {function} fn - The function to call for each item.\r\n     * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n     * @param {boolean} [reverse] - If true, iterates backward on the loopable.\r\n     */\n    each: function (loopable, fn, thisArg, reverse) {\n      var i, len, keys;\n      if (helpers.isArray(loopable)) {\n        len = loopable.length;\n        if (reverse) {\n          for (i = len - 1; i >= 0; i--) {\n            fn.call(thisArg, loopable[i], i);\n          }\n        } else {\n          for (i = 0; i < len; i++) {\n            fn.call(thisArg, loopable[i], i);\n          }\n        }\n      } else if (helpers.isObject(loopable)) {\n        keys = Object.keys(loopable);\n        len = keys.length;\n        for (i = 0; i < len; i++) {\n          fn.call(thisArg, loopable[keys[i]], keys[i]);\n        }\n      }\n    },\n    /**\r\n     * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\r\n     * @see https://stackoverflow.com/a/14853974\r\n     * @param {Array} a0 - The array to compare\r\n     * @param {Array} a1 - The array to compare\r\n     * @returns {boolean}\r\n     */\n    arrayEquals: function (a0, a1) {\n      var i, ilen, v0, v1;\n      if (!a0 || !a1 || a0.length !== a1.length) {\n        return false;\n      }\n      for (i = 0, ilen = a0.length; i < ilen; ++i) {\n        v0 = a0[i];\n        v1 = a1[i];\n        if (v0 instanceof Array && v1 instanceof Array) {\n          if (!helpers.arrayEquals(v0, v1)) {\n            return false;\n          }\n        } else if (v0 !== v1) {\n          // NOTE: two different object instances will never be equal: {x:20} != {x:20}\n          return false;\n        }\n      }\n      return true;\n    },\n    /**\r\n     * Returns a deep copy of `source` without keeping references on objects and arrays.\r\n     * @param {*} source - The value to clone.\r\n     * @returns {*}\r\n     */\n    clone: function (source) {\n      if (helpers.isArray(source)) {\n        return source.map(helpers.clone);\n      }\n      if (helpers.isObject(source)) {\n        var target = Object.create(source);\n        var keys = Object.keys(source);\n        var klen = keys.length;\n        var k = 0;\n        for (; k < klen; ++k) {\n          target[keys[k]] = helpers.clone(source[keys[k]]);\n        }\n        return target;\n      }\n      return source;\n    },\n    /**\r\n     * The default merger when Chart.helpers.merge is called without merger option.\r\n     * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\r\n     * @private\r\n     */\n    _merger: function (key, target, source, options) {\n      if (!isValidKey(key)) {\n        // We want to ensure we do not copy prototypes over\n        // as this can pollute global namespaces\n        return;\n      }\n      var tval = target[key];\n      var sval = source[key];\n      if (helpers.isObject(tval) && helpers.isObject(sval)) {\n        helpers.merge(tval, sval, options);\n      } else {\n        target[key] = helpers.clone(sval);\n      }\n    },\n    /**\r\n     * Merges source[key] in target[key] only if target[key] is undefined.\r\n     * @private\r\n     */\n    _mergerIf: function (key, target, source) {\n      if (!isValidKey(key)) {\n        // We want to ensure we do not copy prototypes over\n        // as this can pollute global namespaces\n        return;\n      }\n      var tval = target[key];\n      var sval = source[key];\n      if (helpers.isObject(tval) && helpers.isObject(sval)) {\n        helpers.mergeIf(tval, sval);\n      } else if (!target.hasOwnProperty(key)) {\n        target[key] = helpers.clone(sval);\n      }\n    },\n    /**\r\n     * Recursively deep copies `source` properties into `target` with the given `options`.\r\n     * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n     * @param {object} target - The target object in which all sources are merged into.\r\n     * @param {object|object[]} source - Object(s) to merge into `target`.\r\n     * @param {object} [options] - Merging options:\r\n     * @param {function} [options.merger] - The merge method (key, target, source, options)\r\n     * @returns {object} The `target` object.\r\n     */\n    merge: function (target, source, options) {\n      var sources = helpers.isArray(source) ? source : [source];\n      var ilen = sources.length;\n      var merge, i, keys, klen, k;\n      if (!helpers.isObject(target)) {\n        return target;\n      }\n      options = options || {};\n      merge = options.merger || helpers._merger;\n      for (i = 0; i < ilen; ++i) {\n        source = sources[i];\n        if (!helpers.isObject(source)) {\n          continue;\n        }\n        keys = Object.keys(source);\n        for (k = 0, klen = keys.length; k < klen; ++k) {\n          merge(keys[k], target, source, options);\n        }\n      }\n      return target;\n    },\n    /**\r\n     * Recursively deep copies `source` properties into `target` *only* if not defined in target.\r\n     * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n     * @param {object} target - The target object in which all sources are merged into.\r\n     * @param {object|object[]} source - Object(s) to merge into `target`.\r\n     * @returns {object} The `target` object.\r\n     */\n    mergeIf: function (target, source) {\n      return helpers.merge(target, source, {\n        merger: helpers._mergerIf\n      });\n    },\n    /**\r\n     * Applies the contents of two or more objects together into the first object.\r\n     * @param {object} target - The target object in which all objects are merged into.\r\n     * @param {object} arg1 - Object containing additional properties to merge in target.\r\n     * @param {object} argN - Additional objects containing properties to merge in target.\r\n     * @returns {object} The `target` object.\r\n     */\n    extend: Object.assign || function (target) {\n      return helpers.merge(target, [].slice.call(arguments, 1), {\n        merger: function (key, dst, src) {\n          dst[key] = src[key];\n        }\n      });\n    },\n    /**\r\n     * Basic javascript inheritance based on the model created in Backbone.js\r\n     */\n    inherits: function (extensions) {\n      var me = this;\n      var ChartElement = extensions && extensions.hasOwnProperty('constructor') ? extensions.constructor : function () {\n        return me.apply(this, arguments);\n      };\n      var Surrogate = function () {\n        this.constructor = ChartElement;\n      };\n      Surrogate.prototype = me.prototype;\n      ChartElement.prototype = new Surrogate();\n      ChartElement.extend = helpers.inherits;\n      if (extensions) {\n        helpers.extend(ChartElement.prototype, extensions);\n      }\n      ChartElement.__super__ = me.prototype;\n      return ChartElement;\n    },\n    _deprecated: function (scope, value, previous, current) {\n      if (value !== undefined) {\n        console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n      }\n    }\n  };\n  var helpers_core = helpers;\n\n  // DEPRECATIONS\n\n  /**\r\n   * Provided for backward compatibility, use Chart.helpers.callback instead.\r\n   * @function Chart.helpers.callCallback\r\n   * @deprecated since version 2.6.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers.callCallback = helpers.callback;\n\n  /**\r\n   * Provided for backward compatibility, use Array.prototype.indexOf instead.\r\n   * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\r\n   * @function Chart.helpers.indexOf\r\n   * @deprecated since version 2.7.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers.indexOf = function (array, item, fromIndex) {\n    return Array.prototype.indexOf.call(array, item, fromIndex);\n  };\n\n  /**\r\n   * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\r\n   * @function Chart.helpers.getValueOrDefault\r\n   * @deprecated since version 2.7.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers.getValueOrDefault = helpers.valueOrDefault;\n\n  /**\r\n   * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\r\n   * @function Chart.helpers.getValueAtIndexOrDefault\r\n   * @deprecated since version 2.7.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n  /**\r\n   * Easing functions adapted from Robert Penner's easing equations.\r\n   * @namespace Chart.helpers.easingEffects\r\n   * @see http://www.robertpenner.com/easing/\r\n   */\n  var effects = {\n    linear: function (t) {\n      return t;\n    },\n    easeInQuad: function (t) {\n      return t * t;\n    },\n    easeOutQuad: function (t) {\n      return -t * (t - 2);\n    },\n    easeInOutQuad: function (t) {\n      if ((t /= 0.5) < 1) {\n        return 0.5 * t * t;\n      }\n      return -0.5 * (--t * (t - 2) - 1);\n    },\n    easeInCubic: function (t) {\n      return t * t * t;\n    },\n    easeOutCubic: function (t) {\n      return (t = t - 1) * t * t + 1;\n    },\n    easeInOutCubic: function (t) {\n      if ((t /= 0.5) < 1) {\n        return 0.5 * t * t * t;\n      }\n      return 0.5 * ((t -= 2) * t * t + 2);\n    },\n    easeInQuart: function (t) {\n      return t * t * t * t;\n    },\n    easeOutQuart: function (t) {\n      return -((t = t - 1) * t * t * t - 1);\n    },\n    easeInOutQuart: function (t) {\n      if ((t /= 0.5) < 1) {\n        return 0.5 * t * t * t * t;\n      }\n      return -0.5 * ((t -= 2) * t * t * t - 2);\n    },\n    easeInQuint: function (t) {\n      return t * t * t * t * t;\n    },\n    easeOutQuint: function (t) {\n      return (t = t - 1) * t * t * t * t + 1;\n    },\n    easeInOutQuint: function (t) {\n      if ((t /= 0.5) < 1) {\n        return 0.5 * t * t * t * t * t;\n      }\n      return 0.5 * ((t -= 2) * t * t * t * t + 2);\n    },\n    easeInSine: function (t) {\n      return -Math.cos(t * (Math.PI / 2)) + 1;\n    },\n    easeOutSine: function (t) {\n      return Math.sin(t * (Math.PI / 2));\n    },\n    easeInOutSine: function (t) {\n      return -0.5 * (Math.cos(Math.PI * t) - 1);\n    },\n    easeInExpo: function (t) {\n      return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n    },\n    easeOutExpo: function (t) {\n      return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;\n    },\n    easeInOutExpo: function (t) {\n      if (t === 0) {\n        return 0;\n      }\n      if (t === 1) {\n        return 1;\n      }\n      if ((t /= 0.5) < 1) {\n        return 0.5 * Math.pow(2, 10 * (t - 1));\n      }\n      return 0.5 * (-Math.pow(2, -10 * --t) + 2);\n    },\n    easeInCirc: function (t) {\n      if (t >= 1) {\n        return t;\n      }\n      return -(Math.sqrt(1 - t * t) - 1);\n    },\n    easeOutCirc: function (t) {\n      return Math.sqrt(1 - (t = t - 1) * t);\n    },\n    easeInOutCirc: function (t) {\n      if ((t /= 0.5) < 1) {\n        return -0.5 * (Math.sqrt(1 - t * t) - 1);\n      }\n      return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n    },\n    easeInElastic: function (t) {\n      var s = 1.70158;\n      var p = 0;\n      var a = 1;\n      if (t === 0) {\n        return 0;\n      }\n      if (t === 1) {\n        return 1;\n      }\n      if (!p) {\n        p = 0.3;\n      }\n      if (a < 1) {\n        a = 1;\n        s = p / 4;\n      } else {\n        s = p / (2 * Math.PI) * Math.asin(1 / a);\n      }\n      return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n    },\n    easeOutElastic: function (t) {\n      var s = 1.70158;\n      var p = 0;\n      var a = 1;\n      if (t === 0) {\n        return 0;\n      }\n      if (t === 1) {\n        return 1;\n      }\n      if (!p) {\n        p = 0.3;\n      }\n      if (a < 1) {\n        a = 1;\n        s = p / 4;\n      } else {\n        s = p / (2 * Math.PI) * Math.asin(1 / a);\n      }\n      return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n    },\n    easeInOutElastic: function (t) {\n      var s = 1.70158;\n      var p = 0;\n      var a = 1;\n      if (t === 0) {\n        return 0;\n      }\n      if ((t /= 0.5) === 2) {\n        return 1;\n      }\n      if (!p) {\n        p = 0.45;\n      }\n      if (a < 1) {\n        a = 1;\n        s = p / 4;\n      } else {\n        s = p / (2 * Math.PI) * Math.asin(1 / a);\n      }\n      if (t < 1) {\n        return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n      }\n      return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n    },\n    easeInBack: function (t) {\n      var s = 1.70158;\n      return t * t * ((s + 1) * t - s);\n    },\n    easeOutBack: function (t) {\n      var s = 1.70158;\n      return (t = t - 1) * t * ((s + 1) * t + s) + 1;\n    },\n    easeInOutBack: function (t) {\n      var s = 1.70158;\n      if ((t /= 0.5) < 1) {\n        return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n      }\n      return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n    },\n    easeInBounce: function (t) {\n      return 1 - effects.easeOutBounce(1 - t);\n    },\n    easeOutBounce: function (t) {\n      if (t < 1 / 2.75) {\n        return 7.5625 * t * t;\n      }\n      if (t < 2 / 2.75) {\n        return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n      }\n      if (t < 2.5 / 2.75) {\n        return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n      }\n      return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n    },\n    easeInOutBounce: function (t) {\n      if (t < 0.5) {\n        return effects.easeInBounce(t * 2) * 0.5;\n      }\n      return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n    }\n  };\n  var helpers_easing = {\n    effects: effects\n  };\n\n  // DEPRECATIONS\n\n  /**\r\n   * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\r\n   * @function Chart.helpers.easingEffects\r\n   * @deprecated since version 2.7.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers_core.easingEffects = effects;\n  var PI = Math.PI;\n  var RAD_PER_DEG = PI / 180;\n  var DOUBLE_PI = PI * 2;\n  var HALF_PI = PI / 2;\n  var QUARTER_PI = PI / 4;\n  var TWO_THIRDS_PI = PI * 2 / 3;\n\n  /**\r\n   * @namespace Chart.helpers.canvas\r\n   */\n  var exports$1 = {\n    /**\r\n     * Clears the entire canvas associated to the given `chart`.\r\n     * @param {Chart} chart - The chart for which to clear the canvas.\r\n     */\n    clear: function (chart) {\n      chart.ctx.clearRect(0, 0, chart.width, chart.height);\n    },\n    /**\r\n     * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\r\n     * given size (width, height) and the same `radius` for all corners.\r\n     * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\r\n     * @param {number} x - The x axis of the coordinate for the rectangle starting point.\r\n     * @param {number} y - The y axis of the coordinate for the rectangle starting point.\r\n     * @param {number} width - The rectangle's width.\r\n     * @param {number} height - The rectangle's height.\r\n     * @param {number} radius - The rounded amount (in pixels) for the four corners.\r\n     * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\r\n     */\n    roundedRect: function (ctx, x, y, width, height, radius) {\n      if (radius) {\n        var r = Math.min(radius, height / 2, width / 2);\n        var left = x + r;\n        var top = y + r;\n        var right = x + width - r;\n        var bottom = y + height - r;\n        ctx.moveTo(x, top);\n        if (left < right && top < bottom) {\n          ctx.arc(left, top, r, -PI, -HALF_PI);\n          ctx.arc(right, top, r, -HALF_PI, 0);\n          ctx.arc(right, bottom, r, 0, HALF_PI);\n          ctx.arc(left, bottom, r, HALF_PI, PI);\n        } else if (left < right) {\n          ctx.moveTo(left, y);\n          ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n          ctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\n        } else if (top < bottom) {\n          ctx.arc(left, top, r, -PI, 0);\n          ctx.arc(left, bottom, r, 0, PI);\n        } else {\n          ctx.arc(left, top, r, -PI, PI);\n        }\n        ctx.closePath();\n        ctx.moveTo(x, y);\n      } else {\n        ctx.rect(x, y, width, height);\n      }\n    },\n    drawPoint: function (ctx, style, radius, x, y, rotation) {\n      var type, xOffset, yOffset, size, cornerRadius;\n      var rad = (rotation || 0) * RAD_PER_DEG;\n      if (style && typeof style === 'object') {\n        type = style.toString();\n        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n          ctx.save();\n          ctx.translate(x, y);\n          ctx.rotate(rad);\n          ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n          ctx.restore();\n          return;\n        }\n      }\n      if (isNaN(radius) || radius <= 0) {\n        return;\n      }\n      ctx.beginPath();\n      switch (style) {\n        // Default includes circle\n        default:\n          ctx.arc(x, y, radius, 0, DOUBLE_PI);\n          ctx.closePath();\n          break;\n        case 'triangle':\n          ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n          rad += TWO_THIRDS_PI;\n          ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n          rad += TWO_THIRDS_PI;\n          ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n          ctx.closePath();\n          break;\n        case 'rectRounded':\n          // NOTE: the rounded rect implementation changed to use `arc` instead of\n          // `quadraticCurveTo` since it generates better results when rect is\n          // almost a circle. 0.516 (instead of 0.5) produces results with visually\n          // closer proportion to the previous impl and it is inscribed in the\n          // circle with `radius`. For more details, see the following PRs:\n          // https://github.com/chartjs/Chart.js/issues/5597\n          // https://github.com/chartjs/Chart.js/issues/5858\n          cornerRadius = radius * 0.516;\n          size = radius - cornerRadius;\n          xOffset = Math.cos(rad + QUARTER_PI) * size;\n          yOffset = Math.sin(rad + QUARTER_PI) * size;\n          ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n          ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n          ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n          ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n          ctx.closePath();\n          break;\n        case 'rect':\n          if (!rotation) {\n            size = Math.SQRT1_2 * radius;\n            ctx.rect(x - size, y - size, 2 * size, 2 * size);\n            break;\n          }\n          rad += QUARTER_PI;\n        /* falls through */\n        case 'rectRot':\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + yOffset, y - xOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          ctx.lineTo(x - yOffset, y + xOffset);\n          ctx.closePath();\n          break;\n        case 'crossRot':\n          rad += QUARTER_PI;\n        /* falls through */\n        case 'cross':\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          ctx.moveTo(x + yOffset, y - xOffset);\n          ctx.lineTo(x - yOffset, y + xOffset);\n          break;\n        case 'star':\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          ctx.moveTo(x + yOffset, y - xOffset);\n          ctx.lineTo(x - yOffset, y + xOffset);\n          rad += QUARTER_PI;\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          ctx.moveTo(x + yOffset, y - xOffset);\n          ctx.lineTo(x - yOffset, y + xOffset);\n          break;\n        case 'line':\n          xOffset = Math.cos(rad) * radius;\n          yOffset = Math.sin(rad) * radius;\n          ctx.moveTo(x - xOffset, y - yOffset);\n          ctx.lineTo(x + xOffset, y + yOffset);\n          break;\n        case 'dash':\n          ctx.moveTo(x, y);\n          ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n          break;\n      }\n      ctx.fill();\n      ctx.stroke();\n    },\n    /**\r\n     * Returns true if the point is inside the rectangle\r\n     * @param {object} point - The point to test\r\n     * @param {object} area - The rectangle\r\n     * @returns {boolean}\r\n     * @private\r\n     */\n    _isPointInArea: function (point, area) {\n      var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n\n      return point.x > area.left - epsilon && point.x < area.right + epsilon && point.y > area.top - epsilon && point.y < area.bottom + epsilon;\n    },\n    clipArea: function (ctx, area) {\n      ctx.save();\n      ctx.beginPath();\n      ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n      ctx.clip();\n    },\n    unclipArea: function (ctx) {\n      ctx.restore();\n    },\n    lineTo: function (ctx, previous, target, flip) {\n      var stepped = target.steppedLine;\n      if (stepped) {\n        if (stepped === 'middle') {\n          var midpoint = (previous.x + target.x) / 2.0;\n          ctx.lineTo(midpoint, flip ? target.y : previous.y);\n          ctx.lineTo(midpoint, flip ? previous.y : target.y);\n        } else if (stepped === 'after' && !flip || stepped !== 'after' && flip) {\n          ctx.lineTo(previous.x, target.y);\n        } else {\n          ctx.lineTo(target.x, previous.y);\n        }\n        ctx.lineTo(target.x, target.y);\n        return;\n      }\n      if (!target.tension) {\n        ctx.lineTo(target.x, target.y);\n        return;\n      }\n      ctx.bezierCurveTo(flip ? previous.controlPointPreviousX : previous.controlPointNextX, flip ? previous.controlPointPreviousY : previous.controlPointNextY, flip ? target.controlPointNextX : target.controlPointPreviousX, flip ? target.controlPointNextY : target.controlPointPreviousY, target.x, target.y);\n    }\n  };\n  var helpers_canvas = exports$1;\n\n  // DEPRECATIONS\n\n  /**\r\n   * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\r\n   * @namespace Chart.helpers.clear\r\n   * @deprecated since version 2.7.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers_core.clear = exports$1.clear;\n\n  /**\r\n   * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\r\n   * @namespace Chart.helpers.drawRoundedRectangle\r\n   * @deprecated since version 2.7.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers_core.drawRoundedRectangle = function (ctx) {\n    ctx.beginPath();\n    exports$1.roundedRect.apply(exports$1, arguments);\n  };\n  var defaults = {\n    /**\r\n     * @private\r\n     */\n    _set: function (scope, values) {\n      return helpers_core.merge(this[scope] || (this[scope] = {}), values);\n    }\n  };\n\n  // TODO(v3): remove 'global' from namespace.  all default are global and\n  // there's inconsistency around which options are under 'global'\n  defaults._set('global', {\n    defaultColor: 'rgba(0,0,0,0.1)',\n    defaultFontColor: '#666',\n    defaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n    defaultFontSize: 12,\n    defaultFontStyle: 'normal',\n    defaultLineHeight: 1.2,\n    showLines: true\n  });\n  var core_defaults = defaults;\n  var valueOrDefault = helpers_core.valueOrDefault;\n\n  /**\r\n   * Converts the given font object into a CSS font string.\r\n   * @param {object} font - A font object.\r\n   * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n   * @private\r\n   */\n  function toFontString(font) {\n    if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\n      return null;\n    }\n    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n  }\n\n  /**\r\n   * @alias Chart.helpers.options\r\n   * @namespace\r\n   */\n  var helpers_options = {\n    /**\r\n     * Converts the given line height `value` in pixels for a specific font `size`.\r\n     * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\r\n     * @param {number} size - The font size (in pixels) used to resolve relative `value`.\r\n     * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\r\n     * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\r\n     * @since 2.7.0\r\n     */\n    toLineHeight: function (value, size) {\n      var matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n      if (!matches || matches[1] === 'normal') {\n        return size * 1.2;\n      }\n      value = +matches[2];\n      switch (matches[3]) {\n        case 'px':\n          return value;\n        case '%':\n          value /= 100;\n          break;\n      }\n      return size * value;\n    },\n    /**\r\n     * Converts the given value into a padding object with pre-computed width/height.\r\n     * @param {number|object} value - If a number, set the value to all TRBL component,\r\n     *  else, if and object, use defined properties and sets undefined ones to 0.\r\n     * @returns {object} The padding values (top, right, bottom, left, width, height)\r\n     * @since 2.7.0\r\n     */\n    toPadding: function (value) {\n      var t, r, b, l;\n      if (helpers_core.isObject(value)) {\n        t = +value.top || 0;\n        r = +value.right || 0;\n        b = +value.bottom || 0;\n        l = +value.left || 0;\n      } else {\n        t = r = b = l = +value || 0;\n      }\n      return {\n        top: t,\n        right: r,\n        bottom: b,\n        left: l,\n        height: t + b,\n        width: l + r\n      };\n    },\n    /**\r\n     * Parses font options and returns the font object.\r\n     * @param {object} options - A object that contains font options to be parsed.\r\n     * @return {object} The font object.\r\n     * @todo Support font.* options and renamed to toFont().\r\n     * @private\r\n     */\n    _parseFont: function (options) {\n      var globalDefaults = core_defaults.global;\n      var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\n      var font = {\n        family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\n        lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\n        size: size,\n        style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\n        weight: null,\n        string: ''\n      };\n      font.string = toFontString(font);\n      return font;\n    },\n    /**\r\n     * Evaluates the given `inputs` sequentially and returns the first defined value.\r\n     * @param {Array} inputs - An array of values, falling back to the last value.\r\n     * @param {object} [context] - If defined and the current value is a function, the value\r\n     * is called with `context` as first argument and the result becomes the new input.\r\n     * @param {number} [index] - If defined and the current value is an array, the value\r\n     * at `index` become the new input.\r\n     * @param {object} [info] - object to return information about resolution in\r\n     * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.\r\n     * @since 2.7.0\r\n     */\n    resolve: function (inputs, context, index, info) {\n      var cacheable = true;\n      var i, ilen, value;\n      for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n        value = inputs[i];\n        if (value === undefined) {\n          continue;\n        }\n        if (context !== undefined && typeof value === 'function') {\n          value = value(context);\n          cacheable = false;\n        }\n        if (index !== undefined && helpers_core.isArray(value)) {\n          value = value[index];\n          cacheable = false;\n        }\n        if (value !== undefined) {\n          if (info && !cacheable) {\n            info.cacheable = false;\n          }\n          return value;\n        }\n      }\n    }\n  };\n\n  /**\r\n   * @alias Chart.helpers.math\r\n   * @namespace\r\n   */\n  var exports$2 = {\n    /**\r\n     * Returns an array of factors sorted from 1 to sqrt(value)\r\n     * @private\r\n     */\n    _factorize: function (value) {\n      var result = [];\n      var sqrt = Math.sqrt(value);\n      var i;\n      for (i = 1; i < sqrt; i++) {\n        if (value % i === 0) {\n          result.push(i);\n          result.push(value / i);\n        }\n      }\n      if (sqrt === (sqrt | 0)) {\n        // if value is a square number\n        result.push(sqrt);\n      }\n      result.sort(function (a, b) {\n        return a - b;\n      }).pop();\n      return result;\n    },\n    log10: Math.log10 || function (x) {\n      var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\n      // Check for whole powers of 10,\n      // which due to floating point rounding error should be corrected.\n      var powerOf10 = Math.round(exponent);\n      var isPowerOf10 = x === Math.pow(10, powerOf10);\n      return isPowerOf10 ? powerOf10 : exponent;\n    }\n  };\n  var helpers_math = exports$2;\n\n  // DEPRECATIONS\n\n  /**\r\n   * Provided for backward compatibility, use Chart.helpers.math.log10 instead.\r\n   * @namespace Chart.helpers.log10\r\n   * @deprecated since version 2.9.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers_core.log10 = exports$2.log10;\n  var getRtlAdapter = function (rectX, width) {\n    return {\n      x: function (x) {\n        return rectX + rectX + width - x;\n      },\n      setWidth: function (w) {\n        width = w;\n      },\n      textAlign: function (align) {\n        if (align === 'center') {\n          return align;\n        }\n        return align === 'right' ? 'left' : 'right';\n      },\n      xPlus: function (x, value) {\n        return x - value;\n      },\n      leftForLtr: function (x, itemWidth) {\n        return x - itemWidth;\n      }\n    };\n  };\n  var getLtrAdapter = function () {\n    return {\n      x: function (x) {\n        return x;\n      },\n      setWidth: function (w) {// eslint-disable-line no-unused-vars\n      },\n      textAlign: function (align) {\n        return align;\n      },\n      xPlus: function (x, value) {\n        return x + value;\n      },\n      leftForLtr: function (x, _itemWidth) {\n        // eslint-disable-line no-unused-vars\n        return x;\n      }\n    };\n  };\n  var getAdapter = function (rtl, rectX, width) {\n    return rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();\n  };\n  var overrideTextDirection = function (ctx, direction) {\n    var style, original;\n    if (direction === 'ltr' || direction === 'rtl') {\n      style = ctx.canvas.style;\n      original = [style.getPropertyValue('direction'), style.getPropertyPriority('direction')];\n      style.setProperty('direction', direction, 'important');\n      ctx.prevTextDirection = original;\n    }\n  };\n  var restoreTextDirection = function (ctx) {\n    var original = ctx.prevTextDirection;\n    if (original !== undefined) {\n      delete ctx.prevTextDirection;\n      ctx.canvas.style.setProperty('direction', original[0], original[1]);\n    }\n  };\n  var helpers_rtl = {\n    getRtlAdapter: getAdapter,\n    overrideTextDirection: overrideTextDirection,\n    restoreTextDirection: restoreTextDirection\n  };\n  var helpers$1 = helpers_core;\n  var easing = helpers_easing;\n  var canvas = helpers_canvas;\n  var options = helpers_options;\n  var math = helpers_math;\n  var rtl = helpers_rtl;\n  helpers$1.easing = easing;\n  helpers$1.canvas = canvas;\n  helpers$1.options = options;\n  helpers$1.math = math;\n  helpers$1.rtl = rtl;\n  function interpolate(start, view, model, ease) {\n    var keys = Object.keys(model);\n    var i, ilen, key, actual, origin, target, type, c0, c1;\n    for (i = 0, ilen = keys.length; i < ilen; ++i) {\n      key = keys[i];\n      target = model[key];\n\n      // if a value is added to the model after pivot() has been called, the view\n      // doesn't contain it, so let's initialize the view to the target value.\n      if (!view.hasOwnProperty(key)) {\n        view[key] = target;\n      }\n      actual = view[key];\n      if (actual === target || key[0] === '_') {\n        continue;\n      }\n      if (!start.hasOwnProperty(key)) {\n        start[key] = actual;\n      }\n      origin = start[key];\n      type = typeof target;\n      if (type === typeof origin) {\n        if (type === 'string') {\n          c0 = chartjsColor(origin);\n          if (c0.valid) {\n            c1 = chartjsColor(target);\n            if (c1.valid) {\n              view[key] = c1.mix(c0, ease).rgbString();\n              continue;\n            }\n          }\n        } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\n          view[key] = origin + (target - origin) * ease;\n          continue;\n        }\n      }\n      view[key] = target;\n    }\n  }\n  var Element = function (configuration) {\n    helpers$1.extend(this, configuration);\n    this.initialize.apply(this, arguments);\n  };\n  helpers$1.extend(Element.prototype, {\n    _type: undefined,\n    initialize: function () {\n      this.hidden = false;\n    },\n    pivot: function () {\n      var me = this;\n      if (!me._view) {\n        me._view = helpers$1.extend({}, me._model);\n      }\n      me._start = {};\n      return me;\n    },\n    transition: function (ease) {\n      var me = this;\n      var model = me._model;\n      var start = me._start;\n      var view = me._view;\n\n      // No animation -> No Transition\n      if (!model || ease === 1) {\n        me._view = helpers$1.extend({}, model);\n        me._start = null;\n        return me;\n      }\n      if (!view) {\n        view = me._view = {};\n      }\n      if (!start) {\n        start = me._start = {};\n      }\n      interpolate(start, view, model, ease);\n      return me;\n    },\n    tooltipPosition: function () {\n      return {\n        x: this._model.x,\n        y: this._model.y\n      };\n    },\n    hasValue: function () {\n      return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\n    }\n  });\n  Element.extend = helpers$1.inherits;\n  var core_element = Element;\n  var exports$3 = core_element.extend({\n    chart: null,\n    // the animation associated chart instance\n    currentStep: 0,\n    // the current animation step\n    numSteps: 60,\n    // default number of steps\n    easing: '',\n    // the easing to use for this animation\n    render: null,\n    // render function used by the animation service\n\n    onAnimationProgress: null,\n    // user specified callback to fire on each step of the animation\n    onAnimationComplete: null // user specified callback to fire when the animation finishes\n  });\n\n  var core_animation = exports$3;\n\n  // DEPRECATIONS\n\n  /**\r\n   * Provided for backward compatibility, use Chart.Animation instead\r\n   * @prop Chart.Animation#animationObject\r\n   * @deprecated since version 2.6.0\r\n   * @todo remove at version 3\r\n   */\n  Object.defineProperty(exports$3.prototype, 'animationObject', {\n    get: function () {\n      return this;\n    }\n  });\n\n  /**\r\n   * Provided for backward compatibility, use Chart.Animation#chart instead\r\n   * @prop Chart.Animation#chartInstance\r\n   * @deprecated since version 2.6.0\r\n   * @todo remove at version 3\r\n   */\n  Object.defineProperty(exports$3.prototype, 'chartInstance', {\n    get: function () {\n      return this.chart;\n    },\n    set: function (value) {\n      this.chart = value;\n    }\n  });\n  core_defaults._set('global', {\n    animation: {\n      duration: 1000,\n      easing: 'easeOutQuart',\n      onProgress: helpers$1.noop,\n      onComplete: helpers$1.noop\n    }\n  });\n  var core_animations = {\n    animations: [],\n    request: null,\n    /**\r\n     * @param {Chart} chart - The chart to animate.\r\n     * @param {Chart.Animation} animation - The animation that we will animate.\r\n     * @param {number} duration - The animation duration in ms.\r\n     * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\r\n     */\n    addAnimation: function (chart, animation, duration, lazy) {\n      var animations = this.animations;\n      var i, ilen;\n      animation.chart = chart;\n      animation.startTime = Date.now();\n      animation.duration = duration;\n      if (!lazy) {\n        chart.animating = true;\n      }\n      for (i = 0, ilen = animations.length; i < ilen; ++i) {\n        if (animations[i].chart === chart) {\n          animations[i] = animation;\n          return;\n        }\n      }\n      animations.push(animation);\n\n      // If there are no animations queued, manually kickstart a digest, for lack of a better word\n      if (animations.length === 1) {\n        this.requestAnimationFrame();\n      }\n    },\n    cancelAnimation: function (chart) {\n      var index = helpers$1.findIndex(this.animations, function (animation) {\n        return animation.chart === chart;\n      });\n      if (index !== -1) {\n        this.animations.splice(index, 1);\n        chart.animating = false;\n      }\n    },\n    requestAnimationFrame: function () {\n      var me = this;\n      if (me.request === null) {\n        // Skip animation frame requests until the active one is executed.\n        // This can happen when processing mouse events, e.g. 'mousemove'\n        // and 'mouseout' events will trigger multiple renders.\n        me.request = helpers$1.requestAnimFrame.call(window, function () {\n          me.request = null;\n          me.startDigest();\n        });\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    startDigest: function () {\n      var me = this;\n      me.advance();\n\n      // Do we have more stuff to animate?\n      if (me.animations.length > 0) {\n        me.requestAnimationFrame();\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    advance: function () {\n      var animations = this.animations;\n      var animation, chart, numSteps, nextStep;\n      var i = 0;\n\n      // 1 animation per chart, so we are looping charts here\n      while (i < animations.length) {\n        animation = animations[i];\n        chart = animation.chart;\n        numSteps = animation.numSteps;\n\n        // Make sure that currentStep starts at 1\n        // https://github.com/chartjs/Chart.js/issues/6104\n        nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\n        animation.currentStep = Math.min(nextStep, numSteps);\n        helpers$1.callback(animation.render, [chart, animation], chart);\n        helpers$1.callback(animation.onAnimationProgress, [animation], chart);\n        if (animation.currentStep >= numSteps) {\n          helpers$1.callback(animation.onAnimationComplete, [animation], chart);\n          chart.animating = false;\n          animations.splice(i, 1);\n        } else {\n          ++i;\n        }\n      }\n    }\n  };\n  var resolve = helpers$1.options.resolve;\n  var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n\n  /**\r\n   * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\r\n   * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\r\n   * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\r\n   */\n  function listenArrayEvents(array, listener) {\n    if (array._chartjs) {\n      array._chartjs.listeners.push(listener);\n      return;\n    }\n    Object.defineProperty(array, '_chartjs', {\n      configurable: true,\n      enumerable: false,\n      value: {\n        listeners: [listener]\n      }\n    });\n    arrayEvents.forEach(function (key) {\n      var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\n      var base = array[key];\n      Object.defineProperty(array, key, {\n        configurable: true,\n        enumerable: false,\n        value: function () {\n          var args = Array.prototype.slice.call(arguments);\n          var res = base.apply(this, args);\n          helpers$1.each(array._chartjs.listeners, function (object) {\n            if (typeof object[method] === 'function') {\n              object[method].apply(object, args);\n            }\n          });\n          return res;\n        }\n      });\n    });\n  }\n\n  /**\r\n   * Removes the given array event listener and cleanup extra attached properties (such as\r\n   * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\r\n   */\n  function unlistenArrayEvents(array, listener) {\n    var stub = array._chartjs;\n    if (!stub) {\n      return;\n    }\n    var listeners = stub.listeners;\n    var index = listeners.indexOf(listener);\n    if (index !== -1) {\n      listeners.splice(index, 1);\n    }\n    if (listeners.length > 0) {\n      return;\n    }\n    arrayEvents.forEach(function (key) {\n      delete array[key];\n    });\n    delete array._chartjs;\n  }\n\n  // Base class for all dataset controllers (line, bar, etc)\n  var DatasetController = function (chart, datasetIndex) {\n    this.initialize(chart, datasetIndex);\n  };\n  helpers$1.extend(DatasetController.prototype, {\n    /**\r\n     * Element type used to generate a meta dataset (e.g. Chart.element.Line).\r\n     * @type {Chart.core.element}\r\n     */\n    datasetElementType: null,\n    /**\r\n     * Element type used to generate a meta data (e.g. Chart.element.Point).\r\n     * @type {Chart.core.element}\r\n     */\n    dataElementType: null,\n    /**\r\n     * Dataset element option keys to be resolved in _resolveDatasetElementOptions.\r\n     * A derived controller may override this to resolve controller-specific options.\r\n     * The keys defined here are for backward compatibility for legend styles.\r\n     * @private\r\n     */\n    _datasetElementOptions: ['backgroundColor', 'borderCapStyle', 'borderColor', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'borderWidth'],\n    /**\r\n     * Data element option keys to be resolved in _resolveDataElementOptions.\r\n     * A derived controller may override this to resolve controller-specific options.\r\n     * The keys defined here are for backward compatibility for legend styles.\r\n     * @private\r\n     */\n    _dataElementOptions: ['backgroundColor', 'borderColor', 'borderWidth', 'pointStyle'],\n    initialize: function (chart, datasetIndex) {\n      var me = this;\n      me.chart = chart;\n      me.index = datasetIndex;\n      me.linkScales();\n      me.addElements();\n      me._type = me.getMeta().type;\n    },\n    updateIndex: function (datasetIndex) {\n      this.index = datasetIndex;\n    },\n    linkScales: function () {\n      var me = this;\n      var meta = me.getMeta();\n      var chart = me.chart;\n      var scales = chart.scales;\n      var dataset = me.getDataset();\n      var scalesOpts = chart.options.scales;\n      if (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {\n        meta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;\n      }\n      if (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {\n        meta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;\n      }\n    },\n    getDataset: function () {\n      return this.chart.data.datasets[this.index];\n    },\n    getMeta: function () {\n      return this.chart.getDatasetMeta(this.index);\n    },\n    getScaleForId: function (scaleID) {\n      return this.chart.scales[scaleID];\n    },\n    /**\r\n     * @private\r\n     */\n    _getValueScaleId: function () {\n      return this.getMeta().yAxisID;\n    },\n    /**\r\n     * @private\r\n     */\n    _getIndexScaleId: function () {\n      return this.getMeta().xAxisID;\n    },\n    /**\r\n     * @private\r\n     */\n    _getValueScale: function () {\n      return this.getScaleForId(this._getValueScaleId());\n    },\n    /**\r\n     * @private\r\n     */\n    _getIndexScale: function () {\n      return this.getScaleForId(this._getIndexScaleId());\n    },\n    reset: function () {\n      this._update(true);\n    },\n    /**\r\n     * @private\r\n     */\n    destroy: function () {\n      if (this._data) {\n        unlistenArrayEvents(this._data, this);\n      }\n    },\n    createMetaDataset: function () {\n      var me = this;\n      var type = me.datasetElementType;\n      return type && new type({\n        _chart: me.chart,\n        _datasetIndex: me.index\n      });\n    },\n    createMetaData: function (index) {\n      var me = this;\n      var type = me.dataElementType;\n      return type && new type({\n        _chart: me.chart,\n        _datasetIndex: me.index,\n        _index: index\n      });\n    },\n    addElements: function () {\n      var me = this;\n      var meta = me.getMeta();\n      var data = me.getDataset().data || [];\n      var metaData = meta.data;\n      var i, ilen;\n      for (i = 0, ilen = data.length; i < ilen; ++i) {\n        metaData[i] = metaData[i] || me.createMetaData(i);\n      }\n      meta.dataset = meta.dataset || me.createMetaDataset();\n    },\n    addElementAndReset: function (index) {\n      var element = this.createMetaData(index);\n      this.getMeta().data.splice(index, 0, element);\n      this.updateElement(element, index, true);\n    },\n    buildOrUpdateElements: function () {\n      var me = this;\n      var dataset = me.getDataset();\n      var data = dataset.data || (dataset.data = []);\n\n      // In order to correctly handle data addition/deletion animation (an thus simulate\n      // real-time charts), we need to monitor these data modifications and synchronize\n      // the internal meta data accordingly.\n      if (me._data !== data) {\n        if (me._data) {\n          // This case happens when the user replaced the data array instance.\n          unlistenArrayEvents(me._data, me);\n        }\n        if (data && Object.isExtensible(data)) {\n          listenArrayEvents(data, me);\n        }\n        me._data = data;\n      }\n\n      // Re-sync meta data in case the user replaced the data array or if we missed\n      // any updates and so make sure that we handle number of datapoints changing.\n      me.resyncElements();\n    },\n    /**\r\n     * Returns the merged user-supplied and default dataset-level options\r\n     * @private\r\n     */\n    _configure: function () {\n      var me = this;\n      me._config = helpers$1.merge(Object.create(null), [me.chart.options.datasets[me._type], me.getDataset()], {\n        merger: function (key, target, source) {\n          if (key !== '_meta' && key !== 'data') {\n            helpers$1._merger(key, target, source);\n          }\n        }\n      });\n    },\n    _update: function (reset) {\n      var me = this;\n      me._configure();\n      me._cachedDataOpts = null;\n      me.update(reset);\n    },\n    update: helpers$1.noop,\n    transition: function (easingValue) {\n      var meta = this.getMeta();\n      var elements = meta.data || [];\n      var ilen = elements.length;\n      var i = 0;\n      for (; i < ilen; ++i) {\n        elements[i].transition(easingValue);\n      }\n      if (meta.dataset) {\n        meta.dataset.transition(easingValue);\n      }\n    },\n    draw: function () {\n      var meta = this.getMeta();\n      var elements = meta.data || [];\n      var ilen = elements.length;\n      var i = 0;\n      if (meta.dataset) {\n        meta.dataset.draw();\n      }\n      for (; i < ilen; ++i) {\n        elements[i].draw();\n      }\n    },\n    /**\r\n     * Returns a set of predefined style properties that should be used to represent the dataset\r\n     * or the data if the index is specified\r\n     * @param {number} index - data index\r\n     * @return {IStyleInterface} style object\r\n     */\n    getStyle: function (index) {\n      var me = this;\n      var meta = me.getMeta();\n      var dataset = meta.dataset;\n      var style;\n      me._configure();\n      if (dataset && index === undefined) {\n        style = me._resolveDatasetElementOptions(dataset || {});\n      } else {\n        index = index || 0;\n        style = me._resolveDataElementOptions(meta.data[index] || {}, index);\n      }\n      if (style.fill === false || style.fill === null) {\n        style.backgroundColor = style.borderColor;\n      }\n      return style;\n    },\n    /**\r\n     * @private\r\n     */\n    _resolveDatasetElementOptions: function (element, hover) {\n      var me = this;\n      var chart = me.chart;\n      var datasetOpts = me._config;\n      var custom = element.custom || {};\n      var options = chart.options.elements[me.datasetElementType.prototype._type] || {};\n      var elementOptions = me._datasetElementOptions;\n      var values = {};\n      var i, ilen, key, readKey;\n\n      // Scriptable options\n      var context = {\n        chart: chart,\n        dataset: me.getDataset(),\n        datasetIndex: me.index,\n        hover: hover\n      };\n      for (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\n        key = elementOptions[i];\n        readKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;\n        values[key] = resolve([custom[readKey], datasetOpts[readKey], options[readKey]], context);\n      }\n      return values;\n    },\n    /**\r\n     * @private\r\n     */\n    _resolveDataElementOptions: function (element, index) {\n      var me = this;\n      var custom = element && element.custom;\n      var cached = me._cachedDataOpts;\n      if (cached && !custom) {\n        return cached;\n      }\n      var chart = me.chart;\n      var datasetOpts = me._config;\n      var options = chart.options.elements[me.dataElementType.prototype._type] || {};\n      var elementOptions = me._dataElementOptions;\n      var values = {};\n\n      // Scriptable options\n      var context = {\n        chart: chart,\n        dataIndex: index,\n        dataset: me.getDataset(),\n        datasetIndex: me.index\n      };\n\n      // `resolve` sets cacheable to `false` if any option is indexed or scripted\n      var info = {\n        cacheable: !custom\n      };\n      var keys, i, ilen, key;\n      custom = custom || {};\n      if (helpers$1.isArray(elementOptions)) {\n        for (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\n          key = elementOptions[i];\n          values[key] = resolve([custom[key], datasetOpts[key], options[key]], context, index, info);\n        }\n      } else {\n        keys = Object.keys(elementOptions);\n        for (i = 0, ilen = keys.length; i < ilen; ++i) {\n          key = keys[i];\n          values[key] = resolve([custom[key], datasetOpts[elementOptions[key]], datasetOpts[key], options[key]], context, index, info);\n        }\n      }\n      if (info.cacheable) {\n        me._cachedDataOpts = Object.freeze(values);\n      }\n      return values;\n    },\n    removeHoverStyle: function (element) {\n      helpers$1.merge(element._model, element.$previousStyle || {});\n      delete element.$previousStyle;\n    },\n    setHoverStyle: function (element) {\n      var dataset = this.chart.data.datasets[element._datasetIndex];\n      var index = element._index;\n      var custom = element.custom || {};\n      var model = element._model;\n      var getHoverColor = helpers$1.getHoverColor;\n      element.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth\n      };\n      model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\n      model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\n      model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\n    },\n    /**\r\n     * @private\r\n     */\n    _removeDatasetHoverStyle: function () {\n      var element = this.getMeta().dataset;\n      if (element) {\n        this.removeHoverStyle(element);\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    _setDatasetHoverStyle: function () {\n      var element = this.getMeta().dataset;\n      var prev = {};\n      var i, ilen, key, keys, hoverOptions, model;\n      if (!element) {\n        return;\n      }\n      model = element._model;\n      hoverOptions = this._resolveDatasetElementOptions(element, true);\n      keys = Object.keys(hoverOptions);\n      for (i = 0, ilen = keys.length; i < ilen; ++i) {\n        key = keys[i];\n        prev[key] = model[key];\n        model[key] = hoverOptions[key];\n      }\n      element.$previousStyle = prev;\n    },\n    /**\r\n     * @private\r\n     */\n    resyncElements: function () {\n      var me = this;\n      var meta = me.getMeta();\n      var data = me.getDataset().data;\n      var numMeta = meta.data.length;\n      var numData = data.length;\n      if (numData < numMeta) {\n        meta.data.splice(numData, numMeta - numData);\n      } else if (numData > numMeta) {\n        me.insertElements(numMeta, numData - numMeta);\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    insertElements: function (start, count) {\n      for (var i = 0; i < count; ++i) {\n        this.addElementAndReset(start + i);\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    onDataPush: function () {\n      var count = arguments.length;\n      this.insertElements(this.getDataset().data.length - count, count);\n    },\n    /**\r\n     * @private\r\n     */\n    onDataPop: function () {\n      this.getMeta().data.pop();\n    },\n    /**\r\n     * @private\r\n     */\n    onDataShift: function () {\n      this.getMeta().data.shift();\n    },\n    /**\r\n     * @private\r\n     */\n    onDataSplice: function (start, count) {\n      this.getMeta().data.splice(start, count);\n      this.insertElements(start, arguments.length - 2);\n    },\n    /**\r\n     * @private\r\n     */\n    onDataUnshift: function () {\n      this.insertElements(0, arguments.length);\n    }\n  });\n  DatasetController.extend = helpers$1.inherits;\n  var core_datasetController = DatasetController;\n  var TAU = Math.PI * 2;\n  core_defaults._set('global', {\n    elements: {\n      arc: {\n        backgroundColor: core_defaults.global.defaultColor,\n        borderColor: '#fff',\n        borderWidth: 2,\n        borderAlign: 'center'\n      }\n    }\n  });\n  function clipArc(ctx, arc) {\n    var startAngle = arc.startAngle;\n    var endAngle = arc.endAngle;\n    var pixelMargin = arc.pixelMargin;\n    var angleMargin = pixelMargin / arc.outerRadius;\n    var x = arc.x;\n    var y = arc.y;\n\n    // Draw an inner border by cliping the arc and drawing a double-width border\n    // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n    ctx.beginPath();\n    ctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n    if (arc.innerRadius > pixelMargin) {\n      angleMargin = pixelMargin / arc.innerRadius;\n      ctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);\n    } else {\n      ctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);\n    }\n    ctx.closePath();\n    ctx.clip();\n  }\n  function drawFullCircleBorders(ctx, vm, arc, inner) {\n    var endAngle = arc.endAngle;\n    var i;\n    if (inner) {\n      arc.endAngle = arc.startAngle + TAU;\n      clipArc(ctx, arc);\n      arc.endAngle = endAngle;\n      if (arc.endAngle === arc.startAngle && arc.fullCircles) {\n        arc.endAngle += TAU;\n        arc.fullCircles--;\n      }\n    }\n    ctx.beginPath();\n    ctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);\n    for (i = 0; i < arc.fullCircles; ++i) {\n      ctx.stroke();\n    }\n    ctx.beginPath();\n    ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);\n    for (i = 0; i < arc.fullCircles; ++i) {\n      ctx.stroke();\n    }\n  }\n  function drawBorder(ctx, vm, arc) {\n    var inner = vm.borderAlign === 'inner';\n    if (inner) {\n      ctx.lineWidth = vm.borderWidth * 2;\n      ctx.lineJoin = 'round';\n    } else {\n      ctx.lineWidth = vm.borderWidth;\n      ctx.lineJoin = 'bevel';\n    }\n    if (arc.fullCircles) {\n      drawFullCircleBorders(ctx, vm, arc, inner);\n    }\n    if (inner) {\n      clipArc(ctx, arc);\n    }\n    ctx.beginPath();\n    ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);\n    ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\n    ctx.closePath();\n    ctx.stroke();\n  }\n  var element_arc = core_element.extend({\n    _type: 'arc',\n    inLabelRange: function (mouseX) {\n      var vm = this._view;\n      if (vm) {\n        return Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2);\n      }\n      return false;\n    },\n    inRange: function (chartX, chartY) {\n      var vm = this._view;\n      if (vm) {\n        var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {\n          x: chartX,\n          y: chartY\n        });\n        var angle = pointRelativePosition.angle;\n        var distance = pointRelativePosition.distance;\n\n        // Sanitise angle range\n        var startAngle = vm.startAngle;\n        var endAngle = vm.endAngle;\n        while (endAngle < startAngle) {\n          endAngle += TAU;\n        }\n        while (angle > endAngle) {\n          angle -= TAU;\n        }\n        while (angle < startAngle) {\n          angle += TAU;\n        }\n\n        // Check if within the range of the open/close angle\n        var betweenAngles = angle >= startAngle && angle <= endAngle;\n        var withinRadius = distance >= vm.innerRadius && distance <= vm.outerRadius;\n        return betweenAngles && withinRadius;\n      }\n      return false;\n    },\n    getCenterPoint: function () {\n      var vm = this._view;\n      var halfAngle = (vm.startAngle + vm.endAngle) / 2;\n      var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n      return {\n        x: vm.x + Math.cos(halfAngle) * halfRadius,\n        y: vm.y + Math.sin(halfAngle) * halfRadius\n      };\n    },\n    getArea: function () {\n      var vm = this._view;\n      return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n    },\n    tooltipPosition: function () {\n      var vm = this._view;\n      var centreAngle = vm.startAngle + (vm.endAngle - vm.startAngle) / 2;\n      var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n      return {\n        x: vm.x + Math.cos(centreAngle) * rangeFromCentre,\n        y: vm.y + Math.sin(centreAngle) * rangeFromCentre\n      };\n    },\n    draw: function () {\n      var ctx = this._chart.ctx;\n      var vm = this._view;\n      var pixelMargin = vm.borderAlign === 'inner' ? 0.33 : 0;\n      var arc = {\n        x: vm.x,\n        y: vm.y,\n        innerRadius: vm.innerRadius,\n        outerRadius: Math.max(vm.outerRadius - pixelMargin, 0),\n        pixelMargin: pixelMargin,\n        startAngle: vm.startAngle,\n        endAngle: vm.endAngle,\n        fullCircles: Math.floor(vm.circumference / TAU)\n      };\n      var i;\n      ctx.save();\n      ctx.fillStyle = vm.backgroundColor;\n      ctx.strokeStyle = vm.borderColor;\n      if (arc.fullCircles) {\n        arc.endAngle = arc.startAngle + TAU;\n        ctx.beginPath();\n        ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\n        ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\n        ctx.closePath();\n        for (i = 0; i < arc.fullCircles; ++i) {\n          ctx.fill();\n        }\n        arc.endAngle = arc.startAngle + vm.circumference % TAU;\n      }\n      ctx.beginPath();\n      ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\n      ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\n      ctx.closePath();\n      ctx.fill();\n      if (vm.borderWidth) {\n        drawBorder(ctx, vm, arc);\n      }\n      ctx.restore();\n    }\n  });\n  var valueOrDefault$1 = helpers$1.valueOrDefault;\n  var defaultColor = core_defaults.global.defaultColor;\n  core_defaults._set('global', {\n    elements: {\n      line: {\n        tension: 0.4,\n        backgroundColor: defaultColor,\n        borderWidth: 3,\n        borderColor: defaultColor,\n        borderCapStyle: 'butt',\n        borderDash: [],\n        borderDashOffset: 0.0,\n        borderJoinStyle: 'miter',\n        capBezierPoints: true,\n        fill: true // do we fill in the area between the line and its base axis\n      }\n    }\n  });\n\n  var element_line = core_element.extend({\n    _type: 'line',\n    draw: function () {\n      var me = this;\n      var vm = me._view;\n      var ctx = me._chart.ctx;\n      var spanGaps = vm.spanGaps;\n      var points = me._children.slice(); // clone array\n      var globalDefaults = core_defaults.global;\n      var globalOptionLineElements = globalDefaults.elements.line;\n      var lastDrawnIndex = -1;\n      var closePath = me._loop;\n      var index, previous, currentVM;\n      if (!points.length) {\n        return;\n      }\n      if (me._loop) {\n        for (index = 0; index < points.length; ++index) {\n          previous = helpers$1.previousItem(points, index);\n          // If the line has an open path, shift the point array\n          if (!points[index]._view.skip && previous._view.skip) {\n            points = points.slice(index).concat(points.slice(0, index));\n            closePath = spanGaps;\n            break;\n          }\n        }\n        // If the line has a close path, add the first point again\n        if (closePath) {\n          points.push(points[0]);\n        }\n      }\n      ctx.save();\n\n      // Stroke Line Options\n      ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\n\n      // IE 9 and 10 do not support line dash\n      if (ctx.setLineDash) {\n        ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n      }\n      ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\n      ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n      ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\n      ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\n\n      // Stroke Line\n      ctx.beginPath();\n\n      // First point moves to it's starting position no matter what\n      currentVM = points[0]._view;\n      if (!currentVM.skip) {\n        ctx.moveTo(currentVM.x, currentVM.y);\n        lastDrawnIndex = 0;\n      }\n      for (index = 1; index < points.length; ++index) {\n        currentVM = points[index]._view;\n        previous = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];\n        if (!currentVM.skip) {\n          if (lastDrawnIndex !== index - 1 && !spanGaps || lastDrawnIndex === -1) {\n            // There was a gap and this is the first point after the gap\n            ctx.moveTo(currentVM.x, currentVM.y);\n          } else {\n            // Line to next point\n            helpers$1.canvas.lineTo(ctx, previous._view, currentVM);\n          }\n          lastDrawnIndex = index;\n        }\n      }\n      if (closePath) {\n        ctx.closePath();\n      }\n      ctx.stroke();\n      ctx.restore();\n    }\n  });\n  var valueOrDefault$2 = helpers$1.valueOrDefault;\n  var defaultColor$1 = core_defaults.global.defaultColor;\n  core_defaults._set('global', {\n    elements: {\n      point: {\n        radius: 3,\n        pointStyle: 'circle',\n        backgroundColor: defaultColor$1,\n        borderColor: defaultColor$1,\n        borderWidth: 1,\n        // Hover\n        hitRadius: 1,\n        hoverRadius: 4,\n        hoverBorderWidth: 1\n      }\n    }\n  });\n  function xRange(mouseX) {\n    var vm = this._view;\n    return vm ? Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius : false;\n  }\n  function yRange(mouseY) {\n    var vm = this._view;\n    return vm ? Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius : false;\n  }\n  var element_point = core_element.extend({\n    _type: 'point',\n    inRange: function (mouseX, mouseY) {\n      var vm = this._view;\n      return vm ? Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2) < Math.pow(vm.hitRadius + vm.radius, 2) : false;\n    },\n    inLabelRange: xRange,\n    inXRange: xRange,\n    inYRange: yRange,\n    getCenterPoint: function () {\n      var vm = this._view;\n      return {\n        x: vm.x,\n        y: vm.y\n      };\n    },\n    getArea: function () {\n      return Math.PI * Math.pow(this._view.radius, 2);\n    },\n    tooltipPosition: function () {\n      var vm = this._view;\n      return {\n        x: vm.x,\n        y: vm.y,\n        padding: vm.radius + vm.borderWidth\n      };\n    },\n    draw: function (chartArea) {\n      var vm = this._view;\n      var ctx = this._chart.ctx;\n      var pointStyle = vm.pointStyle;\n      var rotation = vm.rotation;\n      var radius = vm.radius;\n      var x = vm.x;\n      var y = vm.y;\n      var globalDefaults = core_defaults.global;\n      var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\n\n      if (vm.skip) {\n        return;\n      }\n\n      // Clipping for Points.\n      if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\n        ctx.strokeStyle = vm.borderColor || defaultColor;\n        ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\n        ctx.fillStyle = vm.backgroundColor || defaultColor;\n        helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\n      }\n    }\n  });\n  var defaultColor$2 = core_defaults.global.defaultColor;\n  core_defaults._set('global', {\n    elements: {\n      rectangle: {\n        backgroundColor: defaultColor$2,\n        borderColor: defaultColor$2,\n        borderSkipped: 'bottom',\n        borderWidth: 0\n      }\n    }\n  });\n  function isVertical(vm) {\n    return vm && vm.width !== undefined;\n  }\n\n  /**\r\n   * Helper function to get the bounds of the bar regardless of the orientation\r\n   * @param bar {Chart.Element.Rectangle} the bar\r\n   * @return {Bounds} bounds of the bar\r\n   * @private\r\n   */\n  function getBarBounds(vm) {\n    var x1, x2, y1, y2, half;\n    if (isVertical(vm)) {\n      half = vm.width / 2;\n      x1 = vm.x - half;\n      x2 = vm.x + half;\n      y1 = Math.min(vm.y, vm.base);\n      y2 = Math.max(vm.y, vm.base);\n    } else {\n      half = vm.height / 2;\n      x1 = Math.min(vm.x, vm.base);\n      x2 = Math.max(vm.x, vm.base);\n      y1 = vm.y - half;\n      y2 = vm.y + half;\n    }\n    return {\n      left: x1,\n      top: y1,\n      right: x2,\n      bottom: y2\n    };\n  }\n  function swap(orig, v1, v2) {\n    return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n  }\n  function parseBorderSkipped(vm) {\n    var edge = vm.borderSkipped;\n    var res = {};\n    if (!edge) {\n      return res;\n    }\n    if (vm.horizontal) {\n      if (vm.base > vm.x) {\n        edge = swap(edge, 'left', 'right');\n      }\n    } else if (vm.base < vm.y) {\n      edge = swap(edge, 'bottom', 'top');\n    }\n    res[edge] = true;\n    return res;\n  }\n  function parseBorderWidth(vm, maxW, maxH) {\n    var value = vm.borderWidth;\n    var skip = parseBorderSkipped(vm);\n    var t, r, b, l;\n    if (helpers$1.isObject(value)) {\n      t = +value.top || 0;\n      r = +value.right || 0;\n      b = +value.bottom || 0;\n      l = +value.left || 0;\n    } else {\n      t = r = b = l = +value || 0;\n    }\n    return {\n      t: skip.top || t < 0 ? 0 : t > maxH ? maxH : t,\n      r: skip.right || r < 0 ? 0 : r > maxW ? maxW : r,\n      b: skip.bottom || b < 0 ? 0 : b > maxH ? maxH : b,\n      l: skip.left || l < 0 ? 0 : l > maxW ? maxW : l\n    };\n  }\n  function boundingRects(vm) {\n    var bounds = getBarBounds(vm);\n    var width = bounds.right - bounds.left;\n    var height = bounds.bottom - bounds.top;\n    var border = parseBorderWidth(vm, width / 2, height / 2);\n    return {\n      outer: {\n        x: bounds.left,\n        y: bounds.top,\n        w: width,\n        h: height\n      },\n      inner: {\n        x: bounds.left + border.l,\n        y: bounds.top + border.t,\n        w: width - border.l - border.r,\n        h: height - border.t - border.b\n      }\n    };\n  }\n  function inRange(vm, x, y) {\n    var skipX = x === null;\n    var skipY = y === null;\n    var bounds = !vm || skipX && skipY ? false : getBarBounds(vm);\n    return bounds && (skipX || x >= bounds.left && x <= bounds.right) && (skipY || y >= bounds.top && y <= bounds.bottom);\n  }\n  var element_rectangle = core_element.extend({\n    _type: 'rectangle',\n    draw: function () {\n      var ctx = this._chart.ctx;\n      var vm = this._view;\n      var rects = boundingRects(vm);\n      var outer = rects.outer;\n      var inner = rects.inner;\n      ctx.fillStyle = vm.backgroundColor;\n      ctx.fillRect(outer.x, outer.y, outer.w, outer.h);\n      if (outer.w === inner.w && outer.h === inner.h) {\n        return;\n      }\n      ctx.save();\n      ctx.beginPath();\n      ctx.rect(outer.x, outer.y, outer.w, outer.h);\n      ctx.clip();\n      ctx.fillStyle = vm.borderColor;\n      ctx.rect(inner.x, inner.y, inner.w, inner.h);\n      ctx.fill('evenodd');\n      ctx.restore();\n    },\n    height: function () {\n      var vm = this._view;\n      return vm.base - vm.y;\n    },\n    inRange: function (mouseX, mouseY) {\n      return inRange(this._view, mouseX, mouseY);\n    },\n    inLabelRange: function (mouseX, mouseY) {\n      var vm = this._view;\n      return isVertical(vm) ? inRange(vm, mouseX, null) : inRange(vm, null, mouseY);\n    },\n    inXRange: function (mouseX) {\n      return inRange(this._view, mouseX, null);\n    },\n    inYRange: function (mouseY) {\n      return inRange(this._view, null, mouseY);\n    },\n    getCenterPoint: function () {\n      var vm = this._view;\n      var x, y;\n      if (isVertical(vm)) {\n        x = vm.x;\n        y = (vm.y + vm.base) / 2;\n      } else {\n        x = (vm.x + vm.base) / 2;\n        y = vm.y;\n      }\n      return {\n        x: x,\n        y: y\n      };\n    },\n    getArea: function () {\n      var vm = this._view;\n      return isVertical(vm) ? vm.width * Math.abs(vm.y - vm.base) : vm.height * Math.abs(vm.x - vm.base);\n    },\n    tooltipPosition: function () {\n      var vm = this._view;\n      return {\n        x: vm.x,\n        y: vm.y\n      };\n    }\n  });\n  var elements = {};\n  var Arc = element_arc;\n  var Line = element_line;\n  var Point = element_point;\n  var Rectangle = element_rectangle;\n  elements.Arc = Arc;\n  elements.Line = Line;\n  elements.Point = Point;\n  elements.Rectangle = Rectangle;\n  var deprecated = helpers$1._deprecated;\n  var valueOrDefault$3 = helpers$1.valueOrDefault;\n  core_defaults._set('bar', {\n    hover: {\n      mode: 'label'\n    },\n    scales: {\n      xAxes: [{\n        type: 'category',\n        offset: true,\n        gridLines: {\n          offsetGridLines: true\n        }\n      }],\n      yAxes: [{\n        type: 'linear'\n      }]\n    }\n  });\n  core_defaults._set('global', {\n    datasets: {\n      bar: {\n        categoryPercentage: 0.8,\n        barPercentage: 0.9\n      }\n    }\n  });\n\n  /**\r\n   * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\r\n   * @private\r\n   */\n  function computeMinSampleSize(scale, pixels) {\n    var min = scale._length;\n    var prev, curr, i, ilen;\n    for (i = 1, ilen = pixels.length; i < ilen; ++i) {\n      min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\n    }\n    for (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {\n      curr = scale.getPixelForTick(i);\n      min = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;\n      prev = curr;\n    }\n    return min;\n  }\n\n  /**\r\n   * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\r\n   * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\r\n   * mode currently always generates bars equally sized (until we introduce scriptable options?).\r\n   * @private\r\n   */\n  function computeFitCategoryTraits(index, ruler, options) {\n    var thickness = options.barThickness;\n    var count = ruler.stackCount;\n    var curr = ruler.pixels[index];\n    var min = helpers$1.isNullOrUndef(thickness) ? computeMinSampleSize(ruler.scale, ruler.pixels) : -1;\n    var size, ratio;\n    if (helpers$1.isNullOrUndef(thickness)) {\n      size = min * options.categoryPercentage;\n      ratio = options.barPercentage;\n    } else {\n      // When bar thickness is enforced, category and bar percentages are ignored.\n      // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n      // and deprecate barPercentage since this value is ignored when thickness is absolute.\n      size = thickness * count;\n      ratio = 1;\n    }\n    return {\n      chunk: size / count,\n      ratio: ratio,\n      start: curr - size / 2\n    };\n  }\n\n  /**\r\n   * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\r\n   * percentage options are 1), based on the previous and following categories. This mode\r\n   * generates bars with different widths when data are not evenly spaced.\r\n   * @private\r\n   */\n  function computeFlexCategoryTraits(index, ruler, options) {\n    var pixels = ruler.pixels;\n    var curr = pixels[index];\n    var prev = index > 0 ? pixels[index - 1] : null;\n    var next = index < pixels.length - 1 ? pixels[index + 1] : null;\n    var percent = options.categoryPercentage;\n    var start, size;\n    if (prev === null) {\n      // first data: its size is double based on the next point or,\n      // if it's also the last data, we use the scale size.\n      prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n    }\n    if (next === null) {\n      // last data: its size is also double based on the previous point.\n      next = curr + curr - prev;\n    }\n    start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n    size = Math.abs(next - prev) / 2 * percent;\n    return {\n      chunk: size / ruler.stackCount,\n      ratio: options.barPercentage,\n      start: start\n    };\n  }\n  var controller_bar = core_datasetController.extend({\n    dataElementType: elements.Rectangle,\n    /**\r\n     * @private\r\n     */\n    _dataElementOptions: ['backgroundColor', 'borderColor', 'borderSkipped', 'borderWidth', 'barPercentage', 'barThickness', 'categoryPercentage', 'maxBarThickness', 'minBarLength'],\n    initialize: function () {\n      var me = this;\n      var meta, scaleOpts;\n      core_datasetController.prototype.initialize.apply(me, arguments);\n      meta = me.getMeta();\n      meta.stack = me.getDataset().stack;\n      meta.bar = true;\n      scaleOpts = me._getIndexScale().options;\n      deprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');\n      deprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');\n      deprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');\n      deprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');\n      deprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');\n    },\n    update: function (reset) {\n      var me = this;\n      var rects = me.getMeta().data;\n      var i, ilen;\n      me._ruler = me.getRuler();\n      for (i = 0, ilen = rects.length; i < ilen; ++i) {\n        me.updateElement(rects[i], i, reset);\n      }\n    },\n    updateElement: function (rectangle, index, reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var dataset = me.getDataset();\n      var options = me._resolveDataElementOptions(rectangle, index);\n      rectangle._xScale = me.getScaleForId(meta.xAxisID);\n      rectangle._yScale = me.getScaleForId(meta.yAxisID);\n      rectangle._datasetIndex = me.index;\n      rectangle._index = index;\n      rectangle._model = {\n        backgroundColor: options.backgroundColor,\n        borderColor: options.borderColor,\n        borderSkipped: options.borderSkipped,\n        borderWidth: options.borderWidth,\n        datasetLabel: dataset.label,\n        label: me.chart.data.labels[index]\n      };\n      if (helpers$1.isArray(dataset.data[index])) {\n        rectangle._model.borderSkipped = null;\n      }\n      me._updateElementGeometry(rectangle, index, reset, options);\n      rectangle.pivot();\n    },\n    /**\r\n     * @private\r\n     */\n    _updateElementGeometry: function (rectangle, index, reset, options) {\n      var me = this;\n      var model = rectangle._model;\n      var vscale = me._getValueScale();\n      var base = vscale.getBasePixel();\n      var horizontal = vscale.isHorizontal();\n      var ruler = me._ruler || me.getRuler();\n      var vpixels = me.calculateBarValuePixels(me.index, index, options);\n      var ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);\n      model.horizontal = horizontal;\n      model.base = reset ? base : vpixels.base;\n      model.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\n      model.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\n      model.height = horizontal ? ipixels.size : undefined;\n      model.width = horizontal ? undefined : ipixels.size;\n    },\n    /**\r\n     * Returns the stacks based on groups and bar visibility.\r\n     * @param {number} [last] - The dataset index\r\n     * @returns {string[]} The list of stack IDs\r\n     * @private\r\n     */\n    _getStacks: function (last) {\n      var me = this;\n      var scale = me._getIndexScale();\n      var metasets = scale._getMatchingVisibleMetas(me._type);\n      var stacked = scale.options.stacked;\n      var ilen = metasets.length;\n      var stacks = [];\n      var i, meta;\n      for (i = 0; i < ilen; ++i) {\n        meta = metasets[i];\n        // stacked   | meta.stack\n        //           | found | not found | undefined\n        // false     |   x   |     x     |     x\n        // true      |       |     x     |\n        // undefined |       |     x     |     x\n        if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n          stacks.push(meta.stack);\n        }\n        if (meta.index === last) {\n          break;\n        }\n      }\n      return stacks;\n    },\n    /**\r\n     * Returns the effective number of stacks based on groups and bar visibility.\r\n     * @private\r\n     */\n    getStackCount: function () {\n      return this._getStacks().length;\n    },\n    /**\r\n     * Returns the stack index for the given dataset based on groups and bar visibility.\r\n     * @param {number} [datasetIndex] - The dataset index\r\n     * @param {string} [name] - The stack name to find\r\n     * @returns {number} The stack index\r\n     * @private\r\n     */\n    getStackIndex: function (datasetIndex, name) {\n      var stacks = this._getStacks(datasetIndex);\n      var index = name !== undefined ? stacks.indexOf(name) : -1; // indexOf returns -1 if element is not present\n\n      return index === -1 ? stacks.length - 1 : index;\n    },\n    /**\r\n     * @private\r\n     */\n    getRuler: function () {\n      var me = this;\n      var scale = me._getIndexScale();\n      var pixels = [];\n      var i, ilen;\n      for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\n        pixels.push(scale.getPixelForValue(null, i, me.index));\n      }\n      return {\n        pixels: pixels,\n        start: scale._startPixel,\n        end: scale._endPixel,\n        stackCount: me.getStackCount(),\n        scale: scale\n      };\n    },\n    /**\r\n     * Note: pixel values are not clamped to the scale area.\r\n     * @private\r\n     */\n    calculateBarValuePixels: function (datasetIndex, index, options) {\n      var me = this;\n      var chart = me.chart;\n      var scale = me._getValueScale();\n      var isHorizontal = scale.isHorizontal();\n      var datasets = chart.data.datasets;\n      var metasets = scale._getMatchingVisibleMetas(me._type);\n      var value = scale._parseValue(datasets[datasetIndex].data[index]);\n      var minBarLength = options.minBarLength;\n      var stacked = scale.options.stacked;\n      var stack = me.getMeta().stack;\n      var start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;\n      var length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;\n      var ilen = metasets.length;\n      var i, imeta, ivalue, base, head, size, stackLength;\n      if (stacked || stacked === undefined && stack !== undefined) {\n        for (i = 0; i < ilen; ++i) {\n          imeta = metasets[i];\n          if (imeta.index === datasetIndex) {\n            break;\n          }\n          if (imeta.stack === stack) {\n            stackLength = scale._parseValue(datasets[imeta.index].data[index]);\n            ivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;\n            if (value.min < 0 && ivalue < 0 || value.max >= 0 && ivalue > 0) {\n              start += ivalue;\n            }\n          }\n        }\n      }\n      base = scale.getPixelForValue(start);\n      head = scale.getPixelForValue(start + length);\n      size = head - base;\n      if (minBarLength !== undefined && Math.abs(size) < minBarLength) {\n        size = minBarLength;\n        if (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {\n          head = base - minBarLength;\n        } else {\n          head = base + minBarLength;\n        }\n      }\n      return {\n        size: size,\n        base: base,\n        head: head,\n        center: head + size / 2\n      };\n    },\n    /**\r\n     * @private\r\n     */\n    calculateBarIndexPixels: function (datasetIndex, index, ruler, options) {\n      var me = this;\n      var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options) : computeFitCategoryTraits(index, ruler, options);\n      var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\n      var center = range.start + range.chunk * stackIndex + range.chunk / 2;\n      var size = Math.min(valueOrDefault$3(options.maxBarThickness, Infinity), range.chunk * range.ratio);\n      return {\n        base: center - size / 2,\n        head: center + size / 2,\n        center: center,\n        size: size\n      };\n    },\n    draw: function () {\n      var me = this;\n      var chart = me.chart;\n      var scale = me._getValueScale();\n      var rects = me.getMeta().data;\n      var dataset = me.getDataset();\n      var ilen = rects.length;\n      var i = 0;\n      helpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\n      for (; i < ilen; ++i) {\n        var val = scale._parseValue(dataset.data[i]);\n        if (!isNaN(val.min) && !isNaN(val.max)) {\n          rects[i].draw();\n        }\n      }\n      helpers$1.canvas.unclipArea(chart.ctx);\n    },\n    /**\r\n     * @private\r\n     */\n    _resolveDataElementOptions: function () {\n      var me = this;\n      var values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));\n      var indexOpts = me._getIndexScale().options;\n      var valueOpts = me._getValueScale().options;\n      values.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);\n      values.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);\n      values.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);\n      values.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);\n      values.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);\n      return values;\n    }\n  });\n  var valueOrDefault$4 = helpers$1.valueOrDefault;\n  var resolve$1 = helpers$1.options.resolve;\n  core_defaults._set('bubble', {\n    hover: {\n      mode: 'single'\n    },\n    scales: {\n      xAxes: [{\n        type: 'linear',\n        // bubble should probably use a linear scale by default\n        position: 'bottom',\n        id: 'x-axis-0' // need an ID so datasets can reference the scale\n      }],\n\n      yAxes: [{\n        type: 'linear',\n        position: 'left',\n        id: 'y-axis-0'\n      }]\n    },\n    tooltips: {\n      callbacks: {\n        title: function () {\n          // Title doesn't make sense for scatter since we format the data as a point\n          return '';\n        },\n        label: function (item, data) {\n          var datasetLabel = data.datasets[item.datasetIndex].label || '';\n          var dataPoint = data.datasets[item.datasetIndex].data[item.index];\n          return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\n        }\n      }\n    }\n  });\n  var controller_bubble = core_datasetController.extend({\n    /**\r\n     * @protected\r\n     */\n    dataElementType: elements.Point,\n    /**\r\n     * @private\r\n     */\n    _dataElementOptions: ['backgroundColor', 'borderColor', 'borderWidth', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth', 'hoverRadius', 'hitRadius', 'pointStyle', 'rotation'],\n    /**\r\n     * @protected\r\n     */\n    update: function (reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var points = meta.data;\n\n      // Update Points\n      helpers$1.each(points, function (point, index) {\n        me.updateElement(point, index, reset);\n      });\n    },\n    /**\r\n     * @protected\r\n     */\n    updateElement: function (point, index, reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var custom = point.custom || {};\n      var xScale = me.getScaleForId(meta.xAxisID);\n      var yScale = me.getScaleForId(meta.yAxisID);\n      var options = me._resolveDataElementOptions(point, index);\n      var data = me.getDataset().data[index];\n      var dsIndex = me.index;\n      var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\n      var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\n      point._xScale = xScale;\n      point._yScale = yScale;\n      point._options = options;\n      point._datasetIndex = dsIndex;\n      point._index = index;\n      point._model = {\n        backgroundColor: options.backgroundColor,\n        borderColor: options.borderColor,\n        borderWidth: options.borderWidth,\n        hitRadius: options.hitRadius,\n        pointStyle: options.pointStyle,\n        rotation: options.rotation,\n        radius: reset ? 0 : options.radius,\n        skip: custom.skip || isNaN(x) || isNaN(y),\n        x: x,\n        y: y\n      };\n      point.pivot();\n    },\n    /**\r\n     * @protected\r\n     */\n    setHoverStyle: function (point) {\n      var model = point._model;\n      var options = point._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      point.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth,\n        radius: model.radius\n      };\n      model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\n      model.radius = options.radius + options.hoverRadius;\n    },\n    /**\r\n     * @private\r\n     */\n    _resolveDataElementOptions: function (point, index) {\n      var me = this;\n      var chart = me.chart;\n      var dataset = me.getDataset();\n      var custom = point.custom || {};\n      var data = dataset.data[index] || {};\n      var values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments);\n\n      // Scriptable options\n      var context = {\n        chart: chart,\n        dataIndex: index,\n        dataset: dataset,\n        datasetIndex: me.index\n      };\n\n      // In case values were cached (and thus frozen), we need to clone the values\n      if (me._cachedDataOpts === values) {\n        values = helpers$1.extend({}, values);\n      }\n\n      // Custom radius resolution\n      values.radius = resolve$1([custom.radius, data.r, me._config.radius, chart.options.elements.point.radius], context, index);\n      return values;\n    }\n  });\n  var valueOrDefault$5 = helpers$1.valueOrDefault;\n  var PI$1 = Math.PI;\n  var DOUBLE_PI$1 = PI$1 * 2;\n  var HALF_PI$1 = PI$1 / 2;\n  core_defaults._set('doughnut', {\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    hover: {\n      mode: 'single'\n    },\n    legendCallback: function (chart) {\n      var list = document.createElement('ul');\n      var data = chart.data;\n      var datasets = data.datasets;\n      var labels = data.labels;\n      var i, ilen, listItem, listItemSpan;\n      list.setAttribute('class', chart.id + '-legend');\n      if (datasets.length) {\n        for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\n          listItem = list.appendChild(document.createElement('li'));\n          listItemSpan = listItem.appendChild(document.createElement('span'));\n          listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\n          if (labels[i]) {\n            listItem.appendChild(document.createTextNode(labels[i]));\n          }\n        }\n      }\n      return list.outerHTML;\n    },\n    legend: {\n      labels: {\n        generateLabels: function (chart) {\n          var data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            return data.labels.map(function (label, i) {\n              var meta = chart.getDatasetMeta(0);\n              var style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\n                // Extra data used for toggling the correct item\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick: function (e, legendItem) {\n        var index = legendItem.index;\n        var chart = this.chart;\n        var i, ilen, meta;\n        for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n          meta = chart.getDatasetMeta(i);\n          // toggle visibility of index if exists\n          if (meta.data[index]) {\n            meta.data[index].hidden = !meta.data[index].hidden;\n          }\n        }\n        chart.update();\n      }\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutoutPercentage: 50,\n    // The rotation of the chart, where the first data arc begins.\n    rotation: -HALF_PI$1,\n    // The total circumference of the chart.\n    circumference: DOUBLE_PI$1,\n    // Need to override these to give a nice default\n    tooltips: {\n      callbacks: {\n        title: function () {\n          return '';\n        },\n        label: function (tooltipItem, data) {\n          var dataLabel = data.labels[tooltipItem.index];\n          var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n          if (helpers$1.isArray(dataLabel)) {\n            // show value on first line of multiline label\n            // need to clone because we are changing the value\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  });\n  var controller_doughnut = core_datasetController.extend({\n    dataElementType: elements.Arc,\n    linkScales: helpers$1.noop,\n    /**\r\n     * @private\r\n     */\n    _dataElementOptions: ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'],\n    // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n    getRingIndex: function (datasetIndex) {\n      var ringIndex = 0;\n      for (var j = 0; j < datasetIndex; ++j) {\n        if (this.chart.isDatasetVisible(j)) {\n          ++ringIndex;\n        }\n      }\n      return ringIndex;\n    },\n    update: function (reset) {\n      var me = this;\n      var chart = me.chart;\n      var chartArea = chart.chartArea;\n      var opts = chart.options;\n      var ratioX = 1;\n      var ratioY = 1;\n      var offsetX = 0;\n      var offsetY = 0;\n      var meta = me.getMeta();\n      var arcs = meta.data;\n      var cutout = opts.cutoutPercentage / 100 || 0;\n      var circumference = opts.circumference;\n      var chartWeight = me._getRingWeight(me.index);\n      var maxWidth, maxHeight, i, ilen;\n\n      // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n      if (circumference < DOUBLE_PI$1) {\n        var startAngle = opts.rotation % DOUBLE_PI$1;\n        startAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;\n        var endAngle = startAngle + circumference;\n        var startX = Math.cos(startAngle);\n        var startY = Math.sin(startAngle);\n        var endX = Math.cos(endAngle);\n        var endY = Math.sin(endAngle);\n        var contains0 = startAngle <= 0 && endAngle >= 0 || endAngle >= DOUBLE_PI$1;\n        var contains90 = startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1 || endAngle >= DOUBLE_PI$1 + HALF_PI$1;\n        var contains180 = startAngle === -PI$1 || endAngle >= PI$1;\n        var contains270 = startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1 || endAngle >= PI$1 + HALF_PI$1;\n        var minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);\n        var minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);\n        var maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);\n        var maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);\n        ratioX = (maxX - minX) / 2;\n        ratioY = (maxY - minY) / 2;\n        offsetX = -(maxX + minX) / 2;\n        offsetY = -(maxY + minY) / 2;\n      }\n      for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n        arcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\n      }\n      chart.borderWidth = me.getMaxBorderWidth();\n      maxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;\n      maxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;\n      chart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n      chart.innerRadius = Math.max(chart.outerRadius * cutout, 0);\n      chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\n      chart.offsetX = offsetX * chart.outerRadius;\n      chart.offsetY = offsetY * chart.outerRadius;\n      meta.total = me.calculateTotal();\n      me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\n      me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\n      for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n        me.updateElement(arcs[i], i, reset);\n      }\n    },\n    updateElement: function (arc, index, reset) {\n      var me = this;\n      var chart = me.chart;\n      var chartArea = chart.chartArea;\n      var opts = chart.options;\n      var animationOpts = opts.animation;\n      var centerX = (chartArea.left + chartArea.right) / 2;\n      var centerY = (chartArea.top + chartArea.bottom) / 2;\n      var startAngle = opts.rotation; // non reset case handled later\n      var endAngle = opts.rotation; // non reset case handled later\n      var dataset = me.getDataset();\n      var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);\n      var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\n      var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\n      var options = arc._options || {};\n      helpers$1.extend(arc, {\n        // Utility\n        _datasetIndex: me.index,\n        _index: index,\n        // Desired view properties\n        _model: {\n          backgroundColor: options.backgroundColor,\n          borderColor: options.borderColor,\n          borderWidth: options.borderWidth,\n          borderAlign: options.borderAlign,\n          x: centerX + chart.offsetX,\n          y: centerY + chart.offsetY,\n          startAngle: startAngle,\n          endAngle: endAngle,\n          circumference: circumference,\n          outerRadius: outerRadius,\n          innerRadius: innerRadius,\n          label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n        }\n      });\n      var model = arc._model;\n\n      // Set correct angles if not resetting\n      if (!reset || !animationOpts.animateRotate) {\n        if (index === 0) {\n          model.startAngle = opts.rotation;\n        } else {\n          model.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n        }\n        model.endAngle = model.startAngle + model.circumference;\n      }\n      arc.pivot();\n    },\n    calculateTotal: function () {\n      var dataset = this.getDataset();\n      var meta = this.getMeta();\n      var total = 0;\n      var value;\n      helpers$1.each(meta.data, function (element, index) {\n        value = dataset.data[index];\n        if (!isNaN(value) && !element.hidden) {\n          total += Math.abs(value);\n        }\n      });\n\n      /* if (total === 0) {\r\n      \ttotal = NaN;\r\n      }*/\n\n      return total;\n    },\n    calculateCircumference: function (value) {\n      var total = this.getMeta().total;\n      if (total > 0 && !isNaN(value)) {\n        return DOUBLE_PI$1 * (Math.abs(value) / total);\n      }\n      return 0;\n    },\n    // gets the max border or hover width to properly scale pie charts\n    getMaxBorderWidth: function (arcs) {\n      var me = this;\n      var max = 0;\n      var chart = me.chart;\n      var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\n      if (!arcs) {\n        // Find the outmost visible dataset\n        for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n          if (chart.isDatasetVisible(i)) {\n            meta = chart.getDatasetMeta(i);\n            arcs = meta.data;\n            if (i !== me.index) {\n              controller = meta.controller;\n            }\n            break;\n          }\n        }\n      }\n      if (!arcs) {\n        return 0;\n      }\n      for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n        arc = arcs[i];\n        if (controller) {\n          controller._configure();\n          options = controller._resolveDataElementOptions(arc, i);\n        } else {\n          options = arc._options;\n        }\n        if (options.borderAlign !== 'inner') {\n          borderWidth = options.borderWidth;\n          hoverWidth = options.hoverBorderWidth;\n          max = borderWidth > max ? borderWidth : max;\n          max = hoverWidth > max ? hoverWidth : max;\n        }\n      }\n      return max;\n    },\n    /**\r\n     * @protected\r\n     */\n    setHoverStyle: function (arc) {\n      var model = arc._model;\n      var options = arc._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      arc.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth\n      };\n      model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\n    },\n    /**\r\n     * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\r\n     * @private\r\n     */\n    _getRingWeightOffset: function (datasetIndex) {\n      var ringWeightOffset = 0;\n      for (var i = 0; i < datasetIndex; ++i) {\n        if (this.chart.isDatasetVisible(i)) {\n          ringWeightOffset += this._getRingWeight(i);\n        }\n      }\n      return ringWeightOffset;\n    },\n    /**\r\n     * @private\r\n     */\n    _getRingWeight: function (dataSetIndex) {\n      return Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\n    },\n    /**\r\n     * Returns the sum of all visibile data set weights.  This value can be 0.\r\n     * @private\r\n     */\n    _getVisibleDatasetWeightTotal: function () {\n      return this._getRingWeightOffset(this.chart.data.datasets.length);\n    }\n  });\n  core_defaults._set('horizontalBar', {\n    hover: {\n      mode: 'index',\n      axis: 'y'\n    },\n    scales: {\n      xAxes: [{\n        type: 'linear',\n        position: 'bottom'\n      }],\n      yAxes: [{\n        type: 'category',\n        position: 'left',\n        offset: true,\n        gridLines: {\n          offsetGridLines: true\n        }\n      }]\n    },\n    elements: {\n      rectangle: {\n        borderSkipped: 'left'\n      }\n    },\n    tooltips: {\n      mode: 'index',\n      axis: 'y'\n    }\n  });\n  core_defaults._set('global', {\n    datasets: {\n      horizontalBar: {\n        categoryPercentage: 0.8,\n        barPercentage: 0.9\n      }\n    }\n  });\n  var controller_horizontalBar = controller_bar.extend({\n    /**\r\n     * @private\r\n     */\n    _getValueScaleId: function () {\n      return this.getMeta().xAxisID;\n    },\n    /**\r\n     * @private\r\n     */\n    _getIndexScaleId: function () {\n      return this.getMeta().yAxisID;\n    }\n  });\n  var valueOrDefault$6 = helpers$1.valueOrDefault;\n  var resolve$2 = helpers$1.options.resolve;\n  var isPointInArea = helpers$1.canvas._isPointInArea;\n  core_defaults._set('line', {\n    showLines: true,\n    spanGaps: false,\n    hover: {\n      mode: 'label'\n    },\n    scales: {\n      xAxes: [{\n        type: 'category',\n        id: 'x-axis-0'\n      }],\n      yAxes: [{\n        type: 'linear',\n        id: 'y-axis-0'\n      }]\n    }\n  });\n  function scaleClip(scale, halfBorderWidth) {\n    var tickOpts = scale && scale.options.ticks || {};\n    var reverse = tickOpts.reverse;\n    var min = tickOpts.min === undefined ? halfBorderWidth : 0;\n    var max = tickOpts.max === undefined ? halfBorderWidth : 0;\n    return {\n      start: reverse ? max : min,\n      end: reverse ? min : max\n    };\n  }\n  function defaultClip(xScale, yScale, borderWidth) {\n    var halfBorderWidth = borderWidth / 2;\n    var x = scaleClip(xScale, halfBorderWidth);\n    var y = scaleClip(yScale, halfBorderWidth);\n    return {\n      top: y.end,\n      right: x.end,\n      bottom: y.start,\n      left: x.start\n    };\n  }\n  function toClip(value) {\n    var t, r, b, l;\n    if (helpers$1.isObject(value)) {\n      t = value.top;\n      r = value.right;\n      b = value.bottom;\n      l = value.left;\n    } else {\n      t = r = b = l = value;\n    }\n    return {\n      top: t,\n      right: r,\n      bottom: b,\n      left: l\n    };\n  }\n  var controller_line = core_datasetController.extend({\n    datasetElementType: elements.Line,\n    dataElementType: elements.Point,\n    /**\r\n     * @private\r\n     */\n    _datasetElementOptions: ['backgroundColor', 'borderCapStyle', 'borderColor', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'borderWidth', 'cubicInterpolationMode', 'fill'],\n    /**\r\n     * @private\r\n     */\n    _dataElementOptions: {\n      backgroundColor: 'pointBackgroundColor',\n      borderColor: 'pointBorderColor',\n      borderWidth: 'pointBorderWidth',\n      hitRadius: 'pointHitRadius',\n      hoverBackgroundColor: 'pointHoverBackgroundColor',\n      hoverBorderColor: 'pointHoverBorderColor',\n      hoverBorderWidth: 'pointHoverBorderWidth',\n      hoverRadius: 'pointHoverRadius',\n      pointStyle: 'pointStyle',\n      radius: 'pointRadius',\n      rotation: 'pointRotation'\n    },\n    update: function (reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var line = meta.dataset;\n      var points = meta.data || [];\n      var options = me.chart.options;\n      var config = me._config;\n      var showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);\n      var i, ilen;\n      me._xScale = me.getScaleForId(meta.xAxisID);\n      me._yScale = me.getScaleForId(meta.yAxisID);\n\n      // Update Line\n      if (showLine) {\n        // Compatibility: If the properties are defined with only the old name, use those values\n        if (config.tension !== undefined && config.lineTension === undefined) {\n          config.lineTension = config.tension;\n        }\n\n        // Utility\n        line._scale = me._yScale;\n        line._datasetIndex = me.index;\n        // Data\n        line._children = points;\n        // Model\n        line._model = me._resolveDatasetElementOptions(line);\n        line.pivot();\n      }\n\n      // Update Points\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        me.updateElement(points[i], i, reset);\n      }\n      if (showLine && line._model.tension !== 0) {\n        me.updateBezierControlPoints();\n      }\n\n      // Now pivot the point for animation\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        points[i].pivot();\n      }\n    },\n    updateElement: function (point, index, reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var custom = point.custom || {};\n      var dataset = me.getDataset();\n      var datasetIndex = me.index;\n      var value = dataset.data[index];\n      var xScale = me._xScale;\n      var yScale = me._yScale;\n      var lineModel = meta.dataset._model;\n      var x, y;\n      var options = me._resolveDataElementOptions(point, index);\n      x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\n      y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\n\n      // Utility\n      point._xScale = xScale;\n      point._yScale = yScale;\n      point._options = options;\n      point._datasetIndex = datasetIndex;\n      point._index = index;\n\n      // Desired view properties\n      point._model = {\n        x: x,\n        y: y,\n        skip: custom.skip || isNaN(x) || isNaN(y),\n        // Appearance\n        radius: options.radius,\n        pointStyle: options.pointStyle,\n        rotation: options.rotation,\n        backgroundColor: options.backgroundColor,\n        borderColor: options.borderColor,\n        borderWidth: options.borderWidth,\n        tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\n        steppedLine: lineModel ? lineModel.steppedLine : false,\n        // Tooltip\n        hitRadius: options.hitRadius\n      };\n    },\n    /**\r\n     * @private\r\n     */\n    _resolveDatasetElementOptions: function (element) {\n      var me = this;\n      var config = me._config;\n      var custom = element.custom || {};\n      var options = me.chart.options;\n      var lineOptions = options.elements.line;\n      var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\n\n      // The default behavior of lines is to break at null values, according\n      // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n      // This option gives lines the ability to span gaps\n      values.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);\n      values.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);\n      values.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);\n      values.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));\n      return values;\n    },\n    calculatePointY: function (value, index, datasetIndex) {\n      var me = this;\n      var chart = me.chart;\n      var yScale = me._yScale;\n      var sumPos = 0;\n      var sumNeg = 0;\n      var i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;\n      if (yScale.options.stacked) {\n        rightValue = +yScale.getRightValue(value);\n        metasets = chart._getSortedVisibleDatasetMetas();\n        ilen = metasets.length;\n        for (i = 0; i < ilen; ++i) {\n          dsMeta = metasets[i];\n          if (dsMeta.index === datasetIndex) {\n            break;\n          }\n          ds = chart.data.datasets[dsMeta.index];\n          if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {\n            stackedRightValue = +yScale.getRightValue(ds.data[index]);\n            if (stackedRightValue < 0) {\n              sumNeg += stackedRightValue || 0;\n            } else {\n              sumPos += stackedRightValue || 0;\n            }\n          }\n        }\n        if (rightValue < 0) {\n          return yScale.getPixelForValue(sumNeg + rightValue);\n        }\n        return yScale.getPixelForValue(sumPos + rightValue);\n      }\n      return yScale.getPixelForValue(value);\n    },\n    updateBezierControlPoints: function () {\n      var me = this;\n      var chart = me.chart;\n      var meta = me.getMeta();\n      var lineModel = meta.dataset._model;\n      var area = chart.chartArea;\n      var points = meta.data || [];\n      var i, ilen, model, controlPoints;\n\n      // Only consider points that are drawn in case the spanGaps option is used\n      if (lineModel.spanGaps) {\n        points = points.filter(function (pt) {\n          return !pt._model.skip;\n        });\n      }\n      function capControlPoint(pt, min, max) {\n        return Math.max(Math.min(pt, max), min);\n      }\n      if (lineModel.cubicInterpolationMode === 'monotone') {\n        helpers$1.splineCurveMonotone(points);\n      } else {\n        for (i = 0, ilen = points.length; i < ilen; ++i) {\n          model = points[i]._model;\n          controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i)._model, model, helpers$1.nextItem(points, i)._model, lineModel.tension);\n          model.controlPointPreviousX = controlPoints.previous.x;\n          model.controlPointPreviousY = controlPoints.previous.y;\n          model.controlPointNextX = controlPoints.next.x;\n          model.controlPointNextY = controlPoints.next.y;\n        }\n      }\n      if (chart.options.elements.line.capBezierPoints) {\n        for (i = 0, ilen = points.length; i < ilen; ++i) {\n          model = points[i]._model;\n          if (isPointInArea(model, area)) {\n            if (i > 0 && isPointInArea(points[i - 1]._model, area)) {\n              model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n              model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n            }\n            if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\n              model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n              model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n            }\n          }\n        }\n      }\n    },\n    draw: function () {\n      var me = this;\n      var chart = me.chart;\n      var meta = me.getMeta();\n      var points = meta.data || [];\n      var area = chart.chartArea;\n      var canvas = chart.canvas;\n      var i = 0;\n      var ilen = points.length;\n      var clip;\n      if (me._showLine) {\n        clip = meta.dataset._model.clip;\n        helpers$1.canvas.clipArea(chart.ctx, {\n          left: clip.left === false ? 0 : area.left - clip.left,\n          right: clip.right === false ? canvas.width : area.right + clip.right,\n          top: clip.top === false ? 0 : area.top - clip.top,\n          bottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom\n        });\n        meta.dataset.draw();\n        helpers$1.canvas.unclipArea(chart.ctx);\n      }\n\n      // Draw the points\n      for (; i < ilen; ++i) {\n        points[i].draw(area);\n      }\n    },\n    /**\r\n     * @protected\r\n     */\n    setHoverStyle: function (point) {\n      var model = point._model;\n      var options = point._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      point.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth,\n        radius: model.radius\n      };\n      model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\n      model.radius = valueOrDefault$6(options.hoverRadius, options.radius);\n    }\n  });\n  var resolve$3 = helpers$1.options.resolve;\n  core_defaults._set('polarArea', {\n    scale: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      gridLines: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      ticks: {\n        beginAtZero: true\n      }\n    },\n    // Boolean - Whether to animate the rotation of the chart\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    startAngle: -0.5 * Math.PI,\n    legendCallback: function (chart) {\n      var list = document.createElement('ul');\n      var data = chart.data;\n      var datasets = data.datasets;\n      var labels = data.labels;\n      var i, ilen, listItem, listItemSpan;\n      list.setAttribute('class', chart.id + '-legend');\n      if (datasets.length) {\n        for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\n          listItem = list.appendChild(document.createElement('li'));\n          listItemSpan = listItem.appendChild(document.createElement('span'));\n          listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\n          if (labels[i]) {\n            listItem.appendChild(document.createTextNode(labels[i]));\n          }\n        }\n      }\n      return list.outerHTML;\n    },\n    legend: {\n      labels: {\n        generateLabels: function (chart) {\n          var data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            return data.labels.map(function (label, i) {\n              var meta = chart.getDatasetMeta(0);\n              var style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\n                // Extra data used for toggling the correct item\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick: function (e, legendItem) {\n        var index = legendItem.index;\n        var chart = this.chart;\n        var i, ilen, meta;\n        for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n          meta = chart.getDatasetMeta(i);\n          meta.data[index].hidden = !meta.data[index].hidden;\n        }\n        chart.update();\n      }\n    },\n    // Need to override these to give a nice default\n    tooltips: {\n      callbacks: {\n        title: function () {\n          return '';\n        },\n        label: function (item, data) {\n          return data.labels[item.index] + ': ' + item.yLabel;\n        }\n      }\n    }\n  });\n  var controller_polarArea = core_datasetController.extend({\n    dataElementType: elements.Arc,\n    linkScales: helpers$1.noop,\n    /**\r\n     * @private\r\n     */\n    _dataElementOptions: ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'],\n    /**\r\n     * @private\r\n     */\n    _getIndexScaleId: function () {\n      return this.chart.scale.id;\n    },\n    /**\r\n     * @private\r\n     */\n    _getValueScaleId: function () {\n      return this.chart.scale.id;\n    },\n    update: function (reset) {\n      var me = this;\n      var dataset = me.getDataset();\n      var meta = me.getMeta();\n      var start = me.chart.options.startAngle || 0;\n      var starts = me._starts = [];\n      var angles = me._angles = [];\n      var arcs = meta.data;\n      var i, ilen, angle;\n      me._updateRadius();\n      meta.count = me.countVisibleElements();\n      for (i = 0, ilen = dataset.data.length; i < ilen; i++) {\n        starts[i] = start;\n        angle = me._computeAngle(i);\n        angles[i] = angle;\n        start += angle;\n      }\n      for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n        arcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\n        me.updateElement(arcs[i], i, reset);\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    _updateRadius: function () {\n      var me = this;\n      var chart = me.chart;\n      var chartArea = chart.chartArea;\n      var opts = chart.options;\n      var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n      chart.outerRadius = Math.max(minSize / 2, 0);\n      chart.innerRadius = Math.max(opts.cutoutPercentage ? chart.outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n      chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n      me.outerRadius = chart.outerRadius - chart.radiusLength * me.index;\n      me.innerRadius = me.outerRadius - chart.radiusLength;\n    },\n    updateElement: function (arc, index, reset) {\n      var me = this;\n      var chart = me.chart;\n      var dataset = me.getDataset();\n      var opts = chart.options;\n      var animationOpts = opts.animation;\n      var scale = chart.scale;\n      var labels = chart.data.labels;\n      var centerX = scale.xCenter;\n      var centerY = scale.yCenter;\n\n      // var negHalfPI = -0.5 * Math.PI;\n      var datasetStartAngle = opts.startAngle;\n      var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n      var startAngle = me._starts[index];\n      var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\n      var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n      var options = arc._options || {};\n      helpers$1.extend(arc, {\n        // Utility\n        _datasetIndex: me.index,\n        _index: index,\n        _scale: scale,\n        // Desired view properties\n        _model: {\n          backgroundColor: options.backgroundColor,\n          borderColor: options.borderColor,\n          borderWidth: options.borderWidth,\n          borderAlign: options.borderAlign,\n          x: centerX,\n          y: centerY,\n          innerRadius: 0,\n          outerRadius: reset ? resetRadius : distance,\n          startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n          endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n          label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\n        }\n      });\n      arc.pivot();\n    },\n    countVisibleElements: function () {\n      var dataset = this.getDataset();\n      var meta = this.getMeta();\n      var count = 0;\n      helpers$1.each(meta.data, function (element, index) {\n        if (!isNaN(dataset.data[index]) && !element.hidden) {\n          count++;\n        }\n      });\n      return count;\n    },\n    /**\r\n     * @protected\r\n     */\n    setHoverStyle: function (arc) {\n      var model = arc._model;\n      var options = arc._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      var valueOrDefault = helpers$1.valueOrDefault;\n      arc.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth\n      };\n      model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\n    },\n    /**\r\n     * @private\r\n     */\n    _computeAngle: function (index) {\n      var me = this;\n      var count = this.getMeta().count;\n      var dataset = me.getDataset();\n      var meta = me.getMeta();\n      if (isNaN(dataset.data[index]) || meta.data[index].hidden) {\n        return 0;\n      }\n\n      // Scriptable options\n      var context = {\n        chart: me.chart,\n        dataIndex: index,\n        dataset: dataset,\n        datasetIndex: me.index\n      };\n      return resolve$3([me.chart.options.elements.arc.angle, 2 * Math.PI / count], context, index);\n    }\n  });\n  core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\n  core_defaults._set('pie', {\n    cutoutPercentage: 0\n  });\n\n  // Pie charts are Doughnut chart with different defaults\n  var controller_pie = controller_doughnut;\n  var valueOrDefault$7 = helpers$1.valueOrDefault;\n  core_defaults._set('radar', {\n    spanGaps: false,\n    scale: {\n      type: 'radialLinear'\n    },\n    elements: {\n      line: {\n        fill: 'start',\n        tension: 0 // no bezier in radar\n      }\n    }\n  });\n\n  var controller_radar = core_datasetController.extend({\n    datasetElementType: elements.Line,\n    dataElementType: elements.Point,\n    linkScales: helpers$1.noop,\n    /**\r\n     * @private\r\n     */\n    _datasetElementOptions: ['backgroundColor', 'borderWidth', 'borderColor', 'borderCapStyle', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'fill'],\n    /**\r\n     * @private\r\n     */\n    _dataElementOptions: {\n      backgroundColor: 'pointBackgroundColor',\n      borderColor: 'pointBorderColor',\n      borderWidth: 'pointBorderWidth',\n      hitRadius: 'pointHitRadius',\n      hoverBackgroundColor: 'pointHoverBackgroundColor',\n      hoverBorderColor: 'pointHoverBorderColor',\n      hoverBorderWidth: 'pointHoverBorderWidth',\n      hoverRadius: 'pointHoverRadius',\n      pointStyle: 'pointStyle',\n      radius: 'pointRadius',\n      rotation: 'pointRotation'\n    },\n    /**\r\n     * @private\r\n     */\n    _getIndexScaleId: function () {\n      return this.chart.scale.id;\n    },\n    /**\r\n     * @private\r\n     */\n    _getValueScaleId: function () {\n      return this.chart.scale.id;\n    },\n    update: function (reset) {\n      var me = this;\n      var meta = me.getMeta();\n      var line = meta.dataset;\n      var points = meta.data || [];\n      var scale = me.chart.scale;\n      var config = me._config;\n      var i, ilen;\n\n      // Compatibility: If the properties are defined with only the old name, use those values\n      if (config.tension !== undefined && config.lineTension === undefined) {\n        config.lineTension = config.tension;\n      }\n\n      // Utility\n      line._scale = scale;\n      line._datasetIndex = me.index;\n      // Data\n      line._children = points;\n      line._loop = true;\n      // Model\n      line._model = me._resolveDatasetElementOptions(line);\n      line.pivot();\n\n      // Update Points\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        me.updateElement(points[i], i, reset);\n      }\n\n      // Update bezier control points\n      me.updateBezierControlPoints();\n\n      // Now pivot the point for animation\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        points[i].pivot();\n      }\n    },\n    updateElement: function (point, index, reset) {\n      var me = this;\n      var custom = point.custom || {};\n      var dataset = me.getDataset();\n      var scale = me.chart.scale;\n      var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n      var options = me._resolveDataElementOptions(point, index);\n      var lineModel = me.getMeta().dataset._model;\n      var x = reset ? scale.xCenter : pointPosition.x;\n      var y = reset ? scale.yCenter : pointPosition.y;\n\n      // Utility\n      point._scale = scale;\n      point._options = options;\n      point._datasetIndex = me.index;\n      point._index = index;\n\n      // Desired view properties\n      point._model = {\n        x: x,\n        // value not used in dataset scale, but we want a consistent API between scales\n        y: y,\n        skip: custom.skip || isNaN(x) || isNaN(y),\n        // Appearance\n        radius: options.radius,\n        pointStyle: options.pointStyle,\n        rotation: options.rotation,\n        backgroundColor: options.backgroundColor,\n        borderColor: options.borderColor,\n        borderWidth: options.borderWidth,\n        tension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),\n        // Tooltip\n        hitRadius: options.hitRadius\n      };\n    },\n    /**\r\n     * @private\r\n     */\n    _resolveDatasetElementOptions: function () {\n      var me = this;\n      var config = me._config;\n      var options = me.chart.options;\n      var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\n      values.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);\n      values.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);\n      return values;\n    },\n    updateBezierControlPoints: function () {\n      var me = this;\n      var meta = me.getMeta();\n      var area = me.chart.chartArea;\n      var points = meta.data || [];\n      var i, ilen, model, controlPoints;\n\n      // Only consider points that are drawn in case the spanGaps option is used\n      if (meta.dataset._model.spanGaps) {\n        points = points.filter(function (pt) {\n          return !pt._model.skip;\n        });\n      }\n      function capControlPoint(pt, min, max) {\n        return Math.max(Math.min(pt, max), min);\n      }\n      for (i = 0, ilen = points.length; i < ilen; ++i) {\n        model = points[i]._model;\n        controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i, true)._model, model, helpers$1.nextItem(points, i, true)._model, model.tension);\n\n        // Prevent the bezier going outside of the bounds of the graph\n        model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\n        model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\n        model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\n        model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\n      }\n    },\n    setHoverStyle: function (point) {\n      var model = point._model;\n      var options = point._options;\n      var getHoverColor = helpers$1.getHoverColor;\n      point.$previousStyle = {\n        backgroundColor: model.backgroundColor,\n        borderColor: model.borderColor,\n        borderWidth: model.borderWidth,\n        radius: model.radius\n      };\n      model.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n      model.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));\n      model.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);\n      model.radius = valueOrDefault$7(options.hoverRadius, options.radius);\n    }\n  });\n  core_defaults._set('scatter', {\n    hover: {\n      mode: 'single'\n    },\n    scales: {\n      xAxes: [{\n        id: 'x-axis-1',\n        // need an ID so datasets can reference the scale\n        type: 'linear',\n        // scatter should not use a category axis\n        position: 'bottom'\n      }],\n      yAxes: [{\n        id: 'y-axis-1',\n        type: 'linear',\n        position: 'left'\n      }]\n    },\n    tooltips: {\n      callbacks: {\n        title: function () {\n          return ''; // doesn't make sense for scatter since data are formatted as a point\n        },\n\n        label: function (item) {\n          return '(' + item.xLabel + ', ' + item.yLabel + ')';\n        }\n      }\n    }\n  });\n  core_defaults._set('global', {\n    datasets: {\n      scatter: {\n        showLine: false\n      }\n    }\n  });\n\n  // Scatter charts use line controllers\n  var controller_scatter = controller_line;\n\n  // NOTE export a map in which the key represents the controller type, not\n  // the class, and so must be CamelCase in order to be correctly retrieved\n  // by the controller in core.controller.js (`controllers[meta.type]`).\n\n  var controllers = {\n    bar: controller_bar,\n    bubble: controller_bubble,\n    doughnut: controller_doughnut,\n    horizontalBar: controller_horizontalBar,\n    line: controller_line,\n    polarArea: controller_polarArea,\n    pie: controller_pie,\n    radar: controller_radar,\n    scatter: controller_scatter\n  };\n\n  /**\r\n   * Helper function to get relative position for an event\r\n   * @param {Event|IEvent} event - The event to get the position for\r\n   * @param {Chart} chart - The chart\r\n   * @returns {object} the event position\r\n   */\n  function getRelativePosition(e, chart) {\n    if (e.native) {\n      return {\n        x: e.x,\n        y: e.y\n      };\n    }\n    return helpers$1.getRelativePosition(e, chart);\n  }\n\n  /**\r\n   * Helper function to traverse all of the visible elements in the chart\r\n   * @param {Chart} chart - the chart\r\n   * @param {function} handler - the callback to execute for each visible item\r\n   */\n  function parseVisibleItems(chart, handler) {\n    var metasets = chart._getSortedVisibleDatasetMetas();\n    var metadata, i, j, ilen, jlen, element;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      metadata = metasets[i].data;\n      for (j = 0, jlen = metadata.length; j < jlen; ++j) {\n        element = metadata[j];\n        if (!element._view.skip) {\n          handler(element);\n        }\n      }\n    }\n  }\n\n  /**\r\n   * Helper function to get the items that intersect the event position\r\n   * @param {ChartElement[]} items - elements to filter\r\n   * @param {object} position - the point to be nearest to\r\n   * @return {ChartElement[]} the nearest items\r\n   */\n  function getIntersectItems(chart, position) {\n    var elements = [];\n    parseVisibleItems(chart, function (element) {\n      if (element.inRange(position.x, position.y)) {\n        elements.push(element);\n      }\n    });\n    return elements;\n  }\n\n  /**\r\n   * Helper function to get the items nearest to the event position considering all visible items in teh chart\r\n   * @param {Chart} chart - the chart to look at elements from\r\n   * @param {object} position - the point to be nearest to\r\n   * @param {boolean} intersect - if true, only consider items that intersect the position\r\n   * @param {function} distanceMetric - function to provide the distance between points\r\n   * @return {ChartElement[]} the nearest items\r\n   */\n  function getNearestItems(chart, position, intersect, distanceMetric) {\n    var minDistance = Number.POSITIVE_INFINITY;\n    var nearestItems = [];\n    parseVisibleItems(chart, function (element) {\n      if (intersect && !element.inRange(position.x, position.y)) {\n        return;\n      }\n      var center = element.getCenterPoint();\n      var distance = distanceMetric(position, center);\n      if (distance < minDistance) {\n        nearestItems = [element];\n        minDistance = distance;\n      } else if (distance === minDistance) {\n        // Can have multiple items at the same distance in which case we sort by size\n        nearestItems.push(element);\n      }\n    });\n    return nearestItems;\n  }\n\n  /**\r\n   * Get a distance metric function for two points based on the\r\n   * axis mode setting\r\n   * @param {string} axis - the axis mode. x|y|xy\r\n   */\n  function getDistanceMetricForAxis(axis) {\n    var useX = axis.indexOf('x') !== -1;\n    var useY = axis.indexOf('y') !== -1;\n    return function (pt1, pt2) {\n      var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n      var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n      return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n    };\n  }\n  function indexMode(chart, e, options) {\n    var position = getRelativePosition(e, chart);\n    // Default axis for index mode is 'x' to match old behaviour\n    options.axis = options.axis || 'x';\n    var distanceMetric = getDistanceMetricForAxis(options.axis);\n    var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n    var elements = [];\n    if (!items.length) {\n      return [];\n    }\n    chart._getSortedVisibleDatasetMetas().forEach(function (meta) {\n      var element = meta.data[items[0]._index];\n\n      // don't count items that are skipped (null data)\n      if (element && !element._view.skip) {\n        elements.push(element);\n      }\n    });\n    return elements;\n  }\n\n  /**\r\n   * @interface IInteractionOptions\r\n   */\n  /**\r\n   * If true, only consider items that intersect the point\r\n   * @name IInterfaceOptions#boolean\r\n   * @type Boolean\r\n   */\n\n  /**\r\n   * Contains interaction related functions\r\n   * @namespace Chart.Interaction\r\n   */\n  var core_interaction = {\n    // Helper function for different modes\n    modes: {\n      single: function (chart, e) {\n        var position = getRelativePosition(e, chart);\n        var elements = [];\n        parseVisibleItems(chart, function (element) {\n          if (element.inRange(position.x, position.y)) {\n            elements.push(element);\n            return elements;\n          }\n        });\n        return elements.slice(0, 1);\n      },\n      /**\r\n       * @function Chart.Interaction.modes.label\r\n       * @deprecated since version 2.4.0\r\n       * @todo remove at version 3\r\n       * @private\r\n       */\n      label: indexMode,\n      /**\r\n       * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\r\n       * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\r\n       * @function Chart.Interaction.modes.index\r\n       * @since v2.4.0\r\n       * @param {Chart} chart - the chart we are returning items from\r\n       * @param {Event} e - the event we are find things at\r\n       * @param {IInteractionOptions} options - options to use during interaction\r\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n       */\n      index: indexMode,\n      /**\r\n       * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\r\n       * If the options.intersect is false, we find the nearest item and return the items in that dataset\r\n       * @function Chart.Interaction.modes.dataset\r\n       * @param {Chart} chart - the chart we are returning items from\r\n       * @param {Event} e - the event we are find things at\r\n       * @param {IInteractionOptions} options - options to use during interaction\r\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n       */\n      dataset: function (chart, e, options) {\n        var position = getRelativePosition(e, chart);\n        options.axis = options.axis || 'xy';\n        var distanceMetric = getDistanceMetricForAxis(options.axis);\n        var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n        if (items.length > 0) {\n          items = chart.getDatasetMeta(items[0]._datasetIndex).data;\n        }\n        return items;\n      },\n      /**\r\n       * @function Chart.Interaction.modes.x-axis\r\n       * @deprecated since version 2.4.0. Use index mode and intersect == true\r\n       * @todo remove at version 3\r\n       * @private\r\n       */\n      'x-axis': function (chart, e) {\n        return indexMode(chart, e, {\n          intersect: false\n        });\n      },\n      /**\r\n       * Point mode returns all elements that hit test based on the event position\r\n       * of the event\r\n       * @function Chart.Interaction.modes.intersect\r\n       * @param {Chart} chart - the chart we are returning items from\r\n       * @param {Event} e - the event we are find things at\r\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n       */\n      point: function (chart, e) {\n        var position = getRelativePosition(e, chart);\n        return getIntersectItems(chart, position);\n      },\n      /**\r\n       * nearest mode returns the element closest to the point\r\n       * @function Chart.Interaction.modes.intersect\r\n       * @param {Chart} chart - the chart we are returning items from\r\n       * @param {Event} e - the event we are find things at\r\n       * @param {IInteractionOptions} options - options to use\r\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n       */\n      nearest: function (chart, e, options) {\n        var position = getRelativePosition(e, chart);\n        options.axis = options.axis || 'xy';\n        var distanceMetric = getDistanceMetricForAxis(options.axis);\n        return getNearestItems(chart, position, options.intersect, distanceMetric);\n      },\n      /**\r\n       * x mode returns the elements that hit-test at the current x coordinate\r\n       * @function Chart.Interaction.modes.x\r\n       * @param {Chart} chart - the chart we are returning items from\r\n       * @param {Event} e - the event we are find things at\r\n       * @param {IInteractionOptions} options - options to use\r\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n       */\n      x: function (chart, e, options) {\n        var position = getRelativePosition(e, chart);\n        var items = [];\n        var intersectsItem = false;\n        parseVisibleItems(chart, function (element) {\n          if (element.inXRange(position.x)) {\n            items.push(element);\n          }\n          if (element.inRange(position.x, position.y)) {\n            intersectsItem = true;\n          }\n        });\n\n        // If we want to trigger on an intersect and we don't have any items\n        // that intersect the position, return nothing\n        if (options.intersect && !intersectsItem) {\n          items = [];\n        }\n        return items;\n      },\n      /**\r\n       * y mode returns the elements that hit-test at the current y coordinate\r\n       * @function Chart.Interaction.modes.y\r\n       * @param {Chart} chart - the chart we are returning items from\r\n       * @param {Event} e - the event we are find things at\r\n       * @param {IInteractionOptions} options - options to use\r\n       * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n       */\n      y: function (chart, e, options) {\n        var position = getRelativePosition(e, chart);\n        var items = [];\n        var intersectsItem = false;\n        parseVisibleItems(chart, function (element) {\n          if (element.inYRange(position.y)) {\n            items.push(element);\n          }\n          if (element.inRange(position.x, position.y)) {\n            intersectsItem = true;\n          }\n        });\n\n        // If we want to trigger on an intersect and we don't have any items\n        // that intersect the position, return nothing\n        if (options.intersect && !intersectsItem) {\n          items = [];\n        }\n        return items;\n      }\n    }\n  };\n  var extend = helpers$1.extend;\n  function filterByPosition(array, position) {\n    return helpers$1.where(array, function (v) {\n      return v.pos === position;\n    });\n  }\n  function sortByWeight(array, reverse) {\n    return array.sort(function (a, b) {\n      var v0 = reverse ? b : a;\n      var v1 = reverse ? a : b;\n      return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n    });\n  }\n  function wrapBoxes(boxes) {\n    var layoutBoxes = [];\n    var i, ilen, box;\n    for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n      box = boxes[i];\n      layoutBoxes.push({\n        index: i,\n        box: box,\n        pos: box.position,\n        horizontal: box.isHorizontal(),\n        weight: box.weight\n      });\n    }\n    return layoutBoxes;\n  }\n  function setLayoutDims(layouts, params) {\n    var i, ilen, layout;\n    for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n      layout = layouts[i];\n      // store width used instead of chartArea.w in fitBoxes\n      layout.width = layout.horizontal ? layout.box.fullWidth && params.availableWidth : params.vBoxMaxWidth;\n      // store height used instead of chartArea.h in fitBoxes\n      layout.height = layout.horizontal && params.hBoxMaxHeight;\n    }\n  }\n  function buildLayoutBoxes(boxes) {\n    var layoutBoxes = wrapBoxes(boxes);\n    var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n    var right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n    var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n    var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n    return {\n      leftAndTop: left.concat(top),\n      rightAndBottom: right.concat(bottom),\n      chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n      vertical: left.concat(right),\n      horizontal: top.concat(bottom)\n    };\n  }\n  function getCombinedMax(maxPadding, chartArea, a, b) {\n    return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n  }\n  function updateDims(chartArea, params, layout) {\n    var box = layout.box;\n    var maxPadding = chartArea.maxPadding;\n    var newWidth, newHeight;\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[layout.pos] -= layout.size;\n    }\n    layout.size = layout.horizontal ? box.height : box.width;\n    chartArea[layout.pos] += layout.size;\n    if (box.getPadding) {\n      var boxPadding = box.getPadding();\n      maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n      maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n      maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n      maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n    }\n    newWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');\n    newHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');\n    if (newWidth !== chartArea.w || newHeight !== chartArea.h) {\n      chartArea.w = newWidth;\n      chartArea.h = newHeight;\n\n      // return true if chart area changed in layout's direction\n      var sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];\n      return sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));\n    }\n  }\n  function handleMaxPadding(chartArea) {\n    var maxPadding = chartArea.maxPadding;\n    function updatePos(pos) {\n      var change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n      chartArea[pos] += change;\n      return change;\n    }\n    chartArea.y += updatePos('top');\n    chartArea.x += updatePos('left');\n    updatePos('right');\n    updatePos('bottom');\n  }\n  function getMargins(horizontal, chartArea) {\n    var maxPadding = chartArea.maxPadding;\n    function marginForPositions(positions) {\n      var margin = {\n        left: 0,\n        top: 0,\n        right: 0,\n        bottom: 0\n      };\n      positions.forEach(function (pos) {\n        margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n      });\n      return margin;\n    }\n    return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n  }\n  function fitBoxes(boxes, chartArea, params) {\n    var refitBoxes = [];\n    var i, ilen, layout, box, refit, changed;\n    for (i = 0, ilen = boxes.length; i < ilen; ++i) {\n      layout = boxes[i];\n      box = layout.box;\n      box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n      if (updateDims(chartArea, params, layout)) {\n        changed = true;\n        if (refitBoxes.length) {\n          // Dimensions changed and there were non full width boxes before this\n          // -> we have to refit those\n          refit = true;\n        }\n      }\n      if (!box.fullWidth) {\n        // fullWidth boxes don't need to be re-fitted in any case\n        refitBoxes.push(layout);\n      }\n    }\n    return refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;\n  }\n  function placeBoxes(boxes, chartArea, params) {\n    var userPadding = params.padding;\n    var x = chartArea.x;\n    var y = chartArea.y;\n    var i, ilen, layout, box;\n    for (i = 0, ilen = boxes.length; i < ilen; ++i) {\n      layout = boxes[i];\n      box = layout.box;\n      if (layout.horizontal) {\n        box.left = box.fullWidth ? userPadding.left : chartArea.left;\n        box.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;\n        box.top = y;\n        box.bottom = y + box.height;\n        box.width = box.right - box.left;\n        y = box.bottom;\n      } else {\n        box.left = x;\n        box.right = x + box.width;\n        box.top = chartArea.top;\n        box.bottom = chartArea.top + chartArea.h;\n        box.height = box.bottom - box.top;\n        x = box.right;\n      }\n    }\n    chartArea.x = x;\n    chartArea.y = y;\n  }\n  core_defaults._set('global', {\n    layout: {\n      padding: {\n        top: 0,\n        right: 0,\n        bottom: 0,\n        left: 0\n      }\n    }\n  });\n\n  /**\r\n   * @interface ILayoutItem\r\n   * @prop {string} position - The position of the item in the chart layout. Possible values are\r\n   * 'left', 'top', 'right', 'bottom', and 'chartArea'\r\n   * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\r\n   * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\r\n   * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\r\n   * @prop {function} update - Takes two parameters: width and height. Returns size of item\r\n   * @prop {function} getPadding -  Returns an object with padding on the edges\r\n   * @prop {number} width - Width of item. Must be valid after update()\r\n   * @prop {number} height - Height of item. Must be valid after update()\r\n   * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\r\n   * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\r\n   * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\r\n   * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\r\n   */\n\n  // The layout service is very self explanatory.  It's responsible for the layout within a chart.\n  // Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n  // It is this service's responsibility of carrying out that layout.\n  var core_layouts = {\n    defaults: {},\n    /**\r\n     * Register a box to a chart.\r\n     * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\r\n     * @param {Chart} chart - the chart to use\r\n     * @param {ILayoutItem} item - the item to add to be layed out\r\n     */\n    addBox: function (chart, item) {\n      if (!chart.boxes) {\n        chart.boxes = [];\n      }\n\n      // initialize item with default values\n      item.fullWidth = item.fullWidth || false;\n      item.position = item.position || 'top';\n      item.weight = item.weight || 0;\n      item._layers = item._layers || function () {\n        return [{\n          z: 0,\n          draw: function () {\n            item.draw.apply(item, arguments);\n          }\n        }];\n      };\n      chart.boxes.push(item);\n    },\n    /**\r\n     * Remove a layoutItem from a chart\r\n     * @param {Chart} chart - the chart to remove the box from\r\n     * @param {ILayoutItem} layoutItem - the item to remove from the layout\r\n     */\n    removeBox: function (chart, layoutItem) {\n      var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n      if (index !== -1) {\n        chart.boxes.splice(index, 1);\n      }\n    },\n    /**\r\n     * Sets (or updates) options on the given `item`.\r\n     * @param {Chart} chart - the chart in which the item lives (or will be added to)\r\n     * @param {ILayoutItem} item - the item to configure with the given options\r\n     * @param {object} options - the new item options.\r\n     */\n    configure: function (chart, item, options) {\n      var props = ['fullWidth', 'position', 'weight'];\n      var ilen = props.length;\n      var i = 0;\n      var prop;\n      for (; i < ilen; ++i) {\n        prop = props[i];\n        if (options.hasOwnProperty(prop)) {\n          item[prop] = options[prop];\n        }\n      }\n    },\n    /**\r\n     * Fits boxes of the given chart into the given size by having each box measure itself\r\n     * then running a fitting algorithm\r\n     * @param {Chart} chart - the chart\r\n     * @param {number} width - the width to fit into\r\n     * @param {number} height - the height to fit into\r\n     */\n    update: function (chart, width, height) {\n      if (!chart) {\n        return;\n      }\n      var layoutOptions = chart.options.layout || {};\n      var padding = helpers$1.options.toPadding(layoutOptions.padding);\n      var availableWidth = width - padding.width;\n      var availableHeight = height - padding.height;\n      var boxes = buildLayoutBoxes(chart.boxes);\n      var verticalBoxes = boxes.vertical;\n      var horizontalBoxes = boxes.horizontal;\n\n      // Essentially we now have any number of boxes on each of the 4 sides.\n      // Our canvas looks like the following.\n      // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n      // B1 is the bottom axis\n      // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n      // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n      // an error will be thrown.\n      //\n      // |----------------------------------------------------|\n      // |                  T1 (Full Width)                   |\n      // |----------------------------------------------------|\n      // |    |    |                 T2                  |    |\n      // |    |----|-------------------------------------|----|\n      // |    |    | C1 |                           | C2 |    |\n      // |    |    |----|                           |----|    |\n      // |    |    |                                     |    |\n      // | L1 | L2 |           ChartArea (C0)            | R1 |\n      // |    |    |                                     |    |\n      // |    |    |----|                           |----|    |\n      // |    |    | C3 |                           | C4 |    |\n      // |    |----|-------------------------------------|----|\n      // |    |    |                 B1                  |    |\n      // |----------------------------------------------------|\n      // |                  B2 (Full Width)                   |\n      // |----------------------------------------------------|\n      //\n\n      var params = Object.freeze({\n        outerWidth: width,\n        outerHeight: height,\n        padding: padding,\n        availableWidth: availableWidth,\n        vBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,\n        hBoxMaxHeight: availableHeight / 2\n      });\n      var chartArea = extend({\n        maxPadding: extend({}, padding),\n        w: availableWidth,\n        h: availableHeight,\n        x: padding.left,\n        y: padding.top\n      }, padding);\n      setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n      // First fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params);\n\n      // Then fit horizontal boxes\n      if (fitBoxes(horizontalBoxes, chartArea, params)) {\n        // if the area changed, re-fit vertical boxes\n        fitBoxes(verticalBoxes, chartArea, params);\n      }\n      handleMaxPadding(chartArea);\n\n      // Finally place the boxes to correct coordinates\n      placeBoxes(boxes.leftAndTop, chartArea, params);\n\n      // Move to opposite side of chart\n      chartArea.x += chartArea.w;\n      chartArea.y += chartArea.h;\n      placeBoxes(boxes.rightAndBottom, chartArea, params);\n      chart.chartArea = {\n        left: chartArea.left,\n        top: chartArea.top,\n        right: chartArea.left + chartArea.w,\n        bottom: chartArea.top + chartArea.h\n      };\n\n      // Finally update boxes in chartArea (radial scale for example)\n      helpers$1.each(boxes.chartArea, function (layout) {\n        var box = layout.box;\n        extend(box, chart.chartArea);\n        box.update(chartArea.w, chartArea.h);\n      });\n    }\n  };\n\n  /**\r\n   * Platform fallback implementation (minimal).\r\n   * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\r\n   */\n\n  var platform_basic = {\n    acquireContext: function (item) {\n      if (item && item.canvas) {\n        // Support for any object associated to a canvas (including a context2d)\n        item = item.canvas;\n      }\n      return item && item.getContext('2d') || null;\n    }\n  };\n  var platform_dom = \"/*\\r\\n * DOM element rendering detection\\r\\n * https://davidwalsh.name/detect-node-insertion\\r\\n */\\r\\n@keyframes chartjs-render-animation {\\r\\n\\tfrom { opacity: 0.99; }\\r\\n\\tto { opacity: 1; }\\r\\n}\\r\\n\\r\\n.chartjs-render-monitor {\\r\\n\\tanimation: chartjs-render-animation 0.001s;\\r\\n}\\r\\n\\r\\n/*\\r\\n * DOM element resizing detection\\r\\n * https://github.com/marcj/css-element-queries\\r\\n */\\r\\n.chartjs-size-monitor,\\r\\n.chartjs-size-monitor-expand,\\r\\n.chartjs-size-monitor-shrink {\\r\\n\\tposition: absolute;\\r\\n\\tdirection: ltr;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n\\tright: 0;\\r\\n\\tbottom: 0;\\r\\n\\toverflow: hidden;\\r\\n\\tpointer-events: none;\\r\\n\\tvisibility: hidden;\\r\\n\\tz-index: -1;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-expand > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 1000000px;\\r\\n\\theight: 1000000px;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-shrink > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 200%;\\r\\n\\theight: 200%;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\";\n  var platform_dom$1 = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    'default': platform_dom\n  });\n  var stylesheet = getCjsExportFromNamespace(platform_dom$1);\n  var EXPANDO_KEY = '$chartjs';\n  var CSS_PREFIX = 'chartjs-';\n  var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\n  var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\n  var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\n  var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\n\n  /**\r\n   * DOM event types -> Chart.js event types.\r\n   * Note: only events with different types are mapped.\r\n   * @see https://developer.mozilla.org/en-US/docs/Web/Events\r\n   */\n  var EVENT_TYPES = {\n    touchstart: 'mousedown',\n    touchmove: 'mousemove',\n    touchend: 'mouseup',\n    pointerenter: 'mouseenter',\n    pointerdown: 'mousedown',\n    pointermove: 'mousemove',\n    pointerup: 'mouseup',\n    pointerleave: 'mouseout',\n    pointerout: 'mouseout'\n  };\n\n  /**\r\n   * The \"used\" size is the final value of a dimension property after all calculations have\r\n   * been performed. This method uses the computed style of `element` but returns undefined\r\n   * if the computed style is not expressed in pixels. That can happen in some cases where\r\n   * `element` has a size relative to its parent and this last one is not yet displayed,\r\n   * for example because of `display: none` on a parent node.\r\n   * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\r\n   * @returns {number} Size in pixels or undefined if unknown.\r\n   */\n  function readUsedSize(element, property) {\n    var value = helpers$1.getStyle(element, property);\n    var matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n    return matches ? Number(matches[1]) : undefined;\n  }\n\n  /**\r\n   * Initializes the canvas style and render size without modifying the canvas display size,\r\n   * since responsiveness is handled by the controller.resize() method. The config is used\r\n   * to determine the aspect ratio to apply in case no explicit height has been specified.\r\n   */\n  function initCanvas(canvas, config) {\n    var style = canvas.style;\n\n    // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n    // returns null or '' if no explicit value has been set to the canvas attribute.\n    var renderHeight = canvas.getAttribute('height');\n    var renderWidth = canvas.getAttribute('width');\n\n    // Chart.js modifies some canvas values that we want to restore on destroy\n    canvas[EXPANDO_KEY] = {\n      initial: {\n        height: renderHeight,\n        width: renderWidth,\n        style: {\n          display: style.display,\n          height: style.height,\n          width: style.width\n        }\n      }\n    };\n\n    // Force canvas to display as block to avoid extra space caused by inline\n    // elements, which would interfere with the responsive resize process.\n    // https://github.com/chartjs/Chart.js/issues/2538\n    style.display = style.display || 'block';\n    if (renderWidth === null || renderWidth === '') {\n      var displayWidth = readUsedSize(canvas, 'width');\n      if (displayWidth !== undefined) {\n        canvas.width = displayWidth;\n      }\n    }\n    if (renderHeight === null || renderHeight === '') {\n      if (canvas.style.height === '') {\n        // If no explicit render height and style height, let's apply the aspect ratio,\n        // which one can be specified by the user but also by charts as default option\n        // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n        canvas.height = canvas.width / (config.options.aspectRatio || 2);\n      } else {\n        var displayHeight = readUsedSize(canvas, 'height');\n        if (displayWidth !== undefined) {\n          canvas.height = displayHeight;\n        }\n      }\n    }\n    return canvas;\n  }\n\n  /**\r\n   * Detects support for options object argument in addEventListener.\r\n   * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\r\n   * @private\r\n   */\n  var supportsEventListenerOptions = function () {\n    var supports = false;\n    try {\n      var options = Object.defineProperty({}, 'passive', {\n        // eslint-disable-next-line getter-return\n        get: function () {\n          supports = true;\n        }\n      });\n      window.addEventListener('e', null, options);\n    } catch (e) {\n      // continue regardless of error\n    }\n    return supports;\n  }();\n\n  // Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n  // https://github.com/chartjs/Chart.js/issues/4287\n  var eventListenerOptions = supportsEventListenerOptions ? {\n    passive: true\n  } : false;\n  function addListener(node, type, listener) {\n    node.addEventListener(type, listener, eventListenerOptions);\n  }\n  function removeListener(node, type, listener) {\n    node.removeEventListener(type, listener, eventListenerOptions);\n  }\n  function createEvent(type, chart, x, y, nativeEvent) {\n    return {\n      type: type,\n      chart: chart,\n      native: nativeEvent || null,\n      x: x !== undefined ? x : null,\n      y: y !== undefined ? y : null\n    };\n  }\n  function fromNativeEvent(event, chart) {\n    var type = EVENT_TYPES[event.type] || event.type;\n    var pos = helpers$1.getRelativePosition(event, chart);\n    return createEvent(type, chart, pos.x, pos.y, event);\n  }\n  function throttled(fn, thisArg) {\n    var ticking = false;\n    var args = [];\n    return function () {\n      args = Array.prototype.slice.call(arguments);\n      thisArg = thisArg || this;\n      if (!ticking) {\n        ticking = true;\n        helpers$1.requestAnimFrame.call(window, function () {\n          ticking = false;\n          fn.apply(thisArg, args);\n        });\n      }\n    };\n  }\n  function createDiv(cls) {\n    var el = document.createElement('div');\n    el.className = cls || '';\n    return el;\n  }\n\n  // Implementation based on https://github.com/marcj/css-element-queries\n  function createResizer(handler) {\n    var maxSize = 1000000;\n\n    // NOTE(SB) Don't use innerHTML because it could be considered unsafe.\n    // https://github.com/chartjs/Chart.js/issues/5902\n    var resizer = createDiv(CSS_SIZE_MONITOR);\n    var expand = createDiv(CSS_SIZE_MONITOR + '-expand');\n    var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\n    expand.appendChild(createDiv());\n    shrink.appendChild(createDiv());\n    resizer.appendChild(expand);\n    resizer.appendChild(shrink);\n    resizer._reset = function () {\n      expand.scrollLeft = maxSize;\n      expand.scrollTop = maxSize;\n      shrink.scrollLeft = maxSize;\n      shrink.scrollTop = maxSize;\n    };\n    var onScroll = function () {\n      resizer._reset();\n      handler();\n    };\n    addListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n    addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n    return resizer;\n  }\n\n  // https://davidwalsh.name/detect-node-insertion\n  function watchForRender(node, handler) {\n    var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n    var proxy = expando.renderProxy = function (e) {\n      if (e.animationName === CSS_RENDER_ANIMATION) {\n        handler();\n      }\n    };\n    helpers$1.each(ANIMATION_START_EVENTS, function (type) {\n      addListener(node, type, proxy);\n    });\n\n    // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n    // is removed then added back immediately (same animation frame?). Accessing the\n    // `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n    // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n    // https://github.com/chartjs/Chart.js/issues/4737\n    expando.reflow = !!node.offsetParent;\n    node.classList.add(CSS_RENDER_MONITOR);\n  }\n  function unwatchForRender(node) {\n    var expando = node[EXPANDO_KEY] || {};\n    var proxy = expando.renderProxy;\n    if (proxy) {\n      helpers$1.each(ANIMATION_START_EVENTS, function (type) {\n        removeListener(node, type, proxy);\n      });\n      delete expando.renderProxy;\n    }\n    node.classList.remove(CSS_RENDER_MONITOR);\n  }\n  function addResizeListener(node, listener, chart) {\n    var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n    // Let's keep track of this added resizer and thus avoid DOM query when removing it.\n    var resizer = expando.resizer = createResizer(throttled(function () {\n      if (expando.resizer) {\n        var container = chart.options.maintainAspectRatio && node.parentNode;\n        var w = container ? container.clientWidth : 0;\n        listener(createEvent('resize', chart));\n        if (container && container.clientWidth < w && chart.canvas) {\n          // If the container size shrank during chart resize, let's assume\n          // scrollbar appeared. So we resize again with the scrollbar visible -\n          // effectively making chart smaller and the scrollbar hidden again.\n          // Because we are inside `throttled`, and currently `ticking`, scroll\n          // events are ignored during this whole 2 resize process.\n          // If we assumed wrong and something else happened, we are resizing\n          // twice in a frame (potential performance issue)\n          listener(createEvent('resize', chart));\n        }\n      }\n    }));\n\n    // The resizer needs to be attached to the node parent, so we first need to be\n    // sure that `node` is attached to the DOM before injecting the resizer element.\n    watchForRender(node, function () {\n      if (expando.resizer) {\n        var container = node.parentNode;\n        if (container && container !== resizer.parentNode) {\n          container.insertBefore(resizer, container.firstChild);\n        }\n\n        // The container size might have changed, let's reset the resizer state.\n        resizer._reset();\n      }\n    });\n  }\n  function removeResizeListener(node) {\n    var expando = node[EXPANDO_KEY] || {};\n    var resizer = expando.resizer;\n    delete expando.resizer;\n    unwatchForRender(node);\n    if (resizer && resizer.parentNode) {\n      resizer.parentNode.removeChild(resizer);\n    }\n  }\n\n  /**\r\n   * Injects CSS styles inline if the styles are not already present.\r\n   * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the <style>.\r\n   * @param {string} css - the CSS to be injected.\r\n   */\n  function injectCSS(rootNode, css) {\n    // https://stackoverflow.com/q/3922139\n    var expando = rootNode[EXPANDO_KEY] || (rootNode[EXPANDO_KEY] = {});\n    if (!expando.containsStyles) {\n      expando.containsStyles = true;\n      css = '/* Chart.js */\\n' + css;\n      var style = document.createElement('style');\n      style.setAttribute('type', 'text/css');\n      style.appendChild(document.createTextNode(css));\n      rootNode.appendChild(style);\n    }\n  }\n  var platform_dom$2 = {\n    /**\r\n     * When `true`, prevents the automatic injection of the stylesheet required to\r\n     * correctly detect when the chart is added to the DOM and then resized. This\r\n     * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)\r\n     * to be manually imported to make this library compatible with any CSP.\r\n     * See https://github.com/chartjs/Chart.js/issues/5208\r\n     */\n    disableCSSInjection: false,\n    /**\r\n     * This property holds whether this platform is enabled for the current environment.\r\n     * Currently used by platform.js to select the proper implementation.\r\n     * @private\r\n     */\n    _enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\n    /**\r\n     * Initializes resources that depend on platform options.\r\n     * @param {HTMLCanvasElement} canvas - The Canvas element.\r\n     * @private\r\n     */\n    _ensureLoaded: function (canvas) {\n      if (!this.disableCSSInjection) {\n        // If the canvas is in a shadow DOM, then the styles must also be inserted\n        // into the same shadow DOM.\n        // https://github.com/chartjs/Chart.js/issues/5763\n        var root = canvas.getRootNode ? canvas.getRootNode() : document;\n        var targetNode = root.host ? root : document.head;\n        injectCSS(targetNode, stylesheet);\n      }\n    },\n    acquireContext: function (item, config) {\n      if (typeof item === 'string') {\n        item = document.getElementById(item);\n      } else if (item.length) {\n        // Support for array based queries (such as jQuery)\n        item = item[0];\n      }\n      if (item && item.canvas) {\n        // Support for any object associated to a canvas (including a context2d)\n        item = item.canvas;\n      }\n\n      // To prevent canvas fingerprinting, some add-ons undefine the getContext\n      // method, for example: https://github.com/kkapsner/CanvasBlocker\n      // https://github.com/chartjs/Chart.js/issues/2807\n      var context = item && item.getContext && item.getContext('2d');\n\n      // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\n      // inside an iframe or when running in a protected environment. We could guess the\n      // types from their toString() value but let's keep things flexible and assume it's\n      // a sufficient condition if the item has a context2D which has item as `canvas`.\n      // https://github.com/chartjs/Chart.js/issues/3887\n      // https://github.com/chartjs/Chart.js/issues/4102\n      // https://github.com/chartjs/Chart.js/issues/4152\n      if (context && context.canvas === item) {\n        // Load platform resources on first chart creation, to make it possible to\n        // import the library before setting platform options.\n        this._ensureLoaded(item);\n        initCanvas(item, config);\n        return context;\n      }\n      return null;\n    },\n    releaseContext: function (context) {\n      var canvas = context.canvas;\n      if (!canvas[EXPANDO_KEY]) {\n        return;\n      }\n      var initial = canvas[EXPANDO_KEY].initial;\n      ['height', 'width'].forEach(function (prop) {\n        var value = initial[prop];\n        if (helpers$1.isNullOrUndef(value)) {\n          canvas.removeAttribute(prop);\n        } else {\n          canvas.setAttribute(prop, value);\n        }\n      });\n      helpers$1.each(initial.style || {}, function (value, key) {\n        canvas.style[key] = value;\n      });\n\n      // The canvas render size might have been changed (and thus the state stack discarded),\n      // we can't use save() and restore() to restore the initial state. So make sure that at\n      // least the canvas context is reset to the default state by setting the canvas width.\n      // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n      // eslint-disable-next-line no-self-assign\n      canvas.width = canvas.width;\n      delete canvas[EXPANDO_KEY];\n    },\n    addEventListener: function (chart, type, listener) {\n      var canvas = chart.canvas;\n      if (type === 'resize') {\n        // Note: the resize event is not supported on all browsers.\n        addResizeListener(canvas, listener, chart);\n        return;\n      }\n      var expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\n      var proxies = expando.proxies || (expando.proxies = {});\n      var proxy = proxies[chart.id + '_' + type] = function (event) {\n        listener(fromNativeEvent(event, chart));\n      };\n      addListener(canvas, type, proxy);\n    },\n    removeEventListener: function (chart, type, listener) {\n      var canvas = chart.canvas;\n      if (type === 'resize') {\n        // Note: the resize event is not supported on all browsers.\n        removeResizeListener(canvas);\n        return;\n      }\n      var expando = listener[EXPANDO_KEY] || {};\n      var proxies = expando.proxies || {};\n      var proxy = proxies[chart.id + '_' + type];\n      if (!proxy) {\n        return;\n      }\n      removeListener(canvas, type, proxy);\n    }\n  };\n\n  // DEPRECATIONS\n\n  /**\r\n   * Provided for backward compatibility, use EventTarget.addEventListener instead.\r\n   * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n   * @function Chart.helpers.addEvent\r\n   * @deprecated since version 2.7.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers$1.addEvent = addListener;\n\n  /**\r\n   * Provided for backward compatibility, use EventTarget.removeEventListener instead.\r\n   * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\r\n   * @function Chart.helpers.removeEvent\r\n   * @deprecated since version 2.7.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers$1.removeEvent = removeListener;\n\n  // @TODO Make possible to select another platform at build time.\n  var implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;\n\n  /**\r\n   * @namespace Chart.platform\r\n   * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\r\n   * @since 2.4.0\r\n   */\n  var platform = helpers$1.extend({\n    /**\r\n     * @since 2.7.0\r\n     */\n    initialize: function () {},\n    /**\r\n     * Called at chart construction time, returns a context2d instance implementing\r\n     * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\r\n     * @param {*} item - The native item from which to acquire context (platform specific)\r\n     * @param {object} options - The chart options\r\n     * @returns {CanvasRenderingContext2D} context2d instance\r\n     */\n    acquireContext: function () {},\n    /**\r\n     * Called at chart destruction time, releases any resources associated to the context\r\n     * previously returned by the acquireContext() method.\r\n     * @param {CanvasRenderingContext2D} context - The context2d instance\r\n     * @returns {boolean} true if the method succeeded, else false\r\n     */\n    releaseContext: function () {},\n    /**\r\n     * Registers the specified listener on the given chart.\r\n     * @param {Chart} chart - Chart from which to listen for event\r\n     * @param {string} type - The ({@link IEvent}) type to listen for\r\n     * @param {function} listener - Receives a notification (an object that implements\r\n     * the {@link IEvent} interface) when an event of the specified type occurs.\r\n     */\n    addEventListener: function () {},\n    /**\r\n     * Removes the specified listener previously registered with addEventListener.\r\n     * @param {Chart} chart - Chart from which to remove the listener\r\n     * @param {string} type - The ({@link IEvent}) type to remove\r\n     * @param {function} listener - The listener function to remove from the event target.\r\n     */\n    removeEventListener: function () {}\n  }, implementation);\n  core_defaults._set('global', {\n    plugins: {}\n  });\n\n  /**\r\n   * The plugin service singleton\r\n   * @namespace Chart.plugins\r\n   * @since 2.1.0\r\n   */\n  var core_plugins = {\n    /**\r\n     * Globally registered plugins.\r\n     * @private\r\n     */\n    _plugins: [],\n    /**\r\n     * This identifier is used to invalidate the descriptors cache attached to each chart\r\n     * when a global plugin is registered or unregistered. In this case, the cache ID is\r\n     * incremented and descriptors are regenerated during following API calls.\r\n     * @private\r\n     */\n    _cacheId: 0,\n    /**\r\n     * Registers the given plugin(s) if not already registered.\r\n     * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n     */\n    register: function (plugins) {\n      var p = this._plugins;\n      [].concat(plugins).forEach(function (plugin) {\n        if (p.indexOf(plugin) === -1) {\n          p.push(plugin);\n        }\n      });\n      this._cacheId++;\n    },\n    /**\r\n     * Unregisters the given plugin(s) only if registered.\r\n     * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n     */\n    unregister: function (plugins) {\n      var p = this._plugins;\n      [].concat(plugins).forEach(function (plugin) {\n        var idx = p.indexOf(plugin);\n        if (idx !== -1) {\n          p.splice(idx, 1);\n        }\n      });\n      this._cacheId++;\n    },\n    /**\r\n     * Remove all registered plugins.\r\n     * @since 2.1.5\r\n     */\n    clear: function () {\n      this._plugins = [];\n      this._cacheId++;\n    },\n    /**\r\n     * Returns the number of registered plugins?\r\n     * @returns {number}\r\n     * @since 2.1.5\r\n     */\n    count: function () {\n      return this._plugins.length;\n    },\n    /**\r\n     * Returns all registered plugin instances.\r\n     * @returns {IPlugin[]} array of plugin objects.\r\n     * @since 2.1.5\r\n     */\n    getAll: function () {\n      return this._plugins;\n    },\n    /**\r\n     * Calls enabled plugins for `chart` on the specified hook and with the given args.\r\n     * This method immediately returns as soon as a plugin explicitly returns false. The\r\n     * returned value can be used, for instance, to interrupt the current action.\r\n     * @param {Chart} chart - The chart instance for which plugins should be called.\r\n     * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\r\n     * @param {Array} [args] - Extra arguments to apply to the hook call.\r\n     * @returns {boolean} false if any of the plugins return false, else returns true.\r\n     */\n    notify: function (chart, hook, args) {\n      var descriptors = this.descriptors(chart);\n      var ilen = descriptors.length;\n      var i, descriptor, plugin, params, method;\n      for (i = 0; i < ilen; ++i) {\n        descriptor = descriptors[i];\n        plugin = descriptor.plugin;\n        method = plugin[hook];\n        if (typeof method === 'function') {\n          params = [chart].concat(args || []);\n          params.push(descriptor.options);\n          if (method.apply(plugin, params) === false) {\n            return false;\n          }\n        }\n      }\n      return true;\n    },\n    /**\r\n     * Returns descriptors of enabled plugins for the given chart.\r\n     * @returns {object[]} [{ plugin, options }]\r\n     * @private\r\n     */\n    descriptors: function (chart) {\n      var cache = chart.$plugins || (chart.$plugins = {});\n      if (cache.id === this._cacheId) {\n        return cache.descriptors;\n      }\n      var plugins = [];\n      var descriptors = [];\n      var config = chart && chart.config || {};\n      var options = config.options && config.options.plugins || {};\n      this._plugins.concat(config.plugins || []).forEach(function (plugin) {\n        var idx = plugins.indexOf(plugin);\n        if (idx !== -1) {\n          return;\n        }\n        var id = plugin.id;\n        var opts = options[id];\n        if (opts === false) {\n          return;\n        }\n        if (opts === true) {\n          opts = helpers$1.clone(core_defaults.global.plugins[id]);\n        }\n        plugins.push(plugin);\n        descriptors.push({\n          plugin: plugin,\n          options: opts || {}\n        });\n      });\n      cache.descriptors = descriptors;\n      cache.id = this._cacheId;\n      return descriptors;\n    },\n    /**\r\n     * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\r\n     * but in some cases, this reference can be changed by the user when updating options.\r\n     * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n     * @private\r\n     */\n    _invalidate: function (chart) {\n      delete chart.$plugins;\n    }\n  };\n  var core_scaleService = {\n    // Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\n    // use the new chart options to grab the correct scale\n    constructors: {},\n    // Use a registration function so that we can move to an ES6 map when we no longer need to support\n    // old browsers\n\n    // Scale config defaults\n    defaults: {},\n    registerScaleType: function (type, scaleConstructor, scaleDefaults) {\n      this.constructors[type] = scaleConstructor;\n      this.defaults[type] = helpers$1.clone(scaleDefaults);\n    },\n    getScaleConstructor: function (type) {\n      return this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\n    },\n    getScaleDefaults: function (type) {\n      // Return the scale defaults merged with the global settings so that we always use the latest ones\n      return this.defaults.hasOwnProperty(type) ? helpers$1.merge(Object.create(null), [core_defaults.scale, this.defaults[type]]) : {};\n    },\n    updateScaleDefaults: function (type, additions) {\n      var me = this;\n      if (me.defaults.hasOwnProperty(type)) {\n        me.defaults[type] = helpers$1.extend(me.defaults[type], additions);\n      }\n    },\n    addScalesToLayout: function (chart) {\n      // Adds each scale to the chart.boxes array to be sized accordingly\n      helpers$1.each(chart.scales, function (scale) {\n        // Set ILayoutItem parameters for backwards compatibility\n        scale.fullWidth = scale.options.fullWidth;\n        scale.position = scale.options.position;\n        scale.weight = scale.options.weight;\n        core_layouts.addBox(chart, scale);\n      });\n    }\n  };\n  var valueOrDefault$8 = helpers$1.valueOrDefault;\n  var getRtlHelper = helpers$1.rtl.getRtlAdapter;\n  core_defaults._set('global', {\n    tooltips: {\n      enabled: true,\n      custom: null,\n      mode: 'nearest',\n      position: 'average',\n      intersect: true,\n      backgroundColor: 'rgba(0,0,0,0.8)',\n      titleFontStyle: 'bold',\n      titleSpacing: 2,\n      titleMarginBottom: 6,\n      titleFontColor: '#fff',\n      titleAlign: 'left',\n      bodySpacing: 2,\n      bodyFontColor: '#fff',\n      bodyAlign: 'left',\n      footerFontStyle: 'bold',\n      footerSpacing: 2,\n      footerMarginTop: 6,\n      footerFontColor: '#fff',\n      footerAlign: 'left',\n      yPadding: 6,\n      xPadding: 6,\n      caretPadding: 2,\n      caretSize: 5,\n      cornerRadius: 6,\n      multiKeyBackground: '#fff',\n      displayColors: true,\n      borderColor: 'rgba(0,0,0,0)',\n      borderWidth: 0,\n      callbacks: {\n        // Args are: (tooltipItems, data)\n        beforeTitle: helpers$1.noop,\n        title: function (tooltipItems, data) {\n          var title = '';\n          var labels = data.labels;\n          var labelCount = labels ? labels.length : 0;\n          if (tooltipItems.length > 0) {\n            var item = tooltipItems[0];\n            if (item.label) {\n              title = item.label;\n            } else if (item.xLabel) {\n              title = item.xLabel;\n            } else if (labelCount > 0 && item.index < labelCount) {\n              title = labels[item.index];\n            }\n          }\n          return title;\n        },\n        afterTitle: helpers$1.noop,\n        // Args are: (tooltipItems, data)\n        beforeBody: helpers$1.noop,\n        // Args are: (tooltipItem, data)\n        beforeLabel: helpers$1.noop,\n        label: function (tooltipItem, data) {\n          var label = data.datasets[tooltipItem.datasetIndex].label || '';\n          if (label) {\n            label += ': ';\n          }\n          if (!helpers$1.isNullOrUndef(tooltipItem.value)) {\n            label += tooltipItem.value;\n          } else {\n            label += tooltipItem.yLabel;\n          }\n          return label;\n        },\n        labelColor: function (tooltipItem, chart) {\n          var meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\n          var activeElement = meta.data[tooltipItem.index];\n          var view = activeElement._view;\n          return {\n            borderColor: view.borderColor,\n            backgroundColor: view.backgroundColor\n          };\n        },\n        labelTextColor: function () {\n          return this._options.bodyFontColor;\n        },\n        afterLabel: helpers$1.noop,\n        // Args are: (tooltipItems, data)\n        afterBody: helpers$1.noop,\n        // Args are: (tooltipItems, data)\n        beforeFooter: helpers$1.noop,\n        footer: helpers$1.noop,\n        afterFooter: helpers$1.noop\n      }\n    }\n  });\n  var positioners = {\n    /**\r\n     * Average mode places the tooltip at the average position of the elements shown\r\n     * @function Chart.Tooltip.positioners.average\r\n     * @param elements {ChartElement[]} the elements being displayed in the tooltip\r\n     * @returns {object} tooltip position\r\n     */\n    average: function (elements) {\n      if (!elements.length) {\n        return false;\n      }\n      var i, len;\n      var x = 0;\n      var y = 0;\n      var count = 0;\n      for (i = 0, len = elements.length; i < len; ++i) {\n        var el = elements[i];\n        if (el && el.hasValue()) {\n          var pos = el.tooltipPosition();\n          x += pos.x;\n          y += pos.y;\n          ++count;\n        }\n      }\n      return {\n        x: x / count,\n        y: y / count\n      };\n    },\n    /**\r\n     * Gets the tooltip position nearest of the item nearest to the event position\r\n     * @function Chart.Tooltip.positioners.nearest\r\n     * @param elements {Chart.Element[]} the tooltip elements\r\n     * @param eventPosition {object} the position of the event in canvas coordinates\r\n     * @returns {object} the tooltip position\r\n     */\n    nearest: function (elements, eventPosition) {\n      var x = eventPosition.x;\n      var y = eventPosition.y;\n      var minDistance = Number.POSITIVE_INFINITY;\n      var i, len, nearestElement;\n      for (i = 0, len = elements.length; i < len; ++i) {\n        var el = elements[i];\n        if (el && el.hasValue()) {\n          var center = el.getCenterPoint();\n          var d = helpers$1.distanceBetweenPoints(eventPosition, center);\n          if (d < minDistance) {\n            minDistance = d;\n            nearestElement = el;\n          }\n        }\n      }\n      if (nearestElement) {\n        var tp = nearestElement.tooltipPosition();\n        x = tp.x;\n        y = tp.y;\n      }\n      return {\n        x: x,\n        y: y\n      };\n    }\n  };\n\n  // Helper to push or concat based on if the 2nd parameter is an array or not\n  function pushOrConcat(base, toPush) {\n    if (toPush) {\n      if (helpers$1.isArray(toPush)) {\n        // base = base.concat(toPush);\n        Array.prototype.push.apply(base, toPush);\n      } else {\n        base.push(toPush);\n      }\n    }\n    return base;\n  }\n\n  /**\r\n   * Returns array of strings split by newline\r\n   * @param {string} value - The value to split by newline.\r\n   * @returns {string[]} value if newline present - Returned from String split() method\r\n   * @function\r\n   */\n  function splitNewlines(str) {\n    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n      return str.split('\\n');\n    }\n    return str;\n  }\n\n  /**\r\n   * Private helper to create a tooltip item model\r\n   * @param element - the chart element (point, arc, bar) to create the tooltip item for\r\n   * @return new tooltip item\r\n   */\n  function createTooltipItem(element) {\n    var xScale = element._xScale;\n    var yScale = element._yScale || element._scale; // handle radar || polarArea charts\n    var index = element._index;\n    var datasetIndex = element._datasetIndex;\n    var controller = element._chart.getDatasetMeta(datasetIndex).controller;\n    var indexScale = controller._getIndexScale();\n    var valueScale = controller._getValueScale();\n    return {\n      xLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\n      yLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\n      label: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',\n      value: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',\n      index: index,\n      datasetIndex: datasetIndex,\n      x: element._model.x,\n      y: element._model.y\n    };\n  }\n\n  /**\r\n   * Helper to get the reset model for the tooltip\r\n   * @param tooltipOpts {object} the tooltip options\r\n   */\n  function getBaseModel(tooltipOpts) {\n    var globalDefaults = core_defaults.global;\n    return {\n      // Positioning\n      xPadding: tooltipOpts.xPadding,\n      yPadding: tooltipOpts.yPadding,\n      xAlign: tooltipOpts.xAlign,\n      yAlign: tooltipOpts.yAlign,\n      // Drawing direction and text direction\n      rtl: tooltipOpts.rtl,\n      textDirection: tooltipOpts.textDirection,\n      // Body\n      bodyFontColor: tooltipOpts.bodyFontColor,\n      _bodyFontFamily: valueOrDefault$8(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\n      _bodyFontStyle: valueOrDefault$8(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\n      _bodyAlign: tooltipOpts.bodyAlign,\n      bodyFontSize: valueOrDefault$8(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\n      bodySpacing: tooltipOpts.bodySpacing,\n      // Title\n      titleFontColor: tooltipOpts.titleFontColor,\n      _titleFontFamily: valueOrDefault$8(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\n      _titleFontStyle: valueOrDefault$8(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\n      titleFontSize: valueOrDefault$8(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\n      _titleAlign: tooltipOpts.titleAlign,\n      titleSpacing: tooltipOpts.titleSpacing,\n      titleMarginBottom: tooltipOpts.titleMarginBottom,\n      // Footer\n      footerFontColor: tooltipOpts.footerFontColor,\n      _footerFontFamily: valueOrDefault$8(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\n      _footerFontStyle: valueOrDefault$8(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\n      footerFontSize: valueOrDefault$8(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\n      _footerAlign: tooltipOpts.footerAlign,\n      footerSpacing: tooltipOpts.footerSpacing,\n      footerMarginTop: tooltipOpts.footerMarginTop,\n      // Appearance\n      caretSize: tooltipOpts.caretSize,\n      cornerRadius: tooltipOpts.cornerRadius,\n      backgroundColor: tooltipOpts.backgroundColor,\n      opacity: 0,\n      legendColorBackground: tooltipOpts.multiKeyBackground,\n      displayColors: tooltipOpts.displayColors,\n      borderColor: tooltipOpts.borderColor,\n      borderWidth: tooltipOpts.borderWidth\n    };\n  }\n\n  /**\r\n   * Get the size of the tooltip\r\n   */\n  function getTooltipSize(tooltip, model) {\n    var ctx = tooltip._chart.ctx;\n    var height = model.yPadding * 2; // Tooltip Padding\n    var width = 0;\n\n    // Count of all lines in the body\n    var body = model.body;\n    var combinedBodyLength = body.reduce(function (count, bodyItem) {\n      return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n    }, 0);\n    combinedBodyLength += model.beforeBody.length + model.afterBody.length;\n    var titleLineCount = model.title.length;\n    var footerLineCount = model.footer.length;\n    var titleFontSize = model.titleFontSize;\n    var bodyFontSize = model.bodyFontSize;\n    var footerFontSize = model.footerFontSize;\n    height += titleLineCount * titleFontSize; // Title Lines\n    height += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\n    height += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\n    height += combinedBodyLength * bodyFontSize; // Body Lines\n    height += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\n    height += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\n    height += footerLineCount * footerFontSize; // Footer Lines\n    height += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\n\n    // Title width\n    var widthPadding = 0;\n    var maxLineWidth = function (line) {\n      width = Math.max(width, ctx.measureText(line).width + widthPadding);\n    };\n    ctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\n    helpers$1.each(model.title, maxLineWidth);\n\n    // Body width\n    ctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\n    helpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\n\n    // Body lines may include some extra width due to the color box\n    widthPadding = model.displayColors ? bodyFontSize + 2 : 0;\n    helpers$1.each(body, function (bodyItem) {\n      helpers$1.each(bodyItem.before, maxLineWidth);\n      helpers$1.each(bodyItem.lines, maxLineWidth);\n      helpers$1.each(bodyItem.after, maxLineWidth);\n    });\n\n    // Reset back to 0\n    widthPadding = 0;\n\n    // Footer width\n    ctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\n    helpers$1.each(model.footer, maxLineWidth);\n\n    // Add padding\n    width += 2 * model.xPadding;\n    return {\n      width: width,\n      height: height\n    };\n  }\n\n  /**\r\n   * Helper to get the alignment of a tooltip given the size\r\n   */\n  function determineAlignment(tooltip, size) {\n    var model = tooltip._model;\n    var chart = tooltip._chart;\n    var chartArea = tooltip._chart.chartArea;\n    var xAlign = 'center';\n    var yAlign = 'center';\n    if (model.y < size.height) {\n      yAlign = 'top';\n    } else if (model.y > chart.height - size.height) {\n      yAlign = 'bottom';\n    }\n    var lf, rf; // functions to determine left, right alignment\n    var olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\n    var yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\n    var midX = (chartArea.left + chartArea.right) / 2;\n    var midY = (chartArea.top + chartArea.bottom) / 2;\n    if (yAlign === 'center') {\n      lf = function (x) {\n        return x <= midX;\n      };\n      rf = function (x) {\n        return x > midX;\n      };\n    } else {\n      lf = function (x) {\n        return x <= size.width / 2;\n      };\n      rf = function (x) {\n        return x >= chart.width - size.width / 2;\n      };\n    }\n    olf = function (x) {\n      return x + size.width + model.caretSize + model.caretPadding > chart.width;\n    };\n    orf = function (x) {\n      return x - size.width - model.caretSize - model.caretPadding < 0;\n    };\n    yf = function (y) {\n      return y <= midY ? 'top' : 'bottom';\n    };\n    if (lf(model.x)) {\n      xAlign = 'left';\n\n      // Is tooltip too wide and goes over the right side of the chart.?\n      if (olf(model.x)) {\n        xAlign = 'center';\n        yAlign = yf(model.y);\n      }\n    } else if (rf(model.x)) {\n      xAlign = 'right';\n\n      // Is tooltip too wide and goes outside left edge of canvas?\n      if (orf(model.x)) {\n        xAlign = 'center';\n        yAlign = yf(model.y);\n      }\n    }\n    var opts = tooltip._options;\n    return {\n      xAlign: opts.xAlign ? opts.xAlign : xAlign,\n      yAlign: opts.yAlign ? opts.yAlign : yAlign\n    };\n  }\n\n  /**\r\n   * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\r\n   */\n  function getBackgroundPoint(vm, size, alignment, chart) {\n    // Background Position\n    var x = vm.x;\n    var y = vm.y;\n    var caretSize = vm.caretSize;\n    var caretPadding = vm.caretPadding;\n    var cornerRadius = vm.cornerRadius;\n    var xAlign = alignment.xAlign;\n    var yAlign = alignment.yAlign;\n    var paddingAndSize = caretSize + caretPadding;\n    var radiusAndPadding = cornerRadius + caretPadding;\n    if (xAlign === 'right') {\n      x -= size.width;\n    } else if (xAlign === 'center') {\n      x -= size.width / 2;\n      if (x + size.width > chart.width) {\n        x = chart.width - size.width;\n      }\n      if (x < 0) {\n        x = 0;\n      }\n    }\n    if (yAlign === 'top') {\n      y += paddingAndSize;\n    } else if (yAlign === 'bottom') {\n      y -= size.height + paddingAndSize;\n    } else {\n      y -= size.height / 2;\n    }\n    if (yAlign === 'center') {\n      if (xAlign === 'left') {\n        x += paddingAndSize;\n      } else if (xAlign === 'right') {\n        x -= paddingAndSize;\n      }\n    } else if (xAlign === 'left') {\n      x -= radiusAndPadding;\n    } else if (xAlign === 'right') {\n      x += radiusAndPadding;\n    }\n    return {\n      x: x,\n      y: y\n    };\n  }\n  function getAlignedX(vm, align) {\n    return align === 'center' ? vm.x + vm.width / 2 : align === 'right' ? vm.x + vm.width - vm.xPadding : vm.x + vm.xPadding;\n  }\n\n  /**\r\n   * Helper to build before and after body lines\r\n   */\n  function getBeforeAfterBodyLines(callback) {\n    return pushOrConcat([], splitNewlines(callback));\n  }\n  var exports$4 = core_element.extend({\n    initialize: function () {\n      this._model = getBaseModel(this._options);\n      this._lastActive = [];\n    },\n    // Get the title\n    // Args are: (tooltipItem, data)\n    getTitle: function () {\n      var me = this;\n      var opts = me._options;\n      var callbacks = opts.callbacks;\n      var beforeTitle = callbacks.beforeTitle.apply(me, arguments);\n      var title = callbacks.title.apply(me, arguments);\n      var afterTitle = callbacks.afterTitle.apply(me, arguments);\n      var lines = [];\n      lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n      lines = pushOrConcat(lines, splitNewlines(title));\n      lines = pushOrConcat(lines, splitNewlines(afterTitle));\n      return lines;\n    },\n    // Args are: (tooltipItem, data)\n    getBeforeBody: function () {\n      return getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\n    },\n    // Args are: (tooltipItem, data)\n    getBody: function (tooltipItems, data) {\n      var me = this;\n      var callbacks = me._options.callbacks;\n      var bodyItems = [];\n      helpers$1.each(tooltipItems, function (tooltipItem) {\n        var bodyItem = {\n          before: [],\n          lines: [],\n          after: []\n        };\n        pushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\n        pushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\n        pushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\n        bodyItems.push(bodyItem);\n      });\n      return bodyItems;\n    },\n    // Args are: (tooltipItem, data)\n    getAfterBody: function () {\n      return getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\n    },\n    // Get the footer and beforeFooter and afterFooter lines\n    // Args are: (tooltipItem, data)\n    getFooter: function () {\n      var me = this;\n      var callbacks = me._options.callbacks;\n      var beforeFooter = callbacks.beforeFooter.apply(me, arguments);\n      var footer = callbacks.footer.apply(me, arguments);\n      var afterFooter = callbacks.afterFooter.apply(me, arguments);\n      var lines = [];\n      lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n      lines = pushOrConcat(lines, splitNewlines(footer));\n      lines = pushOrConcat(lines, splitNewlines(afterFooter));\n      return lines;\n    },\n    update: function (changed) {\n      var me = this;\n      var opts = me._options;\n\n      // Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\n      // that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\n      // which breaks any animations.\n      var existingModel = me._model;\n      var model = me._model = getBaseModel(opts);\n      var active = me._active;\n      var data = me._data;\n\n      // In the case where active.length === 0 we need to keep these at existing values for good animations\n      var alignment = {\n        xAlign: existingModel.xAlign,\n        yAlign: existingModel.yAlign\n      };\n      var backgroundPoint = {\n        x: existingModel.x,\n        y: existingModel.y\n      };\n      var tooltipSize = {\n        width: existingModel.width,\n        height: existingModel.height\n      };\n      var tooltipPosition = {\n        x: existingModel.caretX,\n        y: existingModel.caretY\n      };\n      var i, len;\n      if (active.length) {\n        model.opacity = 1;\n        var labelColors = [];\n        var labelTextColors = [];\n        tooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\n        var tooltipItems = [];\n        for (i = 0, len = active.length; i < len; ++i) {\n          tooltipItems.push(createTooltipItem(active[i]));\n        }\n\n        // If the user provided a filter function, use it to modify the tooltip items\n        if (opts.filter) {\n          tooltipItems = tooltipItems.filter(function (a) {\n            return opts.filter(a, data);\n          });\n        }\n\n        // If the user provided a sorting function, use it to modify the tooltip items\n        if (opts.itemSort) {\n          tooltipItems = tooltipItems.sort(function (a, b) {\n            return opts.itemSort(a, b, data);\n          });\n        }\n\n        // Determine colors for boxes\n        helpers$1.each(tooltipItems, function (tooltipItem) {\n          labelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\n          labelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\n        });\n\n        // Build the Text Lines\n        model.title = me.getTitle(tooltipItems, data);\n        model.beforeBody = me.getBeforeBody(tooltipItems, data);\n        model.body = me.getBody(tooltipItems, data);\n        model.afterBody = me.getAfterBody(tooltipItems, data);\n        model.footer = me.getFooter(tooltipItems, data);\n\n        // Initial positioning and colors\n        model.x = tooltipPosition.x;\n        model.y = tooltipPosition.y;\n        model.caretPadding = opts.caretPadding;\n        model.labelColors = labelColors;\n        model.labelTextColors = labelTextColors;\n\n        // data points\n        model.dataPoints = tooltipItems;\n\n        // We need to determine alignment of the tooltip\n        tooltipSize = getTooltipSize(this, model);\n        alignment = determineAlignment(this, tooltipSize);\n        // Final Size and Position\n        backgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\n      } else {\n        model.opacity = 0;\n      }\n      model.xAlign = alignment.xAlign;\n      model.yAlign = alignment.yAlign;\n      model.x = backgroundPoint.x;\n      model.y = backgroundPoint.y;\n      model.width = tooltipSize.width;\n      model.height = tooltipSize.height;\n\n      // Point where the caret on the tooltip points to\n      model.caretX = tooltipPosition.x;\n      model.caretY = tooltipPosition.y;\n      me._model = model;\n      if (changed && opts.custom) {\n        opts.custom.call(me, model);\n      }\n      return me;\n    },\n    drawCaret: function (tooltipPoint, size) {\n      var ctx = this._chart.ctx;\n      var vm = this._view;\n      var caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\n      ctx.lineTo(caretPosition.x1, caretPosition.y1);\n      ctx.lineTo(caretPosition.x2, caretPosition.y2);\n      ctx.lineTo(caretPosition.x3, caretPosition.y3);\n    },\n    getCaretPosition: function (tooltipPoint, size, vm) {\n      var x1, x2, x3, y1, y2, y3;\n      var caretSize = vm.caretSize;\n      var cornerRadius = vm.cornerRadius;\n      var xAlign = vm.xAlign;\n      var yAlign = vm.yAlign;\n      var ptX = tooltipPoint.x;\n      var ptY = tooltipPoint.y;\n      var width = size.width;\n      var height = size.height;\n      if (yAlign === 'center') {\n        y2 = ptY + height / 2;\n        if (xAlign === 'left') {\n          x1 = ptX;\n          x2 = x1 - caretSize;\n          x3 = x1;\n          y1 = y2 + caretSize;\n          y3 = y2 - caretSize;\n        } else {\n          x1 = ptX + width;\n          x2 = x1 + caretSize;\n          x3 = x1;\n          y1 = y2 - caretSize;\n          y3 = y2 + caretSize;\n        }\n      } else {\n        if (xAlign === 'left') {\n          x2 = ptX + cornerRadius + caretSize;\n          x1 = x2 - caretSize;\n          x3 = x2 + caretSize;\n        } else if (xAlign === 'right') {\n          x2 = ptX + width - cornerRadius - caretSize;\n          x1 = x2 - caretSize;\n          x3 = x2 + caretSize;\n        } else {\n          x2 = vm.caretX;\n          x1 = x2 - caretSize;\n          x3 = x2 + caretSize;\n        }\n        if (yAlign === 'top') {\n          y1 = ptY;\n          y2 = y1 - caretSize;\n          y3 = y1;\n        } else {\n          y1 = ptY + height;\n          y2 = y1 + caretSize;\n          y3 = y1;\n          // invert drawing order\n          var tmp = x3;\n          x3 = x1;\n          x1 = tmp;\n        }\n      }\n      return {\n        x1: x1,\n        x2: x2,\n        x3: x3,\n        y1: y1,\n        y2: y2,\n        y3: y3\n      };\n    },\n    drawTitle: function (pt, vm, ctx) {\n      var title = vm.title;\n      var length = title.length;\n      var titleFontSize, titleSpacing, i;\n      if (length) {\n        var rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\n        pt.x = getAlignedX(vm, vm._titleAlign);\n        ctx.textAlign = rtlHelper.textAlign(vm._titleAlign);\n        ctx.textBaseline = 'middle';\n        titleFontSize = vm.titleFontSize;\n        titleSpacing = vm.titleSpacing;\n        ctx.fillStyle = vm.titleFontColor;\n        ctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n        for (i = 0; i < length; ++i) {\n          ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFontSize / 2);\n          pt.y += titleFontSize + titleSpacing; // Line Height and spacing\n\n          if (i + 1 === length) {\n            pt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n          }\n        }\n      }\n    },\n\n    drawBody: function (pt, vm, ctx) {\n      var bodyFontSize = vm.bodyFontSize;\n      var bodySpacing = vm.bodySpacing;\n      var bodyAlign = vm._bodyAlign;\n      var body = vm.body;\n      var drawColorBoxes = vm.displayColors;\n      var xLinePadding = 0;\n      var colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;\n      var rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\n      var fillLineOfText = function (line) {\n        ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyFontSize / 2);\n        pt.y += bodyFontSize + bodySpacing;\n      };\n      var bodyItem, textColor, labelColors, lines, i, j, ilen, jlen;\n      var bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n      ctx.textAlign = bodyAlign;\n      ctx.textBaseline = 'middle';\n      ctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n      pt.x = getAlignedX(vm, bodyAlignForCalculation);\n\n      // Before body lines\n      ctx.fillStyle = vm.bodyFontColor;\n      helpers$1.each(vm.beforeBody, fillLineOfText);\n      xLinePadding = drawColorBoxes && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? bodyFontSize / 2 + 1 : bodyFontSize + 2 : 0;\n\n      // Draw body lines now\n      for (i = 0, ilen = body.length; i < ilen; ++i) {\n        bodyItem = body[i];\n        textColor = vm.labelTextColors[i];\n        labelColors = vm.labelColors[i];\n        ctx.fillStyle = textColor;\n        helpers$1.each(bodyItem.before, fillLineOfText);\n        lines = bodyItem.lines;\n        for (j = 0, jlen = lines.length; j < jlen; ++j) {\n          // Draw Legend-like boxes if needed\n          if (drawColorBoxes) {\n            var rtlColorX = rtlHelper.x(colorX);\n\n            // Fill a white rect so that colours merge nicely if the opacity is < 1\n            ctx.fillStyle = vm.legendColorBackground;\n            ctx.fillRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\n\n            // Border\n            ctx.lineWidth = 1;\n            ctx.strokeStyle = labelColors.borderColor;\n            ctx.strokeRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\n\n            // Inner square\n            ctx.fillStyle = labelColors.backgroundColor;\n            ctx.fillRect(rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), bodyFontSize - 2), pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n            ctx.fillStyle = textColor;\n          }\n          fillLineOfText(lines[j]);\n        }\n        helpers$1.each(bodyItem.after, fillLineOfText);\n      }\n\n      // Reset back to 0 for after body\n      xLinePadding = 0;\n\n      // After body lines\n      helpers$1.each(vm.afterBody, fillLineOfText);\n      pt.y -= bodySpacing; // Remove last body spacing\n    },\n\n    drawFooter: function (pt, vm, ctx) {\n      var footer = vm.footer;\n      var length = footer.length;\n      var footerFontSize, i;\n      if (length) {\n        var rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\n        pt.x = getAlignedX(vm, vm._footerAlign);\n        pt.y += vm.footerMarginTop;\n        ctx.textAlign = rtlHelper.textAlign(vm._footerAlign);\n        ctx.textBaseline = 'middle';\n        footerFontSize = vm.footerFontSize;\n        ctx.fillStyle = vm.footerFontColor;\n        ctx.font = helpers$1.fontString(footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n        for (i = 0; i < length; ++i) {\n          ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFontSize / 2);\n          pt.y += footerFontSize + vm.footerSpacing;\n        }\n      }\n    },\n    drawBackground: function (pt, vm, ctx, tooltipSize) {\n      ctx.fillStyle = vm.backgroundColor;\n      ctx.strokeStyle = vm.borderColor;\n      ctx.lineWidth = vm.borderWidth;\n      var xAlign = vm.xAlign;\n      var yAlign = vm.yAlign;\n      var x = pt.x;\n      var y = pt.y;\n      var width = tooltipSize.width;\n      var height = tooltipSize.height;\n      var radius = vm.cornerRadius;\n      ctx.beginPath();\n      ctx.moveTo(x + radius, y);\n      if (yAlign === 'top') {\n        this.drawCaret(pt, tooltipSize);\n      }\n      ctx.lineTo(x + width - radius, y);\n      ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n      if (yAlign === 'center' && xAlign === 'right') {\n        this.drawCaret(pt, tooltipSize);\n      }\n      ctx.lineTo(x + width, y + height - radius);\n      ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n      if (yAlign === 'bottom') {\n        this.drawCaret(pt, tooltipSize);\n      }\n      ctx.lineTo(x + radius, y + height);\n      ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n      if (yAlign === 'center' && xAlign === 'left') {\n        this.drawCaret(pt, tooltipSize);\n      }\n      ctx.lineTo(x, y + radius);\n      ctx.quadraticCurveTo(x, y, x + radius, y);\n      ctx.closePath();\n      ctx.fill();\n      if (vm.borderWidth > 0) {\n        ctx.stroke();\n      }\n    },\n    draw: function () {\n      var ctx = this._chart.ctx;\n      var vm = this._view;\n      if (vm.opacity === 0) {\n        return;\n      }\n      var tooltipSize = {\n        width: vm.width,\n        height: vm.height\n      };\n      var pt = {\n        x: vm.x,\n        y: vm.y\n      };\n\n      // IE11/Edge does not like very small opacities, so snap to 0\n      var opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\n\n      // Truthy/falsey value for empty tooltip\n      var hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\n      if (this._options.enabled && hasTooltipContent) {\n        ctx.save();\n        ctx.globalAlpha = opacity;\n\n        // Draw Background\n        this.drawBackground(pt, vm, ctx, tooltipSize);\n\n        // Draw Title, Body, and Footer\n        pt.y += vm.yPadding;\n        helpers$1.rtl.overrideTextDirection(ctx, vm.textDirection);\n\n        // Titles\n        this.drawTitle(pt, vm, ctx);\n\n        // Body\n        this.drawBody(pt, vm, ctx);\n\n        // Footer\n        this.drawFooter(pt, vm, ctx);\n        helpers$1.rtl.restoreTextDirection(ctx, vm.textDirection);\n        ctx.restore();\n      }\n    },\n    /**\r\n     * Handle an event\r\n     * @private\r\n     * @param {IEvent} event - The event to handle\r\n     * @returns {boolean} true if the tooltip changed\r\n     */\n    handleEvent: function (e) {\n      var me = this;\n      var options = me._options;\n      var changed = false;\n      me._lastActive = me._lastActive || [];\n\n      // Find Active Elements for tooltips\n      if (e.type === 'mouseout') {\n        me._active = [];\n      } else {\n        me._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\n        if (options.reverse) {\n          me._active.reverse();\n        }\n      }\n\n      // Remember Last Actives\n      changed = !helpers$1.arrayEquals(me._active, me._lastActive);\n\n      // Only handle target event on tooltip change\n      if (changed) {\n        me._lastActive = me._active;\n        if (options.enabled || options.custom) {\n          me._eventPosition = {\n            x: e.x,\n            y: e.y\n          };\n          me.update(true);\n          me.pivot();\n        }\n      }\n      return changed;\n    }\n  });\n\n  /**\r\n   * @namespace Chart.Tooltip.positioners\r\n   */\n  var positioners_1 = positioners;\n  var core_tooltip = exports$4;\n  core_tooltip.positioners = positioners_1;\n  var valueOrDefault$9 = helpers$1.valueOrDefault;\n  core_defaults._set('global', {\n    elements: {},\n    events: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],\n    hover: {\n      onHover: null,\n      mode: 'nearest',\n      intersect: true,\n      animationDuration: 400\n    },\n    onClick: null,\n    maintainAspectRatio: true,\n    responsive: true,\n    responsiveAnimationDuration: 0\n  });\n\n  /**\r\n   * Recursively merge the given config objects representing the `scales` option\r\n   * by incorporating scale defaults in `xAxes` and `yAxes` array items, then\r\n   * returns a deep copy of the result, thus doesn't alter inputs.\r\n   */\n  function mergeScaleConfig( /* config objects ... */\n  ) {\n    return helpers$1.merge(Object.create(null), [].slice.call(arguments), {\n      merger: function (key, target, source, options) {\n        if (key === 'xAxes' || key === 'yAxes') {\n          var slen = source[key].length;\n          var i, type, scale;\n          if (!target[key]) {\n            target[key] = [];\n          }\n          for (i = 0; i < slen; ++i) {\n            scale = source[key][i];\n            type = valueOrDefault$9(scale.type, key === 'xAxes' ? 'category' : 'linear');\n            if (i >= target[key].length) {\n              target[key].push({});\n            }\n            if (!target[key][i].type || scale.type && scale.type !== target[key][i].type) {\n              // new/untyped scale or type changed: let's apply the new defaults\n              // then merge source scale to correctly overwrite the defaults.\n              helpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);\n            } else {\n              // scales type are the same\n              helpers$1.merge(target[key][i], scale);\n            }\n          }\n        } else {\n          helpers$1._merger(key, target, source, options);\n        }\n      }\n    });\n  }\n\n  /**\r\n   * Recursively merge the given config objects as the root options by handling\r\n   * default scale options for the `scales` and `scale` properties, then returns\r\n   * a deep copy of the result, thus doesn't alter inputs.\r\n   */\n  function mergeConfig( /* config objects ... */\n  ) {\n    return helpers$1.merge(Object.create(null), [].slice.call(arguments), {\n      merger: function (key, target, source, options) {\n        var tval = target[key] || Object.create(null);\n        var sval = source[key];\n        if (key === 'scales') {\n          // scale config merging is complex. Add our own function here for that\n          target[key] = mergeScaleConfig(tval, sval);\n        } else if (key === 'scale') {\n          // used in polar area & radar charts since there is only one scale\n          target[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);\n        } else {\n          helpers$1._merger(key, target, source, options);\n        }\n      }\n    });\n  }\n  function initConfig(config) {\n    config = config || Object.create(null);\n\n    // Do NOT use mergeConfig for the data object because this method merges arrays\n    // and so would change references to labels and datasets, preventing data updates.\n    var data = config.data = config.data || {};\n    data.datasets = data.datasets || [];\n    data.labels = data.labels || [];\n    config.options = mergeConfig(core_defaults.global, core_defaults[config.type], config.options || {});\n    return config;\n  }\n  function updateConfig(chart) {\n    var newOptions = chart.options;\n    helpers$1.each(chart.scales, function (scale) {\n      core_layouts.removeBox(chart, scale);\n    });\n    newOptions = mergeConfig(core_defaults.global, core_defaults[chart.config.type], newOptions);\n    chart.options = chart.config.options = newOptions;\n    chart.ensureScalesHaveIDs();\n    chart.buildOrUpdateScales();\n\n    // Tooltip\n    chart.tooltip._options = newOptions.tooltips;\n    chart.tooltip.initialize();\n  }\n  function nextAvailableScaleId(axesOpts, prefix, index) {\n    var id;\n    var hasId = function (obj) {\n      return obj.id === id;\n    };\n    do {\n      id = prefix + index++;\n    } while (helpers$1.findIndex(axesOpts, hasId) >= 0);\n    return id;\n  }\n  function positionIsHorizontal(position) {\n    return position === 'top' || position === 'bottom';\n  }\n  function compare2Level(l1, l2) {\n    return function (a, b) {\n      return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n    };\n  }\n  var Chart = function (item, config) {\n    this.construct(item, config);\n    return this;\n  };\n  helpers$1.extend(Chart.prototype, /** @lends Chart */{\n    /**\r\n     * @private\r\n     */\n    construct: function (item, config) {\n      var me = this;\n      config = initConfig(config);\n      var context = platform.acquireContext(item, config);\n      var canvas = context && context.canvas;\n      var height = canvas && canvas.height;\n      var width = canvas && canvas.width;\n      me.id = helpers$1.uid();\n      me.ctx = context;\n      me.canvas = canvas;\n      me.config = config;\n      me.width = width;\n      me.height = height;\n      me.aspectRatio = height ? width / height : null;\n      me.options = config.options;\n      me._bufferedRender = false;\n      me._layers = [];\n\n      /**\r\n       * Provided for backward compatibility, Chart and Chart.Controller have been merged,\r\n       * the \"instance\" still need to be defined since it might be called from plugins.\r\n       * @prop Chart#chart\r\n       * @deprecated since version 2.6.0\r\n       * @todo remove at version 3\r\n       * @private\r\n       */\n      me.chart = me;\n      me.controller = me; // chart.chart.controller #inception\n\n      // Add the chart instance to the global namespace\n      Chart.instances[me.id] = me;\n\n      // Define alias to the config data: `chart.data === chart.config.data`\n      Object.defineProperty(me, 'data', {\n        get: function () {\n          return me.config.data;\n        },\n        set: function (value) {\n          me.config.data = value;\n        }\n      });\n      if (!context || !canvas) {\n        // The given item is not a compatible context2d element, let's return before finalizing\n        // the chart initialization but after setting basic chart / controller properties that\n        // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n        // https://github.com/chartjs/Chart.js/issues/2807\n        console.error(\"Failed to create chart: can't acquire context from the given item\");\n        return;\n      }\n      me.initialize();\n      me.update();\n    },\n    /**\r\n     * @private\r\n     */\n    initialize: function () {\n      var me = this;\n\n      // Before init plugin notification\n      core_plugins.notify(me, 'beforeInit');\n      helpers$1.retinaScale(me, me.options.devicePixelRatio);\n      me.bindEvents();\n      if (me.options.responsive) {\n        // Initial resize before chart draws (must be silent to preserve initial animations).\n        me.resize(true);\n      }\n      me.initToolTip();\n\n      // After init plugin notification\n      core_plugins.notify(me, 'afterInit');\n      return me;\n    },\n    clear: function () {\n      helpers$1.canvas.clear(this);\n      return this;\n    },\n    stop: function () {\n      // Stops any current animation loop occurring\n      core_animations.cancelAnimation(this);\n      return this;\n    },\n    resize: function (silent) {\n      var me = this;\n      var options = me.options;\n      var canvas = me.canvas;\n      var aspectRatio = options.maintainAspectRatio && me.aspectRatio || null;\n\n      // the canvas render width and height will be casted to integers so make sure that\n      // the canvas display style uses the same integer values to avoid blurring effect.\n\n      // Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\n      var newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));\n      var newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));\n      if (me.width === newWidth && me.height === newHeight) {\n        return;\n      }\n      canvas.width = me.width = newWidth;\n      canvas.height = me.height = newHeight;\n      canvas.style.width = newWidth + 'px';\n      canvas.style.height = newHeight + 'px';\n      helpers$1.retinaScale(me, options.devicePixelRatio);\n      if (!silent) {\n        // Notify any plugins about the resize\n        var newSize = {\n          width: newWidth,\n          height: newHeight\n        };\n        core_plugins.notify(me, 'resize', [newSize]);\n\n        // Notify of resize\n        if (options.onResize) {\n          options.onResize(me, newSize);\n        }\n        me.stop();\n        me.update({\n          duration: options.responsiveAnimationDuration\n        });\n      }\n    },\n    ensureScalesHaveIDs: function () {\n      var options = this.options;\n      var scalesOptions = options.scales || {};\n      var scaleOptions = options.scale;\n      helpers$1.each(scalesOptions.xAxes, function (xAxisOptions, index) {\n        if (!xAxisOptions.id) {\n          xAxisOptions.id = nextAvailableScaleId(scalesOptions.xAxes, 'x-axis-', index);\n        }\n      });\n      helpers$1.each(scalesOptions.yAxes, function (yAxisOptions, index) {\n        if (!yAxisOptions.id) {\n          yAxisOptions.id = nextAvailableScaleId(scalesOptions.yAxes, 'y-axis-', index);\n        }\n      });\n      if (scaleOptions) {\n        scaleOptions.id = scaleOptions.id || 'scale';\n      }\n    },\n    /**\r\n     * Builds a map of scale ID to scale object for future lookup.\r\n     */\n    buildOrUpdateScales: function () {\n      var me = this;\n      var options = me.options;\n      var scales = me.scales || {};\n      var items = [];\n      var updated = Object.keys(scales).reduce(function (obj, id) {\n        obj[id] = false;\n        return obj;\n      }, {});\n      if (options.scales) {\n        items = items.concat((options.scales.xAxes || []).map(function (xAxisOptions) {\n          return {\n            options: xAxisOptions,\n            dtype: 'category',\n            dposition: 'bottom'\n          };\n        }), (options.scales.yAxes || []).map(function (yAxisOptions) {\n          return {\n            options: yAxisOptions,\n            dtype: 'linear',\n            dposition: 'left'\n          };\n        }));\n      }\n      if (options.scale) {\n        items.push({\n          options: options.scale,\n          dtype: 'radialLinear',\n          isDefault: true,\n          dposition: 'chartArea'\n        });\n      }\n      helpers$1.each(items, function (item) {\n        var scaleOptions = item.options;\n        var id = scaleOptions.id;\n        var scaleType = valueOrDefault$9(scaleOptions.type, item.dtype);\n        if (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\n          scaleOptions.position = item.dposition;\n        }\n        updated[id] = true;\n        var scale = null;\n        if (id in scales && scales[id].type === scaleType) {\n          scale = scales[id];\n          scale.options = scaleOptions;\n          scale.ctx = me.ctx;\n          scale.chart = me;\n        } else {\n          var scaleClass = core_scaleService.getScaleConstructor(scaleType);\n          if (!scaleClass) {\n            return;\n          }\n          scale = new scaleClass({\n            id: id,\n            type: scaleType,\n            options: scaleOptions,\n            ctx: me.ctx,\n            chart: me\n          });\n          scales[scale.id] = scale;\n        }\n        scale.mergeTicksOptions();\n\n        // TODO(SB): I think we should be able to remove this custom case (options.scale)\n        // and consider it as a regular scale part of the \"scales\"\" map only! This would\n        // make the logic easier and remove some useless? custom code.\n        if (item.isDefault) {\n          me.scale = scale;\n        }\n      });\n      // clear up discarded scales\n      helpers$1.each(updated, function (hasUpdated, id) {\n        if (!hasUpdated) {\n          delete scales[id];\n        }\n      });\n      me.scales = scales;\n      core_scaleService.addScalesToLayout(this);\n    },\n    buildOrUpdateControllers: function () {\n      var me = this;\n      var newControllers = [];\n      var datasets = me.data.datasets;\n      var i, ilen;\n      for (i = 0, ilen = datasets.length; i < ilen; i++) {\n        var dataset = datasets[i];\n        var meta = me.getDatasetMeta(i);\n        var type = dataset.type || me.config.type;\n        if (meta.type && meta.type !== type) {\n          me.destroyDatasetMeta(i);\n          meta = me.getDatasetMeta(i);\n        }\n        meta.type = type;\n        meta.order = dataset.order || 0;\n        meta.index = i;\n        if (meta.controller) {\n          meta.controller.updateIndex(i);\n          meta.controller.linkScales();\n        } else {\n          var ControllerClass = controllers[meta.type];\n          if (ControllerClass === undefined) {\n            throw new Error('\"' + meta.type + '\" is not a chart type.');\n          }\n          meta.controller = new ControllerClass(me, i);\n          newControllers.push(meta.controller);\n        }\n      }\n      return newControllers;\n    },\n    /**\r\n     * Reset the elements of all datasets\r\n     * @private\r\n     */\n    resetElements: function () {\n      var me = this;\n      helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {\n        me.getDatasetMeta(datasetIndex).controller.reset();\n      }, me);\n    },\n    /**\r\n    * Resets the chart back to it's state before the initial animation\r\n    */\n    reset: function () {\n      this.resetElements();\n      this.tooltip.initialize();\n    },\n    update: function (config) {\n      var me = this;\n      var i, ilen;\n      if (!config || typeof config !== 'object') {\n        // backwards compatibility\n        config = {\n          duration: config,\n          lazy: arguments[1]\n        };\n      }\n      updateConfig(me);\n\n      // plugins options references might have change, let's invalidate the cache\n      // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n      core_plugins._invalidate(me);\n      if (core_plugins.notify(me, 'beforeUpdate') === false) {\n        return;\n      }\n\n      // In case the entire data object changed\n      me.tooltip._data = me.data;\n\n      // Make sure dataset controllers are updated and new controllers are reset\n      var newControllers = me.buildOrUpdateControllers();\n\n      // Make sure all dataset controllers have correct meta data counts\n      for (i = 0, ilen = me.data.datasets.length; i < ilen; i++) {\n        me.getDatasetMeta(i).controller.buildOrUpdateElements();\n      }\n      me.updateLayout();\n\n      // Can only reset the new controllers after the scales have been updated\n      if (me.options.animation && me.options.animation.duration) {\n        helpers$1.each(newControllers, function (controller) {\n          controller.reset();\n        });\n      }\n      me.updateDatasets();\n\n      // Need to reset tooltip in case it is displayed with elements that are removed\n      // after update.\n      me.tooltip.initialize();\n\n      // Last active contains items that were previously in the tooltip.\n      // When we reset the tooltip, we need to clear it\n      me.lastActive = [];\n\n      // Do this before render so that any plugins that need final scale updates can use it\n      core_plugins.notify(me, 'afterUpdate');\n      me._layers.sort(compare2Level('z', '_idx'));\n      if (me._bufferedRender) {\n        me._bufferedRequest = {\n          duration: config.duration,\n          easing: config.easing,\n          lazy: config.lazy\n        };\n      } else {\n        me.render(config);\n      }\n    },\n    /**\r\n     * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\r\n     * hook, in which case, plugins will not be called on `afterLayout`.\r\n     * @private\r\n     */\n    updateLayout: function () {\n      var me = this;\n      if (core_plugins.notify(me, 'beforeLayout') === false) {\n        return;\n      }\n      core_layouts.update(this, this.width, this.height);\n      me._layers = [];\n      helpers$1.each(me.boxes, function (box) {\n        // _configure is called twice, once in core.scale.update and once here.\n        // Here the boxes are fully updated and at their final positions.\n        if (box._configure) {\n          box._configure();\n        }\n        me._layers.push.apply(me._layers, box._layers());\n      }, me);\n      me._layers.forEach(function (item, index) {\n        item._idx = index;\n      });\n\n      /**\r\n       * Provided for backward compatibility, use `afterLayout` instead.\r\n       * @method IPlugin#afterScaleUpdate\r\n       * @deprecated since version 2.5.0\r\n       * @todo remove at version 3\r\n       * @private\r\n       */\n      core_plugins.notify(me, 'afterScaleUpdate');\n      core_plugins.notify(me, 'afterLayout');\n    },\n    /**\r\n     * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\r\n     * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\r\n     * @private\r\n     */\n    updateDatasets: function () {\n      var me = this;\n      if (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {\n        return;\n      }\n      for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n        me.updateDataset(i);\n      }\n      core_plugins.notify(me, 'afterDatasetsUpdate');\n    },\n    /**\r\n     * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\r\n     * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\r\n     * @private\r\n     */\n    updateDataset: function (index) {\n      var me = this;\n      var meta = me.getDatasetMeta(index);\n      var args = {\n        meta: meta,\n        index: index\n      };\n      if (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\n        return;\n      }\n      meta.controller._update();\n      core_plugins.notify(me, 'afterDatasetUpdate', [args]);\n    },\n    render: function (config) {\n      var me = this;\n      if (!config || typeof config !== 'object') {\n        // backwards compatibility\n        config = {\n          duration: config,\n          lazy: arguments[1]\n        };\n      }\n      var animationOptions = me.options.animation;\n      var duration = valueOrDefault$9(config.duration, animationOptions && animationOptions.duration);\n      var lazy = config.lazy;\n      if (core_plugins.notify(me, 'beforeRender') === false) {\n        return;\n      }\n      var onComplete = function (animation) {\n        core_plugins.notify(me, 'afterRender');\n        helpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);\n      };\n      if (animationOptions && duration) {\n        var animation = new core_animation({\n          numSteps: duration / 16.66,\n          // 60 fps\n          easing: config.easing || animationOptions.easing,\n          render: function (chart, animationObject) {\n            var easingFunction = helpers$1.easing.effects[animationObject.easing];\n            var currentStep = animationObject.currentStep;\n            var stepDecimal = currentStep / animationObject.numSteps;\n            chart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\n          },\n          onAnimationProgress: animationOptions.onProgress,\n          onAnimationComplete: onComplete\n        });\n        core_animations.addAnimation(me, animation, duration, lazy);\n      } else {\n        me.draw();\n\n        // See https://github.com/chartjs/Chart.js/issues/3781\n        onComplete(new core_animation({\n          numSteps: 0,\n          chart: me\n        }));\n      }\n      return me;\n    },\n    draw: function (easingValue) {\n      var me = this;\n      var i, layers;\n      me.clear();\n      if (helpers$1.isNullOrUndef(easingValue)) {\n        easingValue = 1;\n      }\n      me.transition(easingValue);\n      if (me.width <= 0 || me.height <= 0) {\n        return;\n      }\n      if (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\n        return;\n      }\n\n      // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n      // currently be part of layers. Instead, we draw\n      // layers <= 0 before(default, backward compat), and the rest after\n      layers = me._layers;\n      for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n        layers[i].draw(me.chartArea);\n      }\n      me.drawDatasets(easingValue);\n\n      // Rest of layers\n      for (; i < layers.length; ++i) {\n        layers[i].draw(me.chartArea);\n      }\n      me._drawTooltip(easingValue);\n      core_plugins.notify(me, 'afterDraw', [easingValue]);\n    },\n    /**\r\n     * @private\r\n     */\n    transition: function (easingValue) {\n      var me = this;\n      for (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\n        if (me.isDatasetVisible(i)) {\n          me.getDatasetMeta(i).controller.transition(easingValue);\n        }\n      }\n      me.tooltip.transition(easingValue);\n    },\n    /**\r\n     * @private\r\n     */\n    _getSortedDatasetMetas: function (filterVisible) {\n      var me = this;\n      var datasets = me.data.datasets || [];\n      var result = [];\n      var i, ilen;\n      for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n        if (!filterVisible || me.isDatasetVisible(i)) {\n          result.push(me.getDatasetMeta(i));\n        }\n      }\n      result.sort(compare2Level('order', 'index'));\n      return result;\n    },\n    /**\r\n     * @private\r\n     */\n    _getSortedVisibleDatasetMetas: function () {\n      return this._getSortedDatasetMetas(true);\n    },\n    /**\r\n     * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\r\n     * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\r\n     * @private\r\n     */\n    drawDatasets: function (easingValue) {\n      var me = this;\n      var metasets, i;\n      if (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\n        return;\n      }\n      metasets = me._getSortedVisibleDatasetMetas();\n      for (i = metasets.length - 1; i >= 0; --i) {\n        me.drawDataset(metasets[i], easingValue);\n      }\n      core_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);\n    },\n    /**\r\n     * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\r\n     * hook, in which case, plugins will not be called on `afterDatasetDraw`.\r\n     * @private\r\n     */\n    drawDataset: function (meta, easingValue) {\n      var me = this;\n      var args = {\n        meta: meta,\n        index: meta.index,\n        easingValue: easingValue\n      };\n      if (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\n        return;\n      }\n      meta.controller.draw(easingValue);\n      core_plugins.notify(me, 'afterDatasetDraw', [args]);\n    },\n    /**\r\n     * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\r\n     * hook, in which case, plugins will not be called on `afterTooltipDraw`.\r\n     * @private\r\n     */\n    _drawTooltip: function (easingValue) {\n      var me = this;\n      var tooltip = me.tooltip;\n      var args = {\n        tooltip: tooltip,\n        easingValue: easingValue\n      };\n      if (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\n        return;\n      }\n      tooltip.draw();\n      core_plugins.notify(me, 'afterTooltipDraw', [args]);\n    },\n    /**\r\n     * Get the single element that was clicked on\r\n     * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\r\n     */\n    getElementAtEvent: function (e) {\n      return core_interaction.modes.single(this, e);\n    },\n    getElementsAtEvent: function (e) {\n      return core_interaction.modes.label(this, e, {\n        intersect: true\n      });\n    },\n    getElementsAtXAxis: function (e) {\n      return core_interaction.modes['x-axis'](this, e, {\n        intersect: true\n      });\n    },\n    getElementsAtEventForMode: function (e, mode, options) {\n      var method = core_interaction.modes[mode];\n      if (typeof method === 'function') {\n        return method(this, e, options);\n      }\n      return [];\n    },\n    getDatasetAtEvent: function (e) {\n      return core_interaction.modes.dataset(this, e, {\n        intersect: true\n      });\n    },\n    getDatasetMeta: function (datasetIndex) {\n      var me = this;\n      var dataset = me.data.datasets[datasetIndex];\n      if (!dataset._meta) {\n        dataset._meta = {};\n      }\n      var meta = dataset._meta[me.id];\n      if (!meta) {\n        meta = dataset._meta[me.id] = {\n          type: null,\n          data: [],\n          dataset: null,\n          controller: null,\n          hidden: null,\n          // See isDatasetVisible() comment\n          xAxisID: null,\n          yAxisID: null,\n          order: dataset.order || 0,\n          index: datasetIndex\n        };\n      }\n      return meta;\n    },\n    getVisibleDatasetCount: function () {\n      var count = 0;\n      for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n        if (this.isDatasetVisible(i)) {\n          count++;\n        }\n      }\n      return count;\n    },\n    isDatasetVisible: function (datasetIndex) {\n      var meta = this.getDatasetMeta(datasetIndex);\n\n      // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n      // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n      return typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\n    },\n    generateLegend: function () {\n      return this.options.legendCallback(this);\n    },\n    /**\r\n     * @private\r\n     */\n    destroyDatasetMeta: function (datasetIndex) {\n      var id = this.id;\n      var dataset = this.data.datasets[datasetIndex];\n      var meta = dataset._meta && dataset._meta[id];\n      if (meta) {\n        meta.controller.destroy();\n        delete dataset._meta[id];\n      }\n    },\n    destroy: function () {\n      var me = this;\n      var canvas = me.canvas;\n      var i, ilen;\n      me.stop();\n\n      // dataset controllers need to cleanup associated data\n      for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n        me.destroyDatasetMeta(i);\n      }\n      if (canvas) {\n        me.unbindEvents();\n        helpers$1.canvas.clear(me);\n        platform.releaseContext(me.ctx);\n        me.canvas = null;\n        me.ctx = null;\n      }\n      core_plugins.notify(me, 'destroy');\n      delete Chart.instances[me.id];\n    },\n    toBase64Image: function () {\n      return this.canvas.toDataURL.apply(this.canvas, arguments);\n    },\n    initToolTip: function () {\n      var me = this;\n      me.tooltip = new core_tooltip({\n        _chart: me,\n        _chartInstance: me,\n        // deprecated, backward compatibility\n        _data: me.data,\n        _options: me.options.tooltips\n      }, me);\n    },\n    /**\r\n     * @private\r\n     */\n    bindEvents: function () {\n      var me = this;\n      var listeners = me._listeners = {};\n      var listener = function () {\n        me.eventHandler.apply(me, arguments);\n      };\n      helpers$1.each(me.options.events, function (type) {\n        platform.addEventListener(me, type, listener);\n        listeners[type] = listener;\n      });\n\n      // Elements used to detect size change should not be injected for non responsive charts.\n      // See https://github.com/chartjs/Chart.js/issues/2210\n      if (me.options.responsive) {\n        listener = function () {\n          me.resize();\n        };\n        platform.addEventListener(me, 'resize', listener);\n        listeners.resize = listener;\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    unbindEvents: function () {\n      var me = this;\n      var listeners = me._listeners;\n      if (!listeners) {\n        return;\n      }\n      delete me._listeners;\n      helpers$1.each(listeners, function (listener, type) {\n        platform.removeEventListener(me, type, listener);\n      });\n    },\n    updateHoverStyle: function (elements, mode, enabled) {\n      var prefix = enabled ? 'set' : 'remove';\n      var element, i, ilen;\n      for (i = 0, ilen = elements.length; i < ilen; ++i) {\n        element = elements[i];\n        if (element) {\n          this.getDatasetMeta(element._datasetIndex).controller[prefix + 'HoverStyle'](element);\n        }\n      }\n      if (mode === 'dataset') {\n        this.getDatasetMeta(elements[0]._datasetIndex).controller['_' + prefix + 'DatasetHoverStyle']();\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    eventHandler: function (e) {\n      var me = this;\n      var tooltip = me.tooltip;\n      if (core_plugins.notify(me, 'beforeEvent', [e]) === false) {\n        return;\n      }\n\n      // Buffer any update calls so that renders do not occur\n      me._bufferedRender = true;\n      me._bufferedRequest = null;\n      var changed = me.handleEvent(e);\n      // for smooth tooltip animations issue #4989\n      // the tooltip should be the source of change\n      // Animation check workaround:\n      // tooltip._start will be null when tooltip isn't animating\n      if (tooltip) {\n        changed = tooltip._start ? tooltip.handleEvent(e) : changed | tooltip.handleEvent(e);\n      }\n      core_plugins.notify(me, 'afterEvent', [e]);\n      var bufferedRequest = me._bufferedRequest;\n      if (bufferedRequest) {\n        // If we have an update that was triggered, we need to do a normal render\n        me.render(bufferedRequest);\n      } else if (changed && !me.animating) {\n        // If entering, leaving, or changing elements, animate the change via pivot\n        me.stop();\n\n        // We only need to render at this point. Updating will cause scales to be\n        // recomputed generating flicker & using more memory than necessary.\n        me.render({\n          duration: me.options.hover.animationDuration,\n          lazy: true\n        });\n      }\n      me._bufferedRender = false;\n      me._bufferedRequest = null;\n      return me;\n    },\n    /**\r\n     * Handle an event\r\n     * @private\r\n     * @param {IEvent} event the event to handle\r\n     * @return {boolean} true if the chart needs to re-render\r\n     */\n    handleEvent: function (e) {\n      var me = this;\n      var options = me.options || {};\n      var hoverOptions = options.hover;\n      var changed = false;\n      me.lastActive = me.lastActive || [];\n\n      // Find Active Elements for hover and tooltips\n      if (e.type === 'mouseout') {\n        me.active = [];\n      } else {\n        me.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\n      }\n\n      // Invoke onHover hook\n      // Need to call with native event here to not break backwards compatibility\n      helpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\n      if (e.type === 'mouseup' || e.type === 'click') {\n        if (options.onClick) {\n          // Use e.native here for backwards compatibility\n          options.onClick.call(me, e.native, me.active);\n        }\n      }\n\n      // Remove styling for last active (even if it may still be active)\n      if (me.lastActive.length) {\n        me.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\n      }\n\n      // Built in hover styling\n      if (me.active.length && hoverOptions.mode) {\n        me.updateHoverStyle(me.active, hoverOptions.mode, true);\n      }\n      changed = !helpers$1.arrayEquals(me.active, me.lastActive);\n\n      // Remember Last Actives\n      me.lastActive = me.active;\n      return changed;\n    }\n  });\n\n  /**\r\n   * NOTE(SB) We actually don't use this container anymore but we need to keep it\r\n   * for backward compatibility. Though, it can still be useful for plugins that\r\n   * would need to work on multiple charts?!\r\n   */\n  Chart.instances = {};\n  var core_controller = Chart;\n\n  // DEPRECATIONS\n\n  /**\r\n   * Provided for backward compatibility, use Chart instead.\r\n   * @class Chart.Controller\r\n   * @deprecated since version 2.6\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  Chart.Controller = Chart;\n\n  /**\r\n   * Provided for backward compatibility, not available anymore.\r\n   * @namespace Chart\r\n   * @deprecated since version 2.8\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  Chart.types = {};\n\n  /**\r\n   * Provided for backward compatibility, not available anymore.\r\n   * @namespace Chart.helpers.configMerge\r\n   * @deprecated since version 2.8.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers$1.configMerge = mergeConfig;\n\n  /**\r\n   * Provided for backward compatibility, not available anymore.\r\n   * @namespace Chart.helpers.scaleMerge\r\n   * @deprecated since version 2.8.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  helpers$1.scaleMerge = mergeScaleConfig;\n  var core_helpers = function () {\n    // -- Basic js utility methods\n\n    helpers$1.where = function (collection, filterCallback) {\n      if (helpers$1.isArray(collection) && Array.prototype.filter) {\n        return collection.filter(filterCallback);\n      }\n      var filtered = [];\n      helpers$1.each(collection, function (item) {\n        if (filterCallback(item)) {\n          filtered.push(item);\n        }\n      });\n      return filtered;\n    };\n    helpers$1.findIndex = Array.prototype.findIndex ? function (array, callback, scope) {\n      return array.findIndex(callback, scope);\n    } : function (array, callback, scope) {\n      scope = scope === undefined ? array : scope;\n      for (var i = 0, ilen = array.length; i < ilen; ++i) {\n        if (callback.call(scope, array[i], i, array)) {\n          return i;\n        }\n      }\n      return -1;\n    };\n    helpers$1.findNextWhere = function (arrayToSearch, filterCallback, startIndex) {\n      // Default to start of the array\n      if (helpers$1.isNullOrUndef(startIndex)) {\n        startIndex = -1;\n      }\n      for (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n        var currentItem = arrayToSearch[i];\n        if (filterCallback(currentItem)) {\n          return currentItem;\n        }\n      }\n    };\n    helpers$1.findPreviousWhere = function (arrayToSearch, filterCallback, startIndex) {\n      // Default to end of the array\n      if (helpers$1.isNullOrUndef(startIndex)) {\n        startIndex = arrayToSearch.length;\n      }\n      for (var i = startIndex - 1; i >= 0; i--) {\n        var currentItem = arrayToSearch[i];\n        if (filterCallback(currentItem)) {\n          return currentItem;\n        }\n      }\n    };\n\n    // -- Math methods\n    helpers$1.isNumber = function (n) {\n      return !isNaN(parseFloat(n)) && isFinite(n);\n    };\n    helpers$1.almostEquals = function (x, y, epsilon) {\n      return Math.abs(x - y) < epsilon;\n    };\n    helpers$1.almostWhole = function (x, epsilon) {\n      var rounded = Math.round(x);\n      return rounded - epsilon <= x && rounded + epsilon >= x;\n    };\n    helpers$1.max = function (array) {\n      return array.reduce(function (max, value) {\n        if (!isNaN(value)) {\n          return Math.max(max, value);\n        }\n        return max;\n      }, Number.NEGATIVE_INFINITY);\n    };\n    helpers$1.min = function (array) {\n      return array.reduce(function (min, value) {\n        if (!isNaN(value)) {\n          return Math.min(min, value);\n        }\n        return min;\n      }, Number.POSITIVE_INFINITY);\n    };\n    helpers$1.sign = Math.sign ? function (x) {\n      return Math.sign(x);\n    } : function (x) {\n      x = +x; // convert to a number\n      if (x === 0 || isNaN(x)) {\n        return x;\n      }\n      return x > 0 ? 1 : -1;\n    };\n    helpers$1.toRadians = function (degrees) {\n      return degrees * (Math.PI / 180);\n    };\n    helpers$1.toDegrees = function (radians) {\n      return radians * (180 / Math.PI);\n    };\n\n    /**\r\n     * Returns the number of decimal places\r\n     * i.e. the number of digits after the decimal point, of the value of this Number.\r\n     * @param {number} x - A number.\r\n     * @returns {number} The number of decimal places.\r\n     * @private\r\n     */\n    helpers$1._decimalPlaces = function (x) {\n      if (!helpers$1.isFinite(x)) {\n        return;\n      }\n      var e = 1;\n      var p = 0;\n      while (Math.round(x * e) / e !== x) {\n        e *= 10;\n        p++;\n      }\n      return p;\n    };\n\n    // Gets the angle from vertical upright to the point about a centre.\n    helpers$1.getAngleFromPoint = function (centrePoint, anglePoint) {\n      var distanceFromXCenter = anglePoint.x - centrePoint.x;\n      var distanceFromYCenter = anglePoint.y - centrePoint.y;\n      var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n      var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n      if (angle < -0.5 * Math.PI) {\n        angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n      }\n\n      return {\n        angle: angle,\n        distance: radialDistanceFromCenter\n      };\n    };\n    helpers$1.distanceBetweenPoints = function (pt1, pt2) {\n      return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n    };\n\n    /**\r\n     * Provided for backward compatibility, not available anymore\r\n     * @function Chart.helpers.aliasPixel\r\n     * @deprecated since version 2.8.0\r\n     * @todo remove at version 3\r\n     */\n    helpers$1.aliasPixel = function (pixelWidth) {\n      return pixelWidth % 2 === 0 ? 0 : 0.5;\n    };\n\n    /**\r\n     * Returns the aligned pixel value to avoid anti-aliasing blur\r\n     * @param {Chart} chart - The chart instance.\r\n     * @param {number} pixel - A pixel value.\r\n     * @param {number} width - The width of the element.\r\n     * @returns {number} The aligned pixel value.\r\n     * @private\r\n     */\n    helpers$1._alignPixel = function (chart, pixel, width) {\n      var devicePixelRatio = chart.currentDevicePixelRatio;\n      var halfWidth = width / 2;\n      return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n    };\n    helpers$1.splineCurve = function (firstPoint, middlePoint, afterPoint, t) {\n      // Props to Rob Spencer at scaled innovation for his post on splining between points\n      // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n      // This function must also respect \"skipped\" points\n\n      var previous = firstPoint.skip ? middlePoint : firstPoint;\n      var current = middlePoint;\n      var next = afterPoint.skip ? middlePoint : afterPoint;\n      var d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\n      var d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\n      var s01 = d01 / (d01 + d12);\n      var s12 = d12 / (d01 + d12);\n\n      // If all points are the same, s01 & s02 will be inf\n      s01 = isNaN(s01) ? 0 : s01;\n      s12 = isNaN(s12) ? 0 : s12;\n      var fa = t * s01; // scaling factor for triangle Ta\n      var fb = t * s12;\n      return {\n        previous: {\n          x: current.x - fa * (next.x - previous.x),\n          y: current.y - fa * (next.y - previous.y)\n        },\n        next: {\n          x: current.x + fb * (next.x - previous.x),\n          y: current.y + fb * (next.y - previous.y)\n        }\n      };\n    };\n    helpers$1.EPSILON = Number.EPSILON || 1e-14;\n    helpers$1.splineCurveMonotone = function (points) {\n      // This function calculates Bézier control points in a similar way than |splineCurve|,\n      // but preserves monotonicity of the provided data and ensures no local extremums are added\n      // between the dataset discrete points due to the interpolation.\n      // See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n\n      var pointsWithTangents = (points || []).map(function (point) {\n        return {\n          model: point._model,\n          deltaK: 0,\n          mK: 0\n        };\n      });\n\n      // Calculate slopes (deltaK) and initialize tangents (mK)\n      var pointsLen = pointsWithTangents.length;\n      var i, pointBefore, pointCurrent, pointAfter;\n      for (i = 0; i < pointsLen; ++i) {\n        pointCurrent = pointsWithTangents[i];\n        if (pointCurrent.model.skip) {\n          continue;\n        }\n        pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n        pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n        if (pointAfter && !pointAfter.model.skip) {\n          var slopeDeltaX = pointAfter.model.x - pointCurrent.model.x;\n\n          // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n          pointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\n        }\n        if (!pointBefore || pointBefore.model.skip) {\n          pointCurrent.mK = pointCurrent.deltaK;\n        } else if (!pointAfter || pointAfter.model.skip) {\n          pointCurrent.mK = pointBefore.deltaK;\n        } else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\n          pointCurrent.mK = 0;\n        } else {\n          pointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\n        }\n      }\n\n      // Adjust tangents to ensure monotonic properties\n      var alphaK, betaK, tauK, squaredMagnitude;\n      for (i = 0; i < pointsLen - 1; ++i) {\n        pointCurrent = pointsWithTangents[i];\n        pointAfter = pointsWithTangents[i + 1];\n        if (pointCurrent.model.skip || pointAfter.model.skip) {\n          continue;\n        }\n        if (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\n          pointCurrent.mK = pointAfter.mK = 0;\n          continue;\n        }\n        alphaK = pointCurrent.mK / pointCurrent.deltaK;\n        betaK = pointAfter.mK / pointCurrent.deltaK;\n        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n        if (squaredMagnitude <= 9) {\n          continue;\n        }\n        tauK = 3 / Math.sqrt(squaredMagnitude);\n        pointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\n        pointAfter.mK = betaK * tauK * pointCurrent.deltaK;\n      }\n\n      // Compute control points\n      var deltaX;\n      for (i = 0; i < pointsLen; ++i) {\n        pointCurrent = pointsWithTangents[i];\n        if (pointCurrent.model.skip) {\n          continue;\n        }\n        pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n        pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n        if (pointBefore && !pointBefore.model.skip) {\n          deltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\n          pointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\n          pointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\n        }\n        if (pointAfter && !pointAfter.model.skip) {\n          deltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\n          pointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\n          pointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\n        }\n      }\n    };\n    helpers$1.nextItem = function (collection, index, loop) {\n      if (loop) {\n        return index >= collection.length - 1 ? collection[0] : collection[index + 1];\n      }\n      return index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\n    };\n    helpers$1.previousItem = function (collection, index, loop) {\n      if (loop) {\n        return index <= 0 ? collection[collection.length - 1] : collection[index - 1];\n      }\n      return index <= 0 ? collection[0] : collection[index - 1];\n    };\n    // Implementation of the nice number algorithm used in determining where axis labels will go\n    helpers$1.niceNum = function (range, round) {\n      var exponent = Math.floor(helpers$1.log10(range));\n      var fraction = range / Math.pow(10, exponent);\n      var niceFraction;\n      if (round) {\n        if (fraction < 1.5) {\n          niceFraction = 1;\n        } else if (fraction < 3) {\n          niceFraction = 2;\n        } else if (fraction < 7) {\n          niceFraction = 5;\n        } else {\n          niceFraction = 10;\n        }\n      } else if (fraction <= 1.0) {\n        niceFraction = 1;\n      } else if (fraction <= 2) {\n        niceFraction = 2;\n      } else if (fraction <= 5) {\n        niceFraction = 5;\n      } else {\n        niceFraction = 10;\n      }\n      return niceFraction * Math.pow(10, exponent);\n    };\n    // Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n    helpers$1.requestAnimFrame = function () {\n      if (typeof window === 'undefined') {\n        return function (callback) {\n          callback();\n        };\n      }\n      return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n        return window.setTimeout(callback, 1000 / 60);\n      };\n    }();\n    // -- DOM methods\n    helpers$1.getRelativePosition = function (evt, chart) {\n      var mouseX, mouseY;\n      var e = evt.originalEvent || evt;\n      var canvas = evt.target || evt.srcElement;\n      var boundingRect = canvas.getBoundingClientRect();\n      var touches = e.touches;\n      if (touches && touches.length > 0) {\n        mouseX = touches[0].clientX;\n        mouseY = touches[0].clientY;\n      } else {\n        mouseX = e.clientX;\n        mouseY = e.clientY;\n      }\n\n      // Scale mouse coordinates into canvas coordinates\n      // by following the pattern laid out by 'jerryj' in the comments of\n      // https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\n      var paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));\n      var paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));\n      var paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));\n      var paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));\n      var width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\n      var height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\n\n      // We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\n      // the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\n      mouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / width * canvas.width / chart.currentDevicePixelRatio);\n      mouseY = Math.round((mouseY - boundingRect.top - paddingTop) / height * canvas.height / chart.currentDevicePixelRatio);\n      return {\n        x: mouseX,\n        y: mouseY\n      };\n    };\n\n    // Private helper function to convert max-width/max-height values that may be percentages into a number\n    function parseMaxStyle(styleValue, node, parentProperty) {\n      var valueInPixels;\n      if (typeof styleValue === 'string') {\n        valueInPixels = parseInt(styleValue, 10);\n        if (styleValue.indexOf('%') !== -1) {\n          // percentage * size in dimension\n          valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n        }\n      } else {\n        valueInPixels = styleValue;\n      }\n      return valueInPixels;\n    }\n\n    /**\r\n     * Returns if the given value contains an effective constraint.\r\n     * @private\r\n     */\n    function isConstrainedValue(value) {\n      return value !== undefined && value !== null && value !== 'none';\n    }\n\n    /**\r\n     * Returns the max width or height of the given DOM node in a cross-browser compatible fashion\r\n     * @param {HTMLElement} domNode - the node to check the constraint on\r\n     * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')\r\n     * @param {string} percentageProperty - property of parent to use when calculating width as a percentage\r\n     * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}\r\n     */\n    function getConstraintDimension(domNode, maxStyle, percentageProperty) {\n      var view = document.defaultView;\n      var parentNode = helpers$1._getParentNode(domNode);\n      var constrainedNode = view.getComputedStyle(domNode)[maxStyle];\n      var constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\n      var hasCNode = isConstrainedValue(constrainedNode);\n      var hasCContainer = isConstrainedValue(constrainedContainer);\n      var infinity = Number.POSITIVE_INFINITY;\n      if (hasCNode || hasCContainer) {\n        return Math.min(hasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity, hasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\n      }\n      return 'none';\n    }\n    // returns Number or undefined if no constraint\n    helpers$1.getConstraintWidth = function (domNode) {\n      return getConstraintDimension(domNode, 'max-width', 'clientWidth');\n    };\n    // returns Number or undefined if no constraint\n    helpers$1.getConstraintHeight = function (domNode) {\n      return getConstraintDimension(domNode, 'max-height', 'clientHeight');\n    };\n    /**\r\n     * @private\r\n    \t */\n    helpers$1._calculatePadding = function (container, padding, parentDimension) {\n      padding = helpers$1.getStyle(container, padding);\n      return padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);\n    };\n    /**\r\n     * @private\r\n     */\n    helpers$1._getParentNode = function (domNode) {\n      var parent = domNode.parentNode;\n      if (parent && parent.toString() === '[object ShadowRoot]') {\n        parent = parent.host;\n      }\n      return parent;\n    };\n    helpers$1.getMaximumWidth = function (domNode) {\n      var container = helpers$1._getParentNode(domNode);\n      if (!container) {\n        return domNode.clientWidth;\n      }\n      var clientWidth = container.clientWidth;\n      var paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);\n      var paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);\n      var w = clientWidth - paddingLeft - paddingRight;\n      var cw = helpers$1.getConstraintWidth(domNode);\n      return isNaN(cw) ? w : Math.min(w, cw);\n    };\n    helpers$1.getMaximumHeight = function (domNode) {\n      var container = helpers$1._getParentNode(domNode);\n      if (!container) {\n        return domNode.clientHeight;\n      }\n      var clientHeight = container.clientHeight;\n      var paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);\n      var paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);\n      var h = clientHeight - paddingTop - paddingBottom;\n      var ch = helpers$1.getConstraintHeight(domNode);\n      return isNaN(ch) ? h : Math.min(h, ch);\n    };\n    helpers$1.getStyle = function (el, property) {\n      return el.currentStyle ? el.currentStyle[property] : document.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n    };\n    helpers$1.retinaScale = function (chart, forceRatio) {\n      var pixelRatio = chart.currentDevicePixelRatio = forceRatio || typeof window !== 'undefined' && window.devicePixelRatio || 1;\n      if (pixelRatio === 1) {\n        return;\n      }\n      var canvas = chart.canvas;\n      var height = chart.height;\n      var width = chart.width;\n      canvas.height = height * pixelRatio;\n      canvas.width = width * pixelRatio;\n      chart.ctx.scale(pixelRatio, pixelRatio);\n\n      // If no style has been set on the canvas, the render size is used as display size,\n      // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n      // See https://github.com/chartjs/Chart.js/issues/3575\n      if (!canvas.style.height && !canvas.style.width) {\n        canvas.style.height = height + 'px';\n        canvas.style.width = width + 'px';\n      }\n    };\n    // -- Canvas methods\n    helpers$1.fontString = function (pixelSize, fontStyle, fontFamily) {\n      return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n    };\n    helpers$1.longestText = function (ctx, font, arrayOfThings, cache) {\n      cache = cache || {};\n      var data = cache.data = cache.data || {};\n      var gc = cache.garbageCollect = cache.garbageCollect || [];\n      if (cache.font !== font) {\n        data = cache.data = {};\n        gc = cache.garbageCollect = [];\n        cache.font = font;\n      }\n      ctx.font = font;\n      var longest = 0;\n      var ilen = arrayOfThings.length;\n      var i, j, jlen, thing, nestedThing;\n      for (i = 0; i < ilen; i++) {\n        thing = arrayOfThings[i];\n\n        // Undefined strings and arrays should not be measured\n        if (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {\n          longest = helpers$1.measureText(ctx, data, gc, longest, thing);\n        } else if (helpers$1.isArray(thing)) {\n          // if it is an array lets measure each element\n          // to do maybe simplify this function a bit so we can do this more recursively?\n          for (j = 0, jlen = thing.length; j < jlen; j++) {\n            nestedThing = thing[j];\n            // Undefined strings and arrays should not be measured\n            if (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {\n              longest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);\n            }\n          }\n        }\n      }\n      var gcLen = gc.length / 2;\n      if (gcLen > arrayOfThings.length) {\n        for (i = 0; i < gcLen; i++) {\n          delete data[gc[i]];\n        }\n        gc.splice(0, gcLen);\n      }\n      return longest;\n    };\n    helpers$1.measureText = function (ctx, data, gc, longest, string) {\n      var textWidth = data[string];\n      if (!textWidth) {\n        textWidth = data[string] = ctx.measureText(string).width;\n        gc.push(string);\n      }\n      if (textWidth > longest) {\n        longest = textWidth;\n      }\n      return longest;\n    };\n\n    /**\r\n     * @deprecated\r\n     */\n    helpers$1.numberOfLabelLines = function (arrayOfThings) {\n      var numberOfLines = 1;\n      helpers$1.each(arrayOfThings, function (thing) {\n        if (helpers$1.isArray(thing)) {\n          if (thing.length > numberOfLines) {\n            numberOfLines = thing.length;\n          }\n        }\n      });\n      return numberOfLines;\n    };\n    helpers$1.color = !chartjsColor ? function (value) {\n      console.error('Color.js not found!');\n      return value;\n    } : function (value) {\n      /* global CanvasGradient */\n      if (value instanceof CanvasGradient) {\n        value = core_defaults.global.defaultColor;\n      }\n      return chartjsColor(value);\n    };\n    helpers$1.getHoverColor = function (colorValue) {\n      /* global CanvasPattern */\n      return colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient ? colorValue : helpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();\n    };\n  };\n  function abstract() {\n    throw new Error('This method is not implemented: either no adapter can ' + 'be found or an incomplete integration was provided.');\n  }\n\n  /**\r\n   * Date adapter (current used by the time scale)\r\n   * @namespace Chart._adapters._date\r\n   * @memberof Chart._adapters\r\n   * @private\r\n   */\n\n  /**\r\n   * Currently supported unit string values.\r\n   * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}\r\n   * @memberof Chart._adapters._date\r\n   * @name Unit\r\n   */\n\n  /**\r\n   * @class\r\n   */\n  function DateAdapter(options) {\n    this.options = options || {};\n  }\n  helpers$1.extend(DateAdapter.prototype, /** @lends DateAdapter */{\n    /**\r\n     * Returns a map of time formats for the supported formatting units defined\r\n     * in Unit as well as 'datetime' representing a detailed date/time string.\r\n     * @returns {{string: string}}\r\n     */\n    formats: abstract,\n    /**\r\n     * Parses the given `value` and return the associated timestamp.\r\n     * @param {any} value - the value to parse (usually comes from the data)\r\n     * @param {string} [format] - the expected data format\r\n     * @returns {(number|null)}\r\n     * @function\r\n     */\n    parse: abstract,\n    /**\r\n     * Returns the formatted date in the specified `format` for a given `timestamp`.\r\n     * @param {number} timestamp - the timestamp to format\r\n     * @param {string} format - the date/time token\r\n     * @return {string}\r\n     * @function\r\n     */\n    format: abstract,\n    /**\r\n     * Adds the specified `amount` of `unit` to the given `timestamp`.\r\n     * @param {number} timestamp - the input timestamp\r\n     * @param {number} amount - the amount to add\r\n     * @param {Unit} unit - the unit as string\r\n     * @return {number}\r\n     * @function\r\n     */\n    add: abstract,\n    /**\r\n     * Returns the number of `unit` between the given timestamps.\r\n     * @param {number} max - the input timestamp (reference)\r\n     * @param {number} min - the timestamp to substract\r\n     * @param {Unit} unit - the unit as string\r\n     * @return {number}\r\n     * @function\r\n     */\n    diff: abstract,\n    /**\r\n     * Returns start of `unit` for the given `timestamp`.\r\n     * @param {number} timestamp - the input timestamp\r\n     * @param {Unit} unit - the unit as string\r\n     * @param {number} [weekday] - the ISO day of the week with 1 being Monday\r\n     * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\r\n     * @function\r\n     */\n    startOf: abstract,\n    /**\r\n     * Returns end of `unit` for the given `timestamp`.\r\n     * @param {number} timestamp - the input timestamp\r\n     * @param {Unit} unit - the unit as string\r\n     * @function\r\n     */\n    endOf: abstract,\n    // DEPRECATIONS\n\n    /**\r\n     * Provided for backward compatibility for scale.getValueForPixel(),\r\n     * this method should be overridden only by the moment adapter.\r\n     * @deprecated since version 2.8.0\r\n     * @todo remove at version 3\r\n     * @private\r\n     */\n    _create: function (value) {\n      return value;\n    }\n  });\n  DateAdapter.override = function (members) {\n    helpers$1.extend(DateAdapter.prototype, members);\n  };\n  var _date = DateAdapter;\n  var core_adapters = {\n    _date: _date\n  };\n\n  /**\r\n   * Namespace to hold static tick generation functions\r\n   * @namespace Chart.Ticks\r\n   */\n  var core_ticks = {\n    /**\r\n     * Namespace to hold formatters for different types of ticks\r\n     * @namespace Chart.Ticks.formatters\r\n     */\n    formatters: {\n      /**\r\n       * Formatter for value labels\r\n       * @method Chart.Ticks.formatters.values\r\n       * @param value the value to display\r\n       * @return {string|string[]} the label to display\r\n       */\n      values: function (value) {\n        return helpers$1.isArray(value) ? value : '' + value;\n      },\n      /**\r\n       * Formatter for linear numeric ticks\r\n       * @method Chart.Ticks.formatters.linear\r\n       * @param tickValue {number} the value to be formatted\r\n       * @param index {number} the position of the tickValue parameter in the ticks array\r\n       * @param ticks {number[]} the list of ticks being converted\r\n       * @return {string} string representation of the tickValue parameter\r\n       */\n      linear: function (tickValue, index, ticks) {\n        // If we have lots of ticks, don't use the ones\n        var delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\n\n        // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n        if (Math.abs(delta) > 1) {\n          if (tickValue !== Math.floor(tickValue)) {\n            // not an integer\n            delta = tickValue - Math.floor(tickValue);\n          }\n        }\n        var logDelta = helpers$1.log10(Math.abs(delta));\n        var tickString = '';\n        if (tickValue !== 0) {\n          var maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\n          if (maxTick < 1e-4) {\n            // all ticks are small numbers; use scientific notation\n            var logTick = helpers$1.log10(Math.abs(tickValue));\n            var numExponential = Math.floor(logTick) - Math.floor(logDelta);\n            numExponential = Math.max(Math.min(numExponential, 20), 0);\n            tickString = tickValue.toExponential(numExponential);\n          } else {\n            var numDecimal = -1 * Math.floor(logDelta);\n            numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\n            tickString = tickValue.toFixed(numDecimal);\n          }\n        } else {\n          tickString = '0'; // never show decimal places for 0\n        }\n\n        return tickString;\n      },\n      logarithmic: function (tickValue, index, ticks) {\n        var remain = tickValue / Math.pow(10, Math.floor(helpers$1.log10(tickValue)));\n        if (tickValue === 0) {\n          return '0';\n        } else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\n          return tickValue.toExponential();\n        }\n        return '';\n      }\n    }\n  };\n  var isArray = helpers$1.isArray;\n  var isNullOrUndef = helpers$1.isNullOrUndef;\n  var valueOrDefault$a = helpers$1.valueOrDefault;\n  var valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;\n  core_defaults._set('scale', {\n    display: true,\n    position: 'left',\n    offset: false,\n    // grid line settings\n    gridLines: {\n      display: true,\n      color: 'rgba(0,0,0,0.1)',\n      lineWidth: 1,\n      drawBorder: true,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickMarkLength: 10,\n      zeroLineWidth: 1,\n      zeroLineColor: 'rgba(0,0,0,0.25)',\n      zeroLineBorderDash: [],\n      zeroLineBorderDashOffset: 0.0,\n      offsetGridLines: false,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n    // scale label\n    scaleLabel: {\n      // display property\n      display: false,\n      // actual label\n      labelString: '',\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n    // label settings\n    ticks: {\n      beginAtZero: false,\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      padding: 0,\n      reverse: false,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 0,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: core_ticks.formatters.values,\n      minor: {},\n      major: {}\n    }\n  });\n\n  /** Returns a new array containing numItems from arr */\n  function sample(arr, numItems) {\n    var result = [];\n    var increment = arr.length / numItems;\n    var i = 0;\n    var len = arr.length;\n    for (; i < len; i += increment) {\n      result.push(arr[Math.floor(i)]);\n    }\n    return result;\n  }\n  function getPixelForGridLine(scale, index, offsetGridLines) {\n    var length = scale.getTicks().length;\n    var validIndex = Math.min(index, length - 1);\n    var lineValue = scale.getPixelForTick(validIndex);\n    var start = scale._startPixel;\n    var end = scale._endPixel;\n    var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n    var offset;\n    if (offsetGridLines) {\n      if (length === 1) {\n        offset = Math.max(lineValue - start, end - lineValue);\n      } else if (index === 0) {\n        offset = (scale.getPixelForTick(1) - lineValue) / 2;\n      } else {\n        offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n      }\n      lineValue += validIndex < index ? offset : -offset;\n\n      // Return undefined if the pixel is out of the range\n      if (lineValue < start - epsilon || lineValue > end + epsilon) {\n        return;\n      }\n    }\n    return lineValue;\n  }\n  function garbageCollect(caches, length) {\n    helpers$1.each(caches, function (cache) {\n      var gc = cache.gc;\n      var gcLen = gc.length / 2;\n      var i;\n      if (gcLen > length) {\n        for (i = 0; i < gcLen; ++i) {\n          delete cache.data[gc[i]];\n        }\n        gc.splice(0, gcLen);\n      }\n    });\n  }\n\n  /**\r\n   * Returns {width, height, offset} objects for the first, last, widest, highest tick\r\n   * labels where offset indicates the anchor point offset from the top in pixels.\r\n   */\n  function computeLabelSizes(ctx, tickFonts, ticks, caches) {\n    var length = ticks.length;\n    var widths = [];\n    var heights = [];\n    var offsets = [];\n    var widestLabelSize = 0;\n    var highestLabelSize = 0;\n    var i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel, widest, highest;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = ticks[i].major ? tickFonts.major : tickFonts.minor;\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {\n        data: {},\n        gc: []\n      };\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = helpers$1.measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = helpers$1.measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      offsets.push(lineHeight / 2);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    widest = widths.indexOf(widestLabelSize);\n    highest = heights.indexOf(highestLabelSize);\n    function valueAt(idx) {\n      return {\n        width: widths[idx] || 0,\n        height: heights[idx] || 0,\n        offset: offsets[idx] || 0\n      };\n    }\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest)\n    };\n  }\n  function getTickMarkLength(options) {\n    return options.drawTicks ? options.tickMarkLength : 0;\n  }\n  function getScaleLabelHeight(options) {\n    var font, padding;\n    if (!options.display) {\n      return 0;\n    }\n    font = helpers$1.options._parseFont(options);\n    padding = helpers$1.options.toPadding(options.padding);\n    return font.lineHeight + padding.height;\n  }\n  function parseFontOptions(options, nestedOpts) {\n    return helpers$1.extend(helpers$1.options._parseFont({\n      fontFamily: valueOrDefault$a(nestedOpts.fontFamily, options.fontFamily),\n      fontSize: valueOrDefault$a(nestedOpts.fontSize, options.fontSize),\n      fontStyle: valueOrDefault$a(nestedOpts.fontStyle, options.fontStyle),\n      lineHeight: valueOrDefault$a(nestedOpts.lineHeight, options.lineHeight)\n    }), {\n      color: helpers$1.options.resolve([nestedOpts.fontColor, options.fontColor, core_defaults.global.defaultFontColor])\n    });\n  }\n  function parseTickFontOptions(options) {\n    var minor = parseFontOptions(options, options.minor);\n    var major = options.major.enabled ? parseFontOptions(options, options.major) : minor;\n    return {\n      minor: minor,\n      major: major\n    };\n  }\n  function nonSkipped(ticksToFilter) {\n    var filtered = [];\n    var item, index, len;\n    for (index = 0, len = ticksToFilter.length; index < len; ++index) {\n      item = ticksToFilter[index];\n      if (typeof item._index !== 'undefined') {\n        filtered.push(item);\n      }\n    }\n    return filtered;\n  }\n  function getEvenSpacing(arr) {\n    var len = arr.length;\n    var i, diff;\n    if (len < 2) {\n      return false;\n    }\n    for (diff = arr[0], i = 1; i < len; ++i) {\n      if (arr[i] - arr[i - 1] !== diff) {\n        return false;\n      }\n    }\n    return diff;\n  }\n  function calculateSpacing(majorIndices, ticks, axisLength, ticksLimit) {\n    var evenMajorSpacing = getEvenSpacing(majorIndices);\n    var spacing = (ticks.length - 1) / ticksLimit;\n    var factors, factor, i, ilen;\n\n    // If the major ticks are evenly spaced apart, place the minor ticks\n    // so that they divide the major ticks into even chunks\n    if (!evenMajorSpacing) {\n      return Math.max(spacing, 1);\n    }\n    factors = helpers$1.math._factorize(evenMajorSpacing);\n    for (i = 0, ilen = factors.length - 1; i < ilen; i++) {\n      factor = factors[i];\n      if (factor > spacing) {\n        return factor;\n      }\n    }\n    return Math.max(spacing, 1);\n  }\n  function getMajorIndices(ticks) {\n    var result = [];\n    var i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (ticks[i].major) {\n        result.push(i);\n      }\n    }\n    return result;\n  }\n  function skipMajors(ticks, majorIndices, spacing) {\n    var count = 0;\n    var next = majorIndices[0];\n    var i, tick;\n    spacing = Math.ceil(spacing);\n    for (i = 0; i < ticks.length; i++) {\n      tick = ticks[i];\n      if (i === next) {\n        tick._index = i;\n        count++;\n        next = majorIndices[count * spacing];\n      } else {\n        delete tick.label;\n      }\n    }\n  }\n  function skip(ticks, spacing, majorStart, majorEnd) {\n    var start = valueOrDefault$a(majorStart, 0);\n    var end = Math.min(valueOrDefault$a(majorEnd, ticks.length), ticks.length);\n    var count = 0;\n    var length, i, tick, next;\n    spacing = Math.ceil(spacing);\n    if (majorEnd) {\n      length = majorEnd - majorStart;\n      spacing = length / Math.floor(length / spacing);\n    }\n    next = start;\n    while (next < 0) {\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n    for (i = Math.max(start, 0); i < end; i++) {\n      tick = ticks[i];\n      if (i === next) {\n        tick._index = i;\n        count++;\n        next = Math.round(start + count * spacing);\n      } else {\n        delete tick.label;\n      }\n    }\n  }\n  var Scale = core_element.extend({\n    zeroLineIndex: 0,\n    /**\r\n     * Get the padding needed for the scale\r\n     * @method getPadding\r\n     * @private\r\n     * @returns {Padding} the necessary padding\r\n     */\n    getPadding: function () {\n      var me = this;\n      return {\n        left: me.paddingLeft || 0,\n        top: me.paddingTop || 0,\n        right: me.paddingRight || 0,\n        bottom: me.paddingBottom || 0\n      };\n    },\n    /**\r\n     * Returns the scale tick objects ({label, major})\r\n     * @since 2.7\r\n     */\n    getTicks: function () {\n      return this._ticks;\n    },\n    /**\r\n    * @private\r\n    */\n    _getLabels: function () {\n      var data = this.chart.data;\n      return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n    },\n    // These methods are ordered by lifecyle. Utilities then follow.\n    // Any function defined here is inherited by all scale types.\n    // Any function can be extended by the scale type\n\n    /**\r\n     * Provided for backward compatibility, not available anymore\r\n     * @function Chart.Scale.mergeTicksOptions\r\n     * @deprecated since version 2.8.0\r\n     * @todo remove at version 3\r\n     */\n    mergeTicksOptions: function () {\n      // noop\n    },\n    beforeUpdate: function () {\n      helpers$1.callback(this.options.beforeUpdate, [this]);\n    },\n    /**\r\n     * @param {number} maxWidth - the max width in pixels\r\n     * @param {number} maxHeight - the max height in pixels\r\n     * @param {object} margins - the space between the edge of the other scales and edge of the chart\r\n     *   This space comes from two sources:\r\n     *     - padding - space that's required to show the labels at the edges of the scale\r\n     *     - thickness of scales or legends in another orientation\r\n     */\n    update: function (maxWidth, maxHeight, margins) {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var sampleSize = tickOpts.sampleSize;\n      var i, ilen, labels, ticks, samplingEnabled;\n\n      // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n      me.beforeUpdate();\n\n      // Absorb the master measurements\n      me.maxWidth = maxWidth;\n      me.maxHeight = maxHeight;\n      me.margins = helpers$1.extend({\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0\n      }, margins);\n      me._ticks = null;\n      me.ticks = null;\n      me._labelSizes = null;\n      me._maxLabelLines = 0;\n      me.longestLabelWidth = 0;\n      me.longestTextCache = me.longestTextCache || {};\n      me._gridLineItems = null;\n      me._labelItems = null;\n\n      // Dimensions\n      me.beforeSetDimensions();\n      me.setDimensions();\n      me.afterSetDimensions();\n\n      // Data min/max\n      me.beforeDataLimits();\n      me.determineDataLimits();\n      me.afterDataLimits();\n\n      // Ticks - `this.ticks` is now DEPRECATED!\n      // Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\n      // and must not be accessed directly from outside this class. `this.ticks` being\n      // around for long time and not marked as private, we can't change its structure\n      // without unexpected breaking changes. If you need to access the scale ticks,\n      // use scale.getTicks() instead.\n\n      me.beforeBuildTicks();\n\n      // New implementations should return an array of objects but for BACKWARD COMPAT,\n      // we still support no return (`this.ticks` internally set by calling this method).\n      ticks = me.buildTicks() || [];\n\n      // Allow modification of ticks in callback.\n      ticks = me.afterBuildTicks(ticks) || ticks;\n\n      // Ensure ticks contains ticks in new tick format\n      if ((!ticks || !ticks.length) && me.ticks) {\n        ticks = [];\n        for (i = 0, ilen = me.ticks.length; i < ilen; ++i) {\n          ticks.push({\n            value: me.ticks[i],\n            major: false\n          });\n        }\n      }\n      me._ticks = ticks;\n\n      // Compute tick rotation and fit using a sampled subset of labels\n      // We generally don't need to compute the size of every single label for determining scale size\n      samplingEnabled = sampleSize < ticks.length;\n      labels = me._convertTicksToLabels(samplingEnabled ? sample(ticks, sampleSize) : ticks);\n\n      // _configure is called twice, once here, once from core.controller.updateLayout.\n      // Here we haven't been positioned yet, but dimensions are correct.\n      // Variables set in _configure are needed for calculateTickRotation, and\n      // it's ok that coordinates are not correct there, only dimensions matter.\n      me._configure();\n\n      // Tick Rotation\n      me.beforeCalculateTickRotation();\n      me.calculateTickRotation();\n      me.afterCalculateTickRotation();\n      me.beforeFit();\n      me.fit();\n      me.afterFit();\n\n      // Auto-skip\n      me._ticksToDraw = tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto') ? me._autoSkip(ticks) : ticks;\n      if (samplingEnabled) {\n        // Generate labels using all non-skipped ticks\n        labels = me._convertTicksToLabels(me._ticksToDraw);\n      }\n      me.ticks = labels; // BACKWARD COMPATIBILITY\n\n      // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n      me.afterUpdate();\n\n      // TODO(v3): remove minSize as a public property and return value from all layout boxes. It is unused\n      // make maxWidth and maxHeight private\n      return me.minSize;\n    },\n    /**\r\n     * @private\r\n     */\n    _configure: function () {\n      var me = this;\n      var reversePixels = me.options.ticks.reverse;\n      var startPixel, endPixel;\n      if (me.isHorizontal()) {\n        startPixel = me.left;\n        endPixel = me.right;\n      } else {\n        startPixel = me.top;\n        endPixel = me.bottom;\n        // by default vertical scales are from bottom to top, so pixels are reversed\n        reversePixels = !reversePixels;\n      }\n      me._startPixel = startPixel;\n      me._endPixel = endPixel;\n      me._reversePixels = reversePixels;\n      me._length = endPixel - startPixel;\n    },\n    afterUpdate: function () {\n      helpers$1.callback(this.options.afterUpdate, [this]);\n    },\n    //\n\n    beforeSetDimensions: function () {\n      helpers$1.callback(this.options.beforeSetDimensions, [this]);\n    },\n    setDimensions: function () {\n      var me = this;\n      // Set the unconstrained dimension before label rotation\n      if (me.isHorizontal()) {\n        // Reset position before calculating rotation\n        me.width = me.maxWidth;\n        me.left = 0;\n        me.right = me.width;\n      } else {\n        me.height = me.maxHeight;\n\n        // Reset position before calculating rotation\n        me.top = 0;\n        me.bottom = me.height;\n      }\n\n      // Reset padding\n      me.paddingLeft = 0;\n      me.paddingTop = 0;\n      me.paddingRight = 0;\n      me.paddingBottom = 0;\n    },\n    afterSetDimensions: function () {\n      helpers$1.callback(this.options.afterSetDimensions, [this]);\n    },\n    // Data limits\n    beforeDataLimits: function () {\n      helpers$1.callback(this.options.beforeDataLimits, [this]);\n    },\n    determineDataLimits: helpers$1.noop,\n    afterDataLimits: function () {\n      helpers$1.callback(this.options.afterDataLimits, [this]);\n    },\n    //\n    beforeBuildTicks: function () {\n      helpers$1.callback(this.options.beforeBuildTicks, [this]);\n    },\n    buildTicks: helpers$1.noop,\n    afterBuildTicks: function (ticks) {\n      var me = this;\n      // ticks is empty for old axis implementations here\n      if (isArray(ticks) && ticks.length) {\n        return helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);\n      }\n      // Support old implementations (that modified `this.ticks` directly in buildTicks)\n      me.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;\n      return ticks;\n    },\n    beforeTickToLabelConversion: function () {\n      helpers$1.callback(this.options.beforeTickToLabelConversion, [this]);\n    },\n    convertTicksToLabels: function () {\n      var me = this;\n      // Convert ticks to strings\n      var tickOpts = me.options.ticks;\n      me.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\n    },\n    afterTickToLabelConversion: function () {\n      helpers$1.callback(this.options.afterTickToLabelConversion, [this]);\n    },\n    //\n\n    beforeCalculateTickRotation: function () {\n      helpers$1.callback(this.options.beforeCalculateTickRotation, [this]);\n    },\n    calculateTickRotation: function () {\n      var me = this;\n      var options = me.options;\n      var tickOpts = options.ticks;\n      var numTicks = me.getTicks().length;\n      var minRotation = tickOpts.minRotation || 0;\n      var maxRotation = tickOpts.maxRotation;\n      var labelRotation = minRotation;\n      var labelSizes, maxLabelWidth, maxLabelHeight, maxWidth, tickWidth, maxHeight, maxLabelDiagonal;\n      if (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {\n        me.labelRotation = minRotation;\n        return;\n      }\n      labelSizes = me._getLabelSizes();\n      maxLabelWidth = labelSizes.widest.width;\n      maxLabelHeight = labelSizes.highest.height - labelSizes.highest.offset;\n\n      // Estimate the width of each grid based on the canvas width, the maximum\n      // label width and the number of tick intervals\n      maxWidth = Math.min(me.maxWidth, me.chart.width - maxLabelWidth);\n      tickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n      // Allow 3 pixels x2 padding either side for label readability\n      if (maxLabelWidth + 6 > tickWidth) {\n        tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n        maxHeight = me.maxHeight - getTickMarkLength(options.gridLines) - tickOpts.padding - getScaleLabelHeight(options.scaleLabel);\n        maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n        labelRotation = helpers$1.toDegrees(Math.min(Math.asin(Math.min((labelSizes.highest.height + 6) / tickWidth, 1)), Math.asin(Math.min(maxHeight / maxLabelDiagonal, 1)) - Math.asin(maxLabelHeight / maxLabelDiagonal)));\n        labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n      }\n      me.labelRotation = labelRotation;\n    },\n    afterCalculateTickRotation: function () {\n      helpers$1.callback(this.options.afterCalculateTickRotation, [this]);\n    },\n    //\n\n    beforeFit: function () {\n      helpers$1.callback(this.options.beforeFit, [this]);\n    },\n    fit: function () {\n      var me = this;\n      // Reset\n      var minSize = me.minSize = {\n        width: 0,\n        height: 0\n      };\n      var chart = me.chart;\n      var opts = me.options;\n      var tickOpts = opts.ticks;\n      var scaleLabelOpts = opts.scaleLabel;\n      var gridLineOpts = opts.gridLines;\n      var display = me._isVisible();\n      var isBottom = opts.position === 'bottom';\n      var isHorizontal = me.isHorizontal();\n\n      // Width\n      if (isHorizontal) {\n        minSize.width = me.maxWidth;\n      } else if (display) {\n        minSize.width = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\n      }\n\n      // height\n      if (!isHorizontal) {\n        minSize.height = me.maxHeight; // fill all the height\n      } else if (display) {\n        minSize.height = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && display) {\n        var tickFonts = parseTickFontOptions(tickOpts);\n        var labelSizes = me._getLabelSizes();\n        var firstLabelSize = labelSizes.first;\n        var lastLabelSize = labelSizes.last;\n        var widestLabelSize = labelSizes.widest;\n        var highestLabelSize = labelSizes.highest;\n        var lineSpace = tickFonts.minor.lineHeight * 0.4;\n        var tickPadding = tickOpts.padding;\n        if (isHorizontal) {\n          // A horizontal axis is more constrained by the height.\n          var isRotated = me.labelRotation !== 0;\n          var angleRadians = helpers$1.toRadians(me.labelRotation);\n          var cosRotation = Math.cos(angleRadians);\n          var sinRotation = Math.sin(angleRadians);\n          var labelHeight = sinRotation * widestLabelSize.width + cosRotation * (highestLabelSize.height - (isRotated ? highestLabelSize.offset : 0)) + (isRotated ? 0 : lineSpace); // padding\n\n          minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n          var offsetLeft = me.getPixelForTick(0) - me.left;\n          var offsetRight = me.right - me.getPixelForTick(me.getTicks().length - 1);\n          var paddingLeft, paddingRight;\n\n          // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n          // which means that the right padding is dominated by the font height\n          if (isRotated) {\n            paddingLeft = isBottom ? cosRotation * firstLabelSize.width + sinRotation * firstLabelSize.offset : sinRotation * (firstLabelSize.height - firstLabelSize.offset);\n            paddingRight = isBottom ? sinRotation * (lastLabelSize.height - lastLabelSize.offset) : cosRotation * lastLabelSize.width + sinRotation * lastLabelSize.offset;\n          } else {\n            paddingLeft = firstLabelSize.width / 2;\n            paddingRight = lastLabelSize.width / 2;\n          }\n\n          // Adjust padding taking into account changes in offsets\n          // and add 3 px to move away from canvas edges\n          me.paddingLeft = Math.max((paddingLeft - offsetLeft) * me.width / (me.width - offsetLeft), 0) + 3;\n          me.paddingRight = Math.max((paddingRight - offsetRight) * me.width / (me.width - offsetRight), 0) + 3;\n        } else {\n          // A vertical axis is more constrained by the width. Labels are the\n          // dominant factor here, so get that length first and account for padding\n          var labelWidth = tickOpts.mirror ? 0 :\n          // use lineSpace for consistency with horizontal axis\n          // tickPadding is not implemented for horizontal\n          widestLabelSize.width + tickPadding + lineSpace;\n          minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth);\n          me.paddingTop = firstLabelSize.height / 2;\n          me.paddingBottom = lastLabelSize.height / 2;\n        }\n      }\n      me.handleMargins();\n      if (isHorizontal) {\n        me.width = me._length = chart.width - me.margins.left - me.margins.right;\n        me.height = minSize.height;\n      } else {\n        me.width = minSize.width;\n        me.height = me._length = chart.height - me.margins.top - me.margins.bottom;\n      }\n    },\n    /**\r\n     * Handle margins and padding interactions\r\n     * @private\r\n     */\n    handleMargins: function () {\n      var me = this;\n      if (me.margins) {\n        me.margins.left = Math.max(me.paddingLeft, me.margins.left);\n        me.margins.top = Math.max(me.paddingTop, me.margins.top);\n        me.margins.right = Math.max(me.paddingRight, me.margins.right);\n        me.margins.bottom = Math.max(me.paddingBottom, me.margins.bottom);\n      }\n    },\n    afterFit: function () {\n      helpers$1.callback(this.options.afterFit, [this]);\n    },\n    // Shared Methods\n    isHorizontal: function () {\n      var pos = this.options.position;\n      return pos === 'top' || pos === 'bottom';\n    },\n    isFullWidth: function () {\n      return this.options.fullWidth;\n    },\n    // Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\n    getRightValue: function (rawValue) {\n      // Null and undefined values first\n      if (isNullOrUndef(rawValue)) {\n        return NaN;\n      }\n      // isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\n      if ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {\n        return NaN;\n      }\n\n      // If it is in fact an object, dive in one more level\n      if (rawValue) {\n        if (this.isHorizontal()) {\n          if (rawValue.x !== undefined) {\n            return this.getRightValue(rawValue.x);\n          }\n        } else if (rawValue.y !== undefined) {\n          return this.getRightValue(rawValue.y);\n        }\n      }\n\n      // Value is good, return it\n      return rawValue;\n    },\n    _convertTicksToLabels: function (ticks) {\n      var me = this;\n      var labels, i, ilen;\n      me.ticks = ticks.map(function (tick) {\n        return tick.value;\n      });\n      me.beforeTickToLabelConversion();\n\n      // New implementations should return the formatted tick labels but for BACKWARD\n      // COMPAT, we still support no return (`this.ticks` internally changed by calling\n      // this method and supposed to contain only string values).\n      labels = me.convertTicksToLabels(ticks) || me.ticks;\n      me.afterTickToLabelConversion();\n\n      // BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\n      for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n        ticks[i].label = labels[i];\n      }\n      return labels;\n    },\n    /**\r\n     * @private\r\n     */\n    _getLabelSizes: function () {\n      var me = this;\n      var labelSizes = me._labelSizes;\n      if (!labelSizes) {\n        me._labelSizes = labelSizes = computeLabelSizes(me.ctx, parseTickFontOptions(me.options.ticks), me.getTicks(), me.longestTextCache);\n        me.longestLabelWidth = labelSizes.widest.width;\n      }\n      return labelSizes;\n    },\n    /**\r\n     * @private\r\n     */\n    _parseValue: function (value) {\n      var start, end, min, max;\n      if (isArray(value)) {\n        start = +this.getRightValue(value[0]);\n        end = +this.getRightValue(value[1]);\n        min = Math.min(start, end);\n        max = Math.max(start, end);\n      } else {\n        value = +this.getRightValue(value);\n        start = undefined;\n        end = value;\n        min = value;\n        max = value;\n      }\n      return {\n        min: min,\n        max: max,\n        start: start,\n        end: end\n      };\n    },\n    /**\r\n    * @private\r\n    */\n    _getScaleLabel: function (rawValue) {\n      var v = this._parseValue(rawValue);\n      if (v.start !== undefined) {\n        return '[' + v.start + ', ' + v.end + ']';\n      }\n      return +this.getRightValue(rawValue);\n    },\n    /**\r\n     * Used to get the value to display in the tooltip for the data at the given index\r\n     * @param index\r\n     * @param datasetIndex\r\n     */\n    getLabelForIndex: helpers$1.noop,\n    /**\r\n     * Returns the location of the given data point. Value can either be an index or a numerical value\r\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n     * @param value\r\n     * @param index\r\n     * @param datasetIndex\r\n     */\n    getPixelForValue: helpers$1.noop,\n    /**\r\n     * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\r\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n     * @param pixel\r\n     */\n    getValueForPixel: helpers$1.noop,\n    /**\r\n     * Returns the location of the tick at the given index\r\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n     */\n    getPixelForTick: function (index) {\n      var me = this;\n      var offset = me.options.offset;\n      var numTicks = me._ticks.length;\n      var tickWidth = 1 / Math.max(numTicks - (offset ? 0 : 1), 1);\n      return index < 0 || index > numTicks - 1 ? null : me.getPixelForDecimal(index * tickWidth + (offset ? tickWidth / 2 : 0));\n    },\n    /**\r\n     * Utility for getting the pixel location of a percentage of scale\r\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n     */\n    getPixelForDecimal: function (decimal) {\n      var me = this;\n      if (me._reversePixels) {\n        decimal = 1 - decimal;\n      }\n      return me._startPixel + decimal * me._length;\n    },\n    getDecimalForPixel: function (pixel) {\n      var decimal = (pixel - this._startPixel) / this._length;\n      return this._reversePixels ? 1 - decimal : decimal;\n    },\n    /**\r\n     * Returns the pixel for the minimum chart value\r\n     * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n     */\n    getBasePixel: function () {\n      return this.getPixelForValue(this.getBaseValue());\n    },\n    getBaseValue: function () {\n      var me = this;\n      var min = me.min;\n      var max = me.max;\n      return me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n    },\n    /**\r\n     * Returns a subset of ticks to be plotted to avoid overlapping labels.\r\n     * @private\r\n     */\n    _autoSkip: function (ticks) {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var axisLength = me._length;\n      var ticksLimit = tickOpts.maxTicksLimit || axisLength / me._tickSize() + 1;\n      var majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n      var numMajorIndices = majorIndices.length;\n      var first = majorIndices[0];\n      var last = majorIndices[numMajorIndices - 1];\n      var i, ilen, spacing, avgMajorSpacing;\n\n      // If there are too many major ticks to display them all\n      if (numMajorIndices > ticksLimit) {\n        skipMajors(ticks, majorIndices, numMajorIndices / ticksLimit);\n        return nonSkipped(ticks);\n      }\n      spacing = calculateSpacing(majorIndices, ticks, axisLength, ticksLimit);\n      if (numMajorIndices > 0) {\n        for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n          skip(ticks, spacing, majorIndices[i], majorIndices[i + 1]);\n        }\n        avgMajorSpacing = numMajorIndices > 1 ? (last - first) / (numMajorIndices - 1) : null;\n        skip(ticks, spacing, helpers$1.isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n        skip(ticks, spacing, last, helpers$1.isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n        return nonSkipped(ticks);\n      }\n      skip(ticks, spacing);\n      return nonSkipped(ticks);\n    },\n    /**\r\n     * @private\r\n     */\n    _tickSize: function () {\n      var me = this;\n      var optionTicks = me.options.ticks;\n\n      // Calculate space needed by label in axis direction.\n      var rot = helpers$1.toRadians(me.labelRotation);\n      var cos = Math.abs(Math.cos(rot));\n      var sin = Math.abs(Math.sin(rot));\n      var labelSizes = me._getLabelSizes();\n      var padding = optionTicks.autoSkipPadding || 0;\n      var w = labelSizes ? labelSizes.widest.width + padding : 0;\n      var h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n      // Calculate space needed for 1 tick in axis direction.\n      return me.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n    },\n    /**\r\n     * @private\r\n     */\n    _isVisible: function () {\n      var me = this;\n      var chart = me.chart;\n      var display = me.options.display;\n      var i, ilen, meta;\n      if (display !== 'auto') {\n        return !!display;\n      }\n\n      // When 'auto', the scale is visible if at least one associated dataset is visible.\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          if (meta.xAxisID === me.id || meta.yAxisID === me.id) {\n            return true;\n          }\n        }\n      }\n      return false;\n    },\n    /**\r\n     * @private\r\n     */\n    _computeGridLineItems: function (chartArea) {\n      var me = this;\n      var chart = me.chart;\n      var options = me.options;\n      var gridLines = options.gridLines;\n      var position = options.position;\n      var offsetGridLines = gridLines.offsetGridLines;\n      var isHorizontal = me.isHorizontal();\n      var ticks = me._ticksToDraw;\n      var ticksLength = ticks.length + (offsetGridLines ? 1 : 0);\n      var tl = getTickMarkLength(gridLines);\n      var items = [];\n      var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\n      var axisHalfWidth = axisWidth / 2;\n      var alignPixel = helpers$1._alignPixel;\n      var alignBorderValue = function (pixel) {\n        return alignPixel(chart, pixel, axisWidth);\n      };\n      var borderValue, i, tick, lineValue, alignedLineValue;\n      var tx1, ty1, tx2, ty2, x1, y1, x2, y2, lineWidth, lineColor, borderDash, borderDashOffset;\n      if (position === 'top') {\n        borderValue = alignBorderValue(me.bottom);\n        ty1 = me.bottom - tl;\n        ty2 = borderValue - axisHalfWidth;\n        y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n        y2 = chartArea.bottom;\n      } else if (position === 'bottom') {\n        borderValue = alignBorderValue(me.top);\n        y1 = chartArea.top;\n        y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n        ty1 = borderValue + axisHalfWidth;\n        ty2 = me.top + tl;\n      } else if (position === 'left') {\n        borderValue = alignBorderValue(me.right);\n        tx1 = me.right - tl;\n        tx2 = borderValue - axisHalfWidth;\n        x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n        x2 = chartArea.right;\n      } else {\n        borderValue = alignBorderValue(me.left);\n        x1 = chartArea.left;\n        x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n        tx1 = borderValue + axisHalfWidth;\n        tx2 = me.left + tl;\n      }\n      for (i = 0; i < ticksLength; ++i) {\n        tick = ticks[i] || {};\n\n        // autoskipper skipped this tick (#4635)\n        if (isNullOrUndef(tick.label) && i < ticks.length) {\n          continue;\n        }\n        if (i === me.zeroLineIndex && options.offset === offsetGridLines) {\n          // Draw the first index specially\n          lineWidth = gridLines.zeroLineWidth;\n          lineColor = gridLines.zeroLineColor;\n          borderDash = gridLines.zeroLineBorderDash || [];\n          borderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;\n        } else {\n          lineWidth = valueAtIndexOrDefault(gridLines.lineWidth, i, 1);\n          lineColor = valueAtIndexOrDefault(gridLines.color, i, 'rgba(0,0,0,0.1)');\n          borderDash = gridLines.borderDash || [];\n          borderDashOffset = gridLines.borderDashOffset || 0.0;\n        }\n        lineValue = getPixelForGridLine(me, tick._index || i, offsetGridLines);\n\n        // Skip if the pixel is out of the range\n        if (lineValue === undefined) {\n          continue;\n        }\n        alignedLineValue = alignPixel(chart, lineValue, lineWidth);\n        if (isHorizontal) {\n          tx1 = tx2 = x1 = x2 = alignedLineValue;\n        } else {\n          ty1 = ty2 = y1 = y2 = alignedLineValue;\n        }\n        items.push({\n          tx1: tx1,\n          ty1: ty1,\n          tx2: tx2,\n          ty2: ty2,\n          x1: x1,\n          y1: y1,\n          x2: x2,\n          y2: y2,\n          width: lineWidth,\n          color: lineColor,\n          borderDash: borderDash,\n          borderDashOffset: borderDashOffset\n        });\n      }\n      items.ticksLength = ticksLength;\n      items.borderValue = borderValue;\n      return items;\n    },\n    /**\r\n     * @private\r\n     */\n    _computeLabelItems: function () {\n      var me = this;\n      var options = me.options;\n      var optionTicks = options.ticks;\n      var position = options.position;\n      var isMirrored = optionTicks.mirror;\n      var isHorizontal = me.isHorizontal();\n      var ticks = me._ticksToDraw;\n      var fonts = parseTickFontOptions(optionTicks);\n      var tickPadding = optionTicks.padding;\n      var tl = getTickMarkLength(options.gridLines);\n      var rotation = -helpers$1.toRadians(me.labelRotation);\n      var items = [];\n      var i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n      if (position === 'top') {\n        y = me.bottom - tl - tickPadding;\n        textAlign = !rotation ? 'center' : 'left';\n      } else if (position === 'bottom') {\n        y = me.top + tl + tickPadding;\n        textAlign = !rotation ? 'center' : 'right';\n      } else if (position === 'left') {\n        x = me.right - (isMirrored ? 0 : tl) - tickPadding;\n        textAlign = isMirrored ? 'left' : 'right';\n      } else {\n        x = me.left + (isMirrored ? 0 : tl) + tickPadding;\n        textAlign = isMirrored ? 'right' : 'left';\n      }\n      for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n        tick = ticks[i];\n        label = tick.label;\n\n        // autoskipper skipped this tick (#4635)\n        if (isNullOrUndef(label)) {\n          continue;\n        }\n        pixel = me.getPixelForTick(tick._index || i) + optionTicks.labelOffset;\n        font = tick.major ? fonts.major : fonts.minor;\n        lineHeight = font.lineHeight;\n        lineCount = isArray(label) ? label.length : 1;\n        if (isHorizontal) {\n          x = pixel;\n          textOffset = position === 'top' ? ((!rotation ? 0.5 : 1) - lineCount) * lineHeight : (!rotation ? 0.5 : 0) * lineHeight;\n        } else {\n          y = pixel;\n          textOffset = (1 - lineCount) * lineHeight / 2;\n        }\n        items.push({\n          x: x,\n          y: y,\n          rotation: rotation,\n          label: label,\n          font: font,\n          textOffset: textOffset,\n          textAlign: textAlign\n        });\n      }\n      return items;\n    },\n    /**\r\n     * @private\r\n     */\n    _drawGrid: function (chartArea) {\n      var me = this;\n      var gridLines = me.options.gridLines;\n      if (!gridLines.display) {\n        return;\n      }\n      var ctx = me.ctx;\n      var chart = me.chart;\n      var alignPixel = helpers$1._alignPixel;\n      var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\n      var items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));\n      var width, color, i, ilen, item;\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        item = items[i];\n        width = item.width;\n        color = item.color;\n        if (width && color) {\n          ctx.save();\n          ctx.lineWidth = width;\n          ctx.strokeStyle = color;\n          if (ctx.setLineDash) {\n            ctx.setLineDash(item.borderDash);\n            ctx.lineDashOffset = item.borderDashOffset;\n          }\n          ctx.beginPath();\n          if (gridLines.drawTicks) {\n            ctx.moveTo(item.tx1, item.ty1);\n            ctx.lineTo(item.tx2, item.ty2);\n          }\n          if (gridLines.drawOnChartArea) {\n            ctx.moveTo(item.x1, item.y1);\n            ctx.lineTo(item.x2, item.y2);\n          }\n          ctx.stroke();\n          ctx.restore();\n        }\n      }\n      if (axisWidth) {\n        // Draw the line at the edge of the axis\n        var firstLineWidth = axisWidth;\n        var lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, items.ticksLength - 1, 1);\n        var borderValue = items.borderValue;\n        var x1, x2, y1, y2;\n        if (me.isHorizontal()) {\n          x1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;\n          x2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\n          y1 = y2 = borderValue;\n        } else {\n          y1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;\n          y2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\n          x1 = x2 = borderValue;\n        }\n        ctx.lineWidth = axisWidth;\n        ctx.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        ctx.stroke();\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    _drawLabels: function () {\n      var me = this;\n      var optionTicks = me.options.ticks;\n      if (!optionTicks.display) {\n        return;\n      }\n      var ctx = me.ctx;\n      var items = me._labelItems || (me._labelItems = me._computeLabelItems());\n      var i, j, ilen, jlen, item, tickFont, label, y;\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        item = items[i];\n        tickFont = item.font;\n\n        // Make sure we draw text in the correct color and font\n        ctx.save();\n        ctx.translate(item.x, item.y);\n        ctx.rotate(item.rotation);\n        ctx.font = tickFont.string;\n        ctx.fillStyle = tickFont.color;\n        ctx.textBaseline = 'middle';\n        ctx.textAlign = item.textAlign;\n        label = item.label;\n        y = item.textOffset;\n        if (isArray(label)) {\n          for (j = 0, jlen = label.length; j < jlen; ++j) {\n            // We just make sure the multiline element is a string here..\n            ctx.fillText('' + label[j], 0, y);\n            y += tickFont.lineHeight;\n          }\n        } else {\n          ctx.fillText(label, 0, y);\n        }\n        ctx.restore();\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    _drawTitle: function () {\n      var me = this;\n      var ctx = me.ctx;\n      var options = me.options;\n      var scaleLabel = options.scaleLabel;\n      if (!scaleLabel.display) {\n        return;\n      }\n      var scaleLabelFontColor = valueOrDefault$a(scaleLabel.fontColor, core_defaults.global.defaultFontColor);\n      var scaleLabelFont = helpers$1.options._parseFont(scaleLabel);\n      var scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);\n      var halfLineHeight = scaleLabelFont.lineHeight / 2;\n      var position = options.position;\n      var rotation = 0;\n      var scaleLabelX, scaleLabelY;\n      if (me.isHorizontal()) {\n        scaleLabelX = me.left + me.width / 2; // midpoint of the width\n        scaleLabelY = position === 'bottom' ? me.bottom - halfLineHeight - scaleLabelPadding.bottom : me.top + halfLineHeight + scaleLabelPadding.top;\n      } else {\n        var isLeft = position === 'left';\n        scaleLabelX = isLeft ? me.left + halfLineHeight + scaleLabelPadding.top : me.right - halfLineHeight - scaleLabelPadding.top;\n        scaleLabelY = me.top + me.height / 2;\n        rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\n      }\n      ctx.save();\n      ctx.translate(scaleLabelX, scaleLabelY);\n      ctx.rotate(rotation);\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'middle';\n      ctx.fillStyle = scaleLabelFontColor; // render in correct colour\n      ctx.font = scaleLabelFont.string;\n      ctx.fillText(scaleLabel.labelString, 0, 0);\n      ctx.restore();\n    },\n    draw: function (chartArea) {\n      var me = this;\n      if (!me._isVisible()) {\n        return;\n      }\n      me._drawGrid(chartArea);\n      me._drawTitle();\n      me._drawLabels();\n    },\n    /**\r\n     * @private\r\n     */\n    _layers: function () {\n      var me = this;\n      var opts = me.options;\n      var tz = opts.ticks && opts.ticks.z || 0;\n      var gz = opts.gridLines && opts.gridLines.z || 0;\n      if (!me._isVisible() || tz === gz || me.draw !== me._draw) {\n        // backward compatibility: draw has been overridden by custom scale\n        return [{\n          z: tz,\n          draw: function () {\n            me.draw.apply(me, arguments);\n          }\n        }];\n      }\n      return [{\n        z: gz,\n        draw: function () {\n          me._drawGrid.apply(me, arguments);\n          me._drawTitle.apply(me, arguments);\n        }\n      }, {\n        z: tz,\n        draw: function () {\n          me._drawLabels.apply(me, arguments);\n        }\n      }];\n    },\n    /**\r\n     * @private\r\n     */\n    _getMatchingVisibleMetas: function (type) {\n      var me = this;\n      var isHorizontal = me.isHorizontal();\n      return me.chart._getSortedVisibleDatasetMetas().filter(function (meta) {\n        return (!type || meta.type === type) && (isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id);\n      });\n    }\n  });\n  Scale.prototype._draw = Scale.prototype.draw;\n  var core_scale = Scale;\n  var isNullOrUndef$1 = helpers$1.isNullOrUndef;\n  var defaultConfig = {\n    position: 'bottom'\n  };\n  var scale_category = core_scale.extend({\n    determineDataLimits: function () {\n      var me = this;\n      var labels = me._getLabels();\n      var ticksOpts = me.options.ticks;\n      var min = ticksOpts.min;\n      var max = ticksOpts.max;\n      var minIndex = 0;\n      var maxIndex = labels.length - 1;\n      var findIndex;\n      if (min !== undefined) {\n        // user specified min value\n        findIndex = labels.indexOf(min);\n        if (findIndex >= 0) {\n          minIndex = findIndex;\n        }\n      }\n      if (max !== undefined) {\n        // user specified max value\n        findIndex = labels.indexOf(max);\n        if (findIndex >= 0) {\n          maxIndex = findIndex;\n        }\n      }\n      me.minIndex = minIndex;\n      me.maxIndex = maxIndex;\n      me.min = labels[minIndex];\n      me.max = labels[maxIndex];\n    },\n    buildTicks: function () {\n      var me = this;\n      var labels = me._getLabels();\n      var minIndex = me.minIndex;\n      var maxIndex = me.maxIndex;\n\n      // If we are viewing some subset of labels, slice the original array\n      me.ticks = minIndex === 0 && maxIndex === labels.length - 1 ? labels : labels.slice(minIndex, maxIndex + 1);\n    },\n    getLabelForIndex: function (index, datasetIndex) {\n      var me = this;\n      var chart = me.chart;\n      if (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {\n        return me.getRightValue(chart.data.datasets[datasetIndex].data[index]);\n      }\n      return me._getLabels()[index];\n    },\n    _configure: function () {\n      var me = this;\n      var offset = me.options.offset;\n      var ticks = me.ticks;\n      core_scale.prototype._configure.call(me);\n      if (!me.isHorizontal()) {\n        // For backward compatibility, vertical category scale reverse is inverted.\n        me._reversePixels = !me._reversePixels;\n      }\n      if (!ticks) {\n        return;\n      }\n      me._startValue = me.minIndex - (offset ? 0.5 : 0);\n      me._valueRange = Math.max(ticks.length - (offset ? 0 : 1), 1);\n    },\n    // Used to get data value locations.  Value can either be an index or a numerical value\n    getPixelForValue: function (value, index, datasetIndex) {\n      var me = this;\n      var valueCategory, labels, idx;\n      if (!isNullOrUndef$1(index) && !isNullOrUndef$1(datasetIndex)) {\n        value = me.chart.data.datasets[datasetIndex].data[index];\n      }\n\n      // If value is a data object, then index is the index in the data array,\n      // not the index of the scale. We need to change that.\n      if (!isNullOrUndef$1(value)) {\n        valueCategory = me.isHorizontal() ? value.x : value.y;\n      }\n      if (valueCategory !== undefined || value !== undefined && isNaN(index)) {\n        labels = me._getLabels();\n        value = helpers$1.valueOrDefault(valueCategory, value);\n        idx = labels.indexOf(value);\n        index = idx !== -1 ? idx : index;\n        if (isNaN(index)) {\n          index = value;\n        }\n      }\n      return me.getPixelForDecimal((index - me._startValue) / me._valueRange);\n    },\n    getPixelForTick: function (index) {\n      var ticks = this.ticks;\n      return index < 0 || index > ticks.length - 1 ? null : this.getPixelForValue(ticks[index], index + this.minIndex);\n    },\n    getValueForPixel: function (pixel) {\n      var me = this;\n      var value = Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);\n      return Math.min(Math.max(value, 0), me.ticks.length - 1);\n    },\n    getBasePixel: function () {\n      return this.bottom;\n    }\n  });\n\n  // INTERNAL: static default options, registered in src/index.js\n  var _defaults = defaultConfig;\n  scale_category._defaults = _defaults;\n  var noop = helpers$1.noop;\n  var isNullOrUndef$2 = helpers$1.isNullOrUndef;\n\n  /**\r\n   * Generate a set of linear ticks\r\n   * @param generationOptions the options used to generate the ticks\r\n   * @param dataRange the range of the data\r\n   * @returns {number[]} array of tick values\r\n   */\n  function generateTicks(generationOptions, dataRange) {\n    var ticks = [];\n    // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n    // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n    // for details.\n\n    var MIN_SPACING = 1e-14;\n    var stepSize = generationOptions.stepSize;\n    var unit = stepSize || 1;\n    var maxNumSpaces = generationOptions.maxTicks - 1;\n    var min = generationOptions.min;\n    var max = generationOptions.max;\n    var precision = generationOptions.precision;\n    var rmin = dataRange.min;\n    var rmax = dataRange.max;\n    var spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;\n    var factor, niceMin, niceMax, numSpaces;\n\n    // Beyond MIN_SPACING floating point numbers being to lose precision\n    // such that we can't do the math necessary to generate ticks\n    if (spacing < MIN_SPACING && isNullOrUndef$2(min) && isNullOrUndef$2(max)) {\n      return [rmin, rmax];\n    }\n    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n    if (numSpaces > maxNumSpaces) {\n      // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n      spacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;\n    }\n    if (stepSize || isNullOrUndef$2(precision)) {\n      // If a precision is not specified, calculate factor based on spacing\n      factor = Math.pow(10, helpers$1._decimalPlaces(spacing));\n    } else {\n      // If the user specified a precision, round to that number of decimal places\n      factor = Math.pow(10, precision);\n      spacing = Math.ceil(spacing * factor) / factor;\n    }\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n\n    // If min, max and stepSize is set and they make an evenly spaced scale use it.\n    if (stepSize) {\n      // If very close to our whole number, use it.\n      if (!isNullOrUndef$2(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {\n        niceMin = min;\n      }\n      if (!isNullOrUndef$2(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {\n        niceMax = max;\n      }\n    }\n    numSpaces = (niceMax - niceMin) / spacing;\n    // If very close to our rounded value, use it.\n    if (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n    niceMin = Math.round(niceMin * factor) / factor;\n    niceMax = Math.round(niceMax * factor) / factor;\n    ticks.push(isNullOrUndef$2(min) ? niceMin : min);\n    for (var j = 1; j < numSpaces; ++j) {\n      ticks.push(Math.round((niceMin + j * spacing) * factor) / factor);\n    }\n    ticks.push(isNullOrUndef$2(max) ? niceMax : max);\n    return ticks;\n  }\n  var scale_linearbase = core_scale.extend({\n    getRightValue: function (value) {\n      if (typeof value === 'string') {\n        return +value;\n      }\n      return core_scale.prototype.getRightValue.call(this, value);\n    },\n    handleTickRangeOptions: function () {\n      var me = this;\n      var opts = me.options;\n      var tickOpts = opts.ticks;\n\n      // If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n      // do nothing since that would make the chart weird. If the user really wants a weird chart\n      // axis, they can manually override it\n      if (tickOpts.beginAtZero) {\n        var minSign = helpers$1.sign(me.min);\n        var maxSign = helpers$1.sign(me.max);\n        if (minSign < 0 && maxSign < 0) {\n          // move the top up to 0\n          me.max = 0;\n        } else if (minSign > 0 && maxSign > 0) {\n          // move the bottom down to 0\n          me.min = 0;\n        }\n      }\n      var setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\n      var setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\n      if (tickOpts.min !== undefined) {\n        me.min = tickOpts.min;\n      } else if (tickOpts.suggestedMin !== undefined) {\n        if (me.min === null) {\n          me.min = tickOpts.suggestedMin;\n        } else {\n          me.min = Math.min(me.min, tickOpts.suggestedMin);\n        }\n      }\n      if (tickOpts.max !== undefined) {\n        me.max = tickOpts.max;\n      } else if (tickOpts.suggestedMax !== undefined) {\n        if (me.max === null) {\n          me.max = tickOpts.suggestedMax;\n        } else {\n          me.max = Math.max(me.max, tickOpts.suggestedMax);\n        }\n      }\n      if (setMin !== setMax) {\n        // We set the min or the max but not both.\n        // So ensure that our range is good\n        // Inverted or 0 length range can happen when\n        // ticks.min is set, and no datasets are visible\n        if (me.min >= me.max) {\n          if (setMin) {\n            me.max = me.min + 1;\n          } else {\n            me.min = me.max - 1;\n          }\n        }\n      }\n      if (me.min === me.max) {\n        me.max++;\n        if (!tickOpts.beginAtZero) {\n          me.min--;\n        }\n      }\n    },\n    getTickLimit: function () {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var stepSize = tickOpts.stepSize;\n      var maxTicksLimit = tickOpts.maxTicksLimit;\n      var maxTicks;\n      if (stepSize) {\n        maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\n      } else {\n        maxTicks = me._computeTickLimit();\n        maxTicksLimit = maxTicksLimit || 11;\n      }\n      if (maxTicksLimit) {\n        maxTicks = Math.min(maxTicksLimit, maxTicks);\n      }\n      return maxTicks;\n    },\n    _computeTickLimit: function () {\n      return Number.POSITIVE_INFINITY;\n    },\n    handleDirectionalChanges: noop,\n    buildTicks: function () {\n      var me = this;\n      var opts = me.options;\n      var tickOpts = opts.ticks;\n\n      // Figure out what the max number of ticks we can support it is based on the size of\n      // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n      // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n      // the graph. Make sure we always have at least 2 ticks\n      var maxTicks = me.getTickLimit();\n      maxTicks = Math.max(2, maxTicks);\n      var numericGeneratorOptions = {\n        maxTicks: maxTicks,\n        min: tickOpts.min,\n        max: tickOpts.max,\n        precision: tickOpts.precision,\n        stepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\n      };\n      var ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\n      me.handleDirectionalChanges();\n\n      // At this point, we need to update our max and min given the tick values since we have expanded the\n      // range of the scale\n      me.max = helpers$1.max(ticks);\n      me.min = helpers$1.min(ticks);\n      if (tickOpts.reverse) {\n        ticks.reverse();\n        me.start = me.max;\n        me.end = me.min;\n      } else {\n        me.start = me.min;\n        me.end = me.max;\n      }\n    },\n    convertTicksToLabels: function () {\n      var me = this;\n      me.ticksAsNumbers = me.ticks.slice();\n      me.zeroLineIndex = me.ticks.indexOf(0);\n      core_scale.prototype.convertTicksToLabels.call(me);\n    },\n    _configure: function () {\n      var me = this;\n      var ticks = me.getTicks();\n      var start = me.min;\n      var end = me.max;\n      var offset;\n      core_scale.prototype._configure.call(me);\n      if (me.options.offset && ticks.length) {\n        offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n        start -= offset;\n        end += offset;\n      }\n      me._startValue = start;\n      me._endValue = end;\n      me._valueRange = end - start;\n    }\n  });\n  var defaultConfig$1 = {\n    position: 'left',\n    ticks: {\n      callback: core_ticks.formatters.linear\n    }\n  };\n  var DEFAULT_MIN = 0;\n  var DEFAULT_MAX = 1;\n  function getOrCreateStack(stacks, stacked, meta) {\n    var key = [meta.type,\n    // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n    stacked === undefined && meta.stack === undefined ? meta.index : '', meta.stack].join('.');\n    if (stacks[key] === undefined) {\n      stacks[key] = {\n        pos: [],\n        neg: []\n      };\n    }\n    return stacks[key];\n  }\n  function stackData(scale, stacks, meta, data) {\n    var opts = scale.options;\n    var stacked = opts.stacked;\n    var stack = getOrCreateStack(stacks, stacked, meta);\n    var pos = stack.pos;\n    var neg = stack.neg;\n    var ilen = data.length;\n    var i, value;\n    for (i = 0; i < ilen; ++i) {\n      value = scale._parseValue(data[i]);\n      if (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\n        continue;\n      }\n      pos[i] = pos[i] || 0;\n      neg[i] = neg[i] || 0;\n      if (opts.relativePoints) {\n        pos[i] = 100;\n      } else if (value.min < 0 || value.max < 0) {\n        neg[i] += value.min;\n      } else {\n        pos[i] += value.max;\n      }\n    }\n  }\n  function updateMinMax(scale, meta, data) {\n    var ilen = data.length;\n    var i, value;\n    for (i = 0; i < ilen; ++i) {\n      value = scale._parseValue(data[i]);\n      if (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\n        continue;\n      }\n      scale.min = Math.min(scale.min, value.min);\n      scale.max = Math.max(scale.max, value.max);\n    }\n  }\n  var scale_linear = scale_linearbase.extend({\n    determineDataLimits: function () {\n      var me = this;\n      var opts = me.options;\n      var chart = me.chart;\n      var datasets = chart.data.datasets;\n      var metasets = me._getMatchingVisibleMetas();\n      var hasStacks = opts.stacked;\n      var stacks = {};\n      var ilen = metasets.length;\n      var i, meta, data, values;\n      me.min = Number.POSITIVE_INFINITY;\n      me.max = Number.NEGATIVE_INFINITY;\n      if (hasStacks === undefined) {\n        for (i = 0; !hasStacks && i < ilen; ++i) {\n          meta = metasets[i];\n          hasStacks = meta.stack !== undefined;\n        }\n      }\n      for (i = 0; i < ilen; ++i) {\n        meta = metasets[i];\n        data = datasets[meta.index].data;\n        if (hasStacks) {\n          stackData(me, stacks, meta, data);\n        } else {\n          updateMinMax(me, meta, data);\n        }\n      }\n      helpers$1.each(stacks, function (stackValues) {\n        values = stackValues.pos.concat(stackValues.neg);\n        me.min = Math.min(me.min, helpers$1.min(values));\n        me.max = Math.max(me.max, helpers$1.max(values));\n      });\n      me.min = helpers$1.isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\n      me.max = helpers$1.isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\n\n      // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n      me.handleTickRangeOptions();\n    },\n    // Returns the maximum number of ticks based on the scale dimension\n    _computeTickLimit: function () {\n      var me = this;\n      var tickFont;\n      if (me.isHorizontal()) {\n        return Math.ceil(me.width / 40);\n      }\n      tickFont = helpers$1.options._parseFont(me.options.ticks);\n      return Math.ceil(me.height / tickFont.lineHeight);\n    },\n    // Called after the ticks are built. We need\n    handleDirectionalChanges: function () {\n      if (!this.isHorizontal()) {\n        // We are in a vertical orientation. The top value is the highest. So reverse the array\n        this.ticks.reverse();\n      }\n    },\n    getLabelForIndex: function (index, datasetIndex) {\n      return this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\n    },\n    // Utils\n    getPixelForValue: function (value) {\n      var me = this;\n      return me.getPixelForDecimal((+me.getRightValue(value) - me._startValue) / me._valueRange);\n    },\n    getValueForPixel: function (pixel) {\n      return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n    },\n    getPixelForTick: function (index) {\n      var ticks = this.ticksAsNumbers;\n      if (index < 0 || index > ticks.length - 1) {\n        return null;\n      }\n      return this.getPixelForValue(ticks[index]);\n    }\n  });\n\n  // INTERNAL: static default options, registered in src/index.js\n  var _defaults$1 = defaultConfig$1;\n  scale_linear._defaults = _defaults$1;\n  var valueOrDefault$b = helpers$1.valueOrDefault;\n  var log10 = helpers$1.math.log10;\n\n  /**\r\n   * Generate a set of logarithmic ticks\r\n   * @param generationOptions the options used to generate the ticks\r\n   * @param dataRange the range of the data\r\n   * @returns {number[]} array of tick values\r\n   */\n  function generateTicks$1(generationOptions, dataRange) {\n    var ticks = [];\n    var tickVal = valueOrDefault$b(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n    var endExp = Math.floor(log10(dataRange.max));\n    var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n    var exp, significand;\n    if (tickVal === 0) {\n      exp = Math.floor(log10(dataRange.minNotZero));\n      significand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\n      ticks.push(tickVal);\n      tickVal = significand * Math.pow(10, exp);\n    } else {\n      exp = Math.floor(log10(tickVal));\n      significand = Math.floor(tickVal / Math.pow(10, exp));\n    }\n    var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n    do {\n      ticks.push(tickVal);\n      ++significand;\n      if (significand === 10) {\n        significand = 1;\n        ++exp;\n        precision = exp >= 0 ? 1 : precision;\n      }\n      tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n    } while (exp < endExp || exp === endExp && significand < endSignificand);\n    var lastTick = valueOrDefault$b(generationOptions.max, tickVal);\n    ticks.push(lastTick);\n    return ticks;\n  }\n  var defaultConfig$2 = {\n    position: 'left',\n    // label settings\n    ticks: {\n      callback: core_ticks.formatters.logarithmic\n    }\n  };\n\n  // TODO(v3): change this to positiveOrDefault\n  function nonNegativeOrDefault(value, defaultValue) {\n    return helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;\n  }\n  var scale_logarithmic = core_scale.extend({\n    determineDataLimits: function () {\n      var me = this;\n      var opts = me.options;\n      var chart = me.chart;\n      var datasets = chart.data.datasets;\n      var isHorizontal = me.isHorizontal();\n      function IDMatches(meta) {\n        return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n      }\n      var datasetIndex, meta, value, data, i, ilen;\n\n      // Calculate Range\n      me.min = Number.POSITIVE_INFINITY;\n      me.max = Number.NEGATIVE_INFINITY;\n      me.minNotZero = Number.POSITIVE_INFINITY;\n      var hasStacks = opts.stacked;\n      if (hasStacks === undefined) {\n        for (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\n          meta = chart.getDatasetMeta(datasetIndex);\n          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && meta.stack !== undefined) {\n            hasStacks = true;\n            break;\n          }\n        }\n      }\n      if (opts.stacked || hasStacks) {\n        var valuesPerStack = {};\n        for (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\n          meta = chart.getDatasetMeta(datasetIndex);\n          var key = [meta.type,\n          // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n          opts.stacked === undefined && meta.stack === undefined ? datasetIndex : '', meta.stack].join('.');\n          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n            if (valuesPerStack[key] === undefined) {\n              valuesPerStack[key] = [];\n            }\n            data = datasets[datasetIndex].data;\n            for (i = 0, ilen = data.length; i < ilen; i++) {\n              var values = valuesPerStack[key];\n              value = me._parseValue(data[i]);\n              // invalid, hidden and negative values are ignored\n              if (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\n                continue;\n              }\n              values[i] = values[i] || 0;\n              values[i] += value.max;\n            }\n          }\n        }\n        helpers$1.each(valuesPerStack, function (valuesForType) {\n          if (valuesForType.length > 0) {\n            var minVal = helpers$1.min(valuesForType);\n            var maxVal = helpers$1.max(valuesForType);\n            me.min = Math.min(me.min, minVal);\n            me.max = Math.max(me.max, maxVal);\n          }\n        });\n      } else {\n        for (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\n          meta = chart.getDatasetMeta(datasetIndex);\n          if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n            data = datasets[datasetIndex].data;\n            for (i = 0, ilen = data.length; i < ilen; i++) {\n              value = me._parseValue(data[i]);\n              // invalid, hidden and negative values are ignored\n              if (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\n                continue;\n              }\n              me.min = Math.min(value.min, me.min);\n              me.max = Math.max(value.max, me.max);\n              if (value.min !== 0) {\n                me.minNotZero = Math.min(value.min, me.minNotZero);\n              }\n            }\n          }\n        }\n      }\n      me.min = helpers$1.isFinite(me.min) ? me.min : null;\n      me.max = helpers$1.isFinite(me.max) ? me.max : null;\n      me.minNotZero = helpers$1.isFinite(me.minNotZero) ? me.minNotZero : null;\n\n      // Common base implementation to handle ticks.min, ticks.max\n      this.handleTickRangeOptions();\n    },\n    handleTickRangeOptions: function () {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var DEFAULT_MIN = 1;\n      var DEFAULT_MAX = 10;\n      me.min = nonNegativeOrDefault(tickOpts.min, me.min);\n      me.max = nonNegativeOrDefault(tickOpts.max, me.max);\n      if (me.min === me.max) {\n        if (me.min !== 0 && me.min !== null) {\n          me.min = Math.pow(10, Math.floor(log10(me.min)) - 1);\n          me.max = Math.pow(10, Math.floor(log10(me.max)) + 1);\n        } else {\n          me.min = DEFAULT_MIN;\n          me.max = DEFAULT_MAX;\n        }\n      }\n      if (me.min === null) {\n        me.min = Math.pow(10, Math.floor(log10(me.max)) - 1);\n      }\n      if (me.max === null) {\n        me.max = me.min !== 0 ? Math.pow(10, Math.floor(log10(me.min)) + 1) : DEFAULT_MAX;\n      }\n      if (me.minNotZero === null) {\n        if (me.min > 0) {\n          me.minNotZero = me.min;\n        } else if (me.max < 1) {\n          me.minNotZero = Math.pow(10, Math.floor(log10(me.max)));\n        } else {\n          me.minNotZero = DEFAULT_MIN;\n        }\n      }\n    },\n    buildTicks: function () {\n      var me = this;\n      var tickOpts = me.options.ticks;\n      var reverse = !me.isHorizontal();\n      var generationOptions = {\n        min: nonNegativeOrDefault(tickOpts.min),\n        max: nonNegativeOrDefault(tickOpts.max)\n      };\n      var ticks = me.ticks = generateTicks$1(generationOptions, me);\n\n      // At this point, we need to update our max and min given the tick values since we have expanded the\n      // range of the scale\n      me.max = helpers$1.max(ticks);\n      me.min = helpers$1.min(ticks);\n      if (tickOpts.reverse) {\n        reverse = !reverse;\n        me.start = me.max;\n        me.end = me.min;\n      } else {\n        me.start = me.min;\n        me.end = me.max;\n      }\n      if (reverse) {\n        ticks.reverse();\n      }\n    },\n    convertTicksToLabels: function () {\n      this.tickValues = this.ticks.slice();\n      core_scale.prototype.convertTicksToLabels.call(this);\n    },\n    // Get the correct tooltip label\n    getLabelForIndex: function (index, datasetIndex) {\n      return this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\n    },\n    getPixelForTick: function (index) {\n      var ticks = this.tickValues;\n      if (index < 0 || index > ticks.length - 1) {\n        return null;\n      }\n      return this.getPixelForValue(ticks[index]);\n    },\n    /**\r\n     * Returns the value of the first tick.\r\n     * @param {number} value - The minimum not zero value.\r\n     * @return {number} The first tick value.\r\n     * @private\r\n     */\n    _getFirstTickValue: function (value) {\n      var exp = Math.floor(log10(value));\n      var significand = Math.floor(value / Math.pow(10, exp));\n      return significand * Math.pow(10, exp);\n    },\n    _configure: function () {\n      var me = this;\n      var start = me.min;\n      var offset = 0;\n      core_scale.prototype._configure.call(me);\n      if (start === 0) {\n        start = me._getFirstTickValue(me.minNotZero);\n        offset = valueOrDefault$b(me.options.ticks.fontSize, core_defaults.global.defaultFontSize) / me._length;\n      }\n      me._startValue = log10(start);\n      me._valueOffset = offset;\n      me._valueRange = (log10(me.max) - log10(start)) / (1 - offset);\n    },\n    getPixelForValue: function (value) {\n      var me = this;\n      var decimal = 0;\n      value = +me.getRightValue(value);\n      if (value > me.min && value > 0) {\n        decimal = (log10(value) - me._startValue) / me._valueRange + me._valueOffset;\n      }\n      return me.getPixelForDecimal(decimal);\n    },\n    getValueForPixel: function (pixel) {\n      var me = this;\n      var decimal = me.getDecimalForPixel(pixel);\n      return decimal === 0 && me.min === 0 ? 0 : Math.pow(10, me._startValue + (decimal - me._valueOffset) * me._valueRange);\n    }\n  });\n\n  // INTERNAL: static default options, registered in src/index.js\n  var _defaults$2 = defaultConfig$2;\n  scale_logarithmic._defaults = _defaults$2;\n  var valueOrDefault$c = helpers$1.valueOrDefault;\n  var valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;\n  var resolve$4 = helpers$1.options.resolve;\n  var defaultConfig$3 = {\n    display: true,\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n    angleLines: {\n      display: true,\n      color: 'rgba(0,0,0,0.1)',\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n    gridLines: {\n      circular: false\n    },\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n      // String - The colour of the label backdrop\n      backdropColor: 'rgba(255,255,255,0.75)',\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPaddingY: 2,\n      // Number - The backdrop padding to the side of the label in pixels\n      backdropPaddingX: 2,\n      callback: core_ticks.formatters.linear\n    },\n    pointLabels: {\n      // Boolean - if true, show point labels\n      display: true,\n      // Number - Point label font size in pixels\n      fontSize: 10,\n      // Function - Used to convert point labels\n      callback: function (label) {\n        return label;\n      }\n    }\n  };\n  function getTickBackdropHeight(opts) {\n    var tickOpts = opts.ticks;\n    if (tickOpts.display && opts.display) {\n      return valueOrDefault$c(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;\n    }\n    return 0;\n  }\n  function measureLabelSize(ctx, lineHeight, label) {\n    if (helpers$1.isArray(label)) {\n      return {\n        w: helpers$1.longestText(ctx, ctx.font, label),\n        h: label.length * lineHeight\n      };\n    }\n    return {\n      w: ctx.measureText(label).width,\n      h: lineHeight\n    };\n  }\n  function determineLimits(angle, pos, size, min, max) {\n    if (angle === min || angle === max) {\n      return {\n        start: pos - size / 2,\n        end: pos + size / 2\n      };\n    } else if (angle < min || angle > max) {\n      return {\n        start: pos - size,\n        end: pos\n      };\n    }\n    return {\n      start: pos,\n      end: pos + size\n    };\n  }\n\n  /**\r\n   * Helper function to fit a radial linear scale with point labels\r\n   */\n  function fitWithPointLabels(scale) {\n    // Right, this is really confusing and there is a lot of maths going on here\n    // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n    //\n    // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n    //\n    // Solution:\n    //\n    // We assume the radius of the polygon is half the size of the canvas at first\n    // at each index we check if the text overlaps.\n    //\n    // Where it does, we store that angle and that index.\n    //\n    // After finding the largest index and angle we calculate how much we need to remove\n    // from the shape radius to move the point inwards by that x.\n    //\n    // We average the left and right distances to get the maximum shape radius that can fit in the box\n    // along with labels.\n    //\n    // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n    // on each side, removing that from the size, halving it and adding the left x protrusion width.\n    //\n    // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n    // and position it in the most space efficient manner\n    //\n    // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n    var plFont = helpers$1.options._parseFont(scale.options.pointLabels);\n\n    // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n    // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n    var furthestLimits = {\n      l: 0,\n      r: scale.width,\n      t: 0,\n      b: scale.height - scale.paddingTop\n    };\n    var furthestAngles = {};\n    var i, textSize, pointPosition;\n    scale.ctx.font = plFont.string;\n    scale._pointLabelSizes = [];\n    var valueCount = scale.chart.data.labels.length;\n    for (i = 0; i < valueCount; i++) {\n      pointPosition = scale.getPointPosition(i, scale.drawingArea + 5);\n      textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i]);\n      scale._pointLabelSizes[i] = textSize;\n\n      // Add quarter circle to make degree 0 mean top of circle\n      var angleRadians = scale.getIndexAngle(i);\n      var angle = helpers$1.toDegrees(angleRadians) % 360;\n      var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n      var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n      if (hLimits.start < furthestLimits.l) {\n        furthestLimits.l = hLimits.start;\n        furthestAngles.l = angleRadians;\n      }\n      if (hLimits.end > furthestLimits.r) {\n        furthestLimits.r = hLimits.end;\n        furthestAngles.r = angleRadians;\n      }\n      if (vLimits.start < furthestLimits.t) {\n        furthestLimits.t = vLimits.start;\n        furthestAngles.t = angleRadians;\n      }\n      if (vLimits.end > furthestLimits.b) {\n        furthestLimits.b = vLimits.end;\n        furthestAngles.b = angleRadians;\n      }\n    }\n    scale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n  }\n  function getTextAlignForAngle(angle) {\n    if (angle === 0 || angle === 180) {\n      return 'center';\n    } else if (angle < 180) {\n      return 'left';\n    }\n    return 'right';\n  }\n  function fillText(ctx, text, position, lineHeight) {\n    var y = position.y + lineHeight / 2;\n    var i, ilen;\n    if (helpers$1.isArray(text)) {\n      for (i = 0, ilen = text.length; i < ilen; ++i) {\n        ctx.fillText(text[i], position.x, y);\n        y += lineHeight;\n      }\n    } else {\n      ctx.fillText(text, position.x, y);\n    }\n  }\n  function adjustPointPositionForLabelHeight(angle, textSize, position) {\n    if (angle === 90 || angle === 270) {\n      position.y -= textSize.h / 2;\n    } else if (angle > 270 || angle < 90) {\n      position.y -= textSize.h;\n    }\n  }\n  function drawPointLabels(scale) {\n    var ctx = scale.ctx;\n    var opts = scale.options;\n    var pointLabelOpts = opts.pointLabels;\n    var tickBackdropHeight = getTickBackdropHeight(opts);\n    var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n    var plFont = helpers$1.options._parseFont(pointLabelOpts);\n    ctx.save();\n    ctx.font = plFont.string;\n    ctx.textBaseline = 'middle';\n    for (var i = scale.chart.data.labels.length - 1; i >= 0; i--) {\n      // Extra pixels out for some label spacing\n      var extra = i === 0 ? tickBackdropHeight / 2 : 0;\n      var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5);\n\n      // Keep this in loop since we may support array properties here\n      var pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);\n      ctx.fillStyle = pointLabelFontColor;\n      var angleRadians = scale.getIndexAngle(i);\n      var angle = helpers$1.toDegrees(angleRadians);\n      ctx.textAlign = getTextAlignForAngle(angle);\n      adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\n      fillText(ctx, scale.pointLabels[i], pointLabelPosition, plFont.lineHeight);\n    }\n    ctx.restore();\n  }\n  function drawRadiusLine(scale, gridLineOpts, radius, index) {\n    var ctx = scale.ctx;\n    var circular = gridLineOpts.circular;\n    var valueCount = scale.chart.data.labels.length;\n    var lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);\n    var lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);\n    var pointPosition;\n    if (!circular && !valueCount || !lineColor || !lineWidth) {\n      return;\n    }\n    ctx.save();\n    ctx.strokeStyle = lineColor;\n    ctx.lineWidth = lineWidth;\n    if (ctx.setLineDash) {\n      ctx.setLineDash(gridLineOpts.borderDash || []);\n      ctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;\n    }\n    ctx.beginPath();\n    if (circular) {\n      // Draw circular arcs between the points\n      ctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\n    } else {\n      // Draw straight lines connecting each index\n      pointPosition = scale.getPointPosition(0, radius);\n      ctx.moveTo(pointPosition.x, pointPosition.y);\n      for (var i = 1; i < valueCount; i++) {\n        pointPosition = scale.getPointPosition(i, radius);\n        ctx.lineTo(pointPosition.x, pointPosition.y);\n      }\n    }\n    ctx.closePath();\n    ctx.stroke();\n    ctx.restore();\n  }\n  function numberOrZero(param) {\n    return helpers$1.isNumber(param) ? param : 0;\n  }\n  var scale_radialLinear = scale_linearbase.extend({\n    setDimensions: function () {\n      var me = this;\n\n      // Set the unconstrained dimension before label rotation\n      me.width = me.maxWidth;\n      me.height = me.maxHeight;\n      me.paddingTop = getTickBackdropHeight(me.options) / 2;\n      me.xCenter = Math.floor(me.width / 2);\n      me.yCenter = Math.floor((me.height - me.paddingTop) / 2);\n      me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\n    },\n    determineDataLimits: function () {\n      var me = this;\n      var chart = me.chart;\n      var min = Number.POSITIVE_INFINITY;\n      var max = Number.NEGATIVE_INFINITY;\n      helpers$1.each(chart.data.datasets, function (dataset, datasetIndex) {\n        if (chart.isDatasetVisible(datasetIndex)) {\n          var meta = chart.getDatasetMeta(datasetIndex);\n          helpers$1.each(dataset.data, function (rawValue, index) {\n            var value = +me.getRightValue(rawValue);\n            if (isNaN(value) || meta.data[index].hidden) {\n              return;\n            }\n            min = Math.min(value, min);\n            max = Math.max(value, max);\n          });\n        }\n      });\n      me.min = min === Number.POSITIVE_INFINITY ? 0 : min;\n      me.max = max === Number.NEGATIVE_INFINITY ? 0 : max;\n\n      // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n      me.handleTickRangeOptions();\n    },\n    // Returns the maximum number of ticks based on the scale dimension\n    _computeTickLimit: function () {\n      return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n    },\n    convertTicksToLabels: function () {\n      var me = this;\n      scale_linearbase.prototype.convertTicksToLabels.call(me);\n\n      // Point labels\n      me.pointLabels = me.chart.data.labels.map(function () {\n        var label = helpers$1.callback(me.options.pointLabels.callback, arguments, me);\n        return label || label === 0 ? label : '';\n      });\n    },\n    getLabelForIndex: function (index, datasetIndex) {\n      return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n    },\n    fit: function () {\n      var me = this;\n      var opts = me.options;\n      if (opts.display && opts.pointLabels.display) {\n        fitWithPointLabels(me);\n      } else {\n        me.setCenterPoint(0, 0, 0, 0);\n      }\n    },\n    /**\r\n     * Set radius reductions and determine new radius and center point\r\n     * @private\r\n     */\n    setReductions: function (largestPossibleRadius, furthestLimits, furthestAngles) {\n      var me = this;\n      var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n      var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n      var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n      var radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\n      radiusReductionLeft = numberOrZero(radiusReductionLeft);\n      radiusReductionRight = numberOrZero(radiusReductionRight);\n      radiusReductionTop = numberOrZero(radiusReductionTop);\n      radiusReductionBottom = numberOrZero(radiusReductionBottom);\n      me.drawingArea = Math.min(Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2), Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\n      me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n    },\n    setCenterPoint: function (leftMovement, rightMovement, topMovement, bottomMovement) {\n      var me = this;\n      var maxRight = me.width - rightMovement - me.drawingArea;\n      var maxLeft = leftMovement + me.drawingArea;\n      var maxTop = topMovement + me.drawingArea;\n      var maxBottom = me.height - me.paddingTop - bottomMovement - me.drawingArea;\n      me.xCenter = Math.floor((maxLeft + maxRight) / 2 + me.left);\n      me.yCenter = Math.floor((maxTop + maxBottom) / 2 + me.top + me.paddingTop);\n    },\n    getIndexAngle: function (index) {\n      var chart = this.chart;\n      var angleMultiplier = 360 / chart.data.labels.length;\n      var options = chart.options || {};\n      var startAngle = options.startAngle || 0;\n\n      // Start from the top instead of right, so remove a quarter of the circle\n      var angle = (index * angleMultiplier + startAngle) % 360;\n      return (angle < 0 ? angle + 360 : angle) * Math.PI * 2 / 360;\n    },\n    getDistanceFromCenterForValue: function (value) {\n      var me = this;\n      if (helpers$1.isNullOrUndef(value)) {\n        return NaN;\n      }\n\n      // Take into account half font size + the yPadding of the top value\n      var scalingFactor = me.drawingArea / (me.max - me.min);\n      if (me.options.ticks.reverse) {\n        return (me.max - value) * scalingFactor;\n      }\n      return (value - me.min) * scalingFactor;\n    },\n    getPointPosition: function (index, distanceFromCenter) {\n      var me = this;\n      var thisAngle = me.getIndexAngle(index) - Math.PI / 2;\n      return {\n        x: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,\n        y: Math.sin(thisAngle) * distanceFromCenter + me.yCenter\n      };\n    },\n    getPointPositionForValue: function (index, value) {\n      return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n    },\n    getBasePosition: function (index) {\n      var me = this;\n      var min = me.min;\n      var max = me.max;\n      return me.getPointPositionForValue(index || 0, me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0);\n    },\n    /**\r\n     * @private\r\n     */\n    _drawGrid: function () {\n      var me = this;\n      var ctx = me.ctx;\n      var opts = me.options;\n      var gridLineOpts = opts.gridLines;\n      var angleLineOpts = opts.angleLines;\n      var lineWidth = valueOrDefault$c(angleLineOpts.lineWidth, gridLineOpts.lineWidth);\n      var lineColor = valueOrDefault$c(angleLineOpts.color, gridLineOpts.color);\n      var i, offset, position;\n      if (opts.pointLabels.display) {\n        drawPointLabels(me);\n      }\n      if (gridLineOpts.display) {\n        helpers$1.each(me.ticks, function (label, index) {\n          if (index !== 0) {\n            offset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\n            drawRadiusLine(me, gridLineOpts, offset, index);\n          }\n        });\n      }\n      if (angleLineOpts.display && lineWidth && lineColor) {\n        ctx.save();\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = lineColor;\n        if (ctx.setLineDash) {\n          ctx.setLineDash(resolve$4([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));\n          ctx.lineDashOffset = resolve$4([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);\n        }\n        for (i = me.chart.data.labels.length - 1; i >= 0; i--) {\n          offset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);\n          position = me.getPointPosition(i, offset);\n          ctx.beginPath();\n          ctx.moveTo(me.xCenter, me.yCenter);\n          ctx.lineTo(position.x, position.y);\n          ctx.stroke();\n        }\n        ctx.restore();\n      }\n    },\n    /**\r\n     * @private\r\n     */\n    _drawLabels: function () {\n      var me = this;\n      var ctx = me.ctx;\n      var opts = me.options;\n      var tickOpts = opts.ticks;\n      if (!tickOpts.display) {\n        return;\n      }\n      var startAngle = me.getIndexAngle(0);\n      var tickFont = helpers$1.options._parseFont(tickOpts);\n      var tickFontColor = valueOrDefault$c(tickOpts.fontColor, core_defaults.global.defaultFontColor);\n      var offset, width;\n      ctx.save();\n      ctx.font = tickFont.string;\n      ctx.translate(me.xCenter, me.yCenter);\n      ctx.rotate(startAngle);\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'middle';\n      helpers$1.each(me.ticks, function (label, index) {\n        if (index === 0 && !tickOpts.reverse) {\n          return;\n        }\n        offset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\n        if (tickOpts.showLabelBackdrop) {\n          width = ctx.measureText(label).width;\n          ctx.fillStyle = tickOpts.backdropColor;\n          ctx.fillRect(-width / 2 - tickOpts.backdropPaddingX, -offset - tickFont.size / 2 - tickOpts.backdropPaddingY, width + tickOpts.backdropPaddingX * 2, tickFont.size + tickOpts.backdropPaddingY * 2);\n        }\n        ctx.fillStyle = tickFontColor;\n        ctx.fillText(label, 0, -offset);\n      });\n      ctx.restore();\n    },\n    /**\r\n     * @private\r\n     */\n    _drawTitle: helpers$1.noop\n  });\n\n  // INTERNAL: static default options, registered in src/index.js\n  var _defaults$3 = defaultConfig$3;\n  scale_radialLinear._defaults = _defaults$3;\n  var deprecated$1 = helpers$1._deprecated;\n  var resolve$5 = helpers$1.options.resolve;\n  var valueOrDefault$d = helpers$1.valueOrDefault;\n\n  // Integer constants are from the ES6 spec.\n  var MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n  var MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n  var INTERVALS = {\n    millisecond: {\n      common: true,\n      size: 1,\n      steps: 1000\n    },\n    second: {\n      common: true,\n      size: 1000,\n      steps: 60\n    },\n    minute: {\n      common: true,\n      size: 60000,\n      steps: 60\n    },\n    hour: {\n      common: true,\n      size: 3600000,\n      steps: 24\n    },\n    day: {\n      common: true,\n      size: 86400000,\n      steps: 30\n    },\n    week: {\n      common: false,\n      size: 604800000,\n      steps: 4\n    },\n    month: {\n      common: true,\n      size: 2.628e9,\n      steps: 12\n    },\n    quarter: {\n      common: false,\n      size: 7.884e9,\n      steps: 4\n    },\n    year: {\n      common: true,\n      size: 3.154e10\n    }\n  };\n  var UNITS = Object.keys(INTERVALS);\n  function sorter(a, b) {\n    return a - b;\n  }\n  function arrayUnique(items) {\n    var hash = {};\n    var out = [];\n    var i, ilen, item;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      if (!hash[item]) {\n        hash[item] = true;\n        out.push(item);\n      }\n    }\n    return out;\n  }\n  function getMin(options) {\n    return helpers$1.valueOrDefault(options.time.min, options.ticks.min);\n  }\n  function getMax(options) {\n    return helpers$1.valueOrDefault(options.time.max, options.ticks.max);\n  }\n\n  /**\r\n   * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\r\n   * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\r\n   * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\r\n   * extremity (left + width or top + height). Note that it would be more optimized to directly\r\n   * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\r\n   * to create the lookup table. The table ALWAYS contains at least two items: min and max.\r\n   *\r\n   * @param {number[]} timestamps - timestamps sorted from lowest to highest.\r\n   * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min\r\n   * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\r\n   * If 'series', timestamps will be positioned at the same distance from each other. In this\r\n   * case, only timestamps that break the time linearity are registered, meaning that in the\r\n   * best case, all timestamps are linear, the table contains only min and max.\r\n   */\n  function buildLookupTable(timestamps, min, max, distribution) {\n    if (distribution === 'linear' || !timestamps.length) {\n      return [{\n        time: min,\n        pos: 0\n      }, {\n        time: max,\n        pos: 1\n      }];\n    }\n    var table = [];\n    var items = [min];\n    var i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr > min && curr < max) {\n        items.push(curr);\n      }\n    }\n    items.push(max);\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\n        table.push({\n          time: curr,\n          pos: i / (ilen - 1)\n        });\n      }\n    }\n    return table;\n  }\n\n  // @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\n  function lookup(table, key, value) {\n    var lo = 0;\n    var hi = table.length - 1;\n    var mid, i0, i1;\n    while (lo >= 0 && lo <= hi) {\n      mid = lo + hi >> 1;\n      i0 = table[mid - 1] || null;\n      i1 = table[mid];\n      if (!i0) {\n        // given value is outside table (before first item)\n        return {\n          lo: null,\n          hi: i1\n        };\n      } else if (i1[key] < value) {\n        lo = mid + 1;\n      } else if (i0[key] > value) {\n        hi = mid - 1;\n      } else {\n        return {\n          lo: i0,\n          hi: i1\n        };\n      }\n    }\n\n    // given value is outside table (after last item)\n    return {\n      lo: i1,\n      hi: null\n    };\n  }\n\n  /**\r\n   * Linearly interpolates the given source `value` using the table items `skey` values and\r\n   * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\r\n   * returns the position for a timestamp equal to 42. If value is out of bounds, values at\r\n   * index [0, 1] or [n - 1, n] are used for the interpolation.\r\n   */\n  function interpolate$1(table, skey, sval, tkey) {\n    var range = lookup(table, skey, sval);\n\n    // Note: the lookup table ALWAYS contains at least 2 items (min and max)\n    var prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\n    var next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\n    var span = next[skey] - prev[skey];\n    var ratio = span ? (sval - prev[skey]) / span : 0;\n    var offset = (next[tkey] - prev[tkey]) * ratio;\n    return prev[tkey] + offset;\n  }\n  function toTimestamp(scale, input) {\n    var adapter = scale._adapter;\n    var options = scale.options.time;\n    var parser = options.parser;\n    var format = parser || options.format;\n    var value = input;\n    if (typeof parser === 'function') {\n      value = parser(value);\n    }\n\n    // Only parse if its not a timestamp already\n    if (!helpers$1.isFinite(value)) {\n      value = typeof format === 'string' ? adapter.parse(value, format) : adapter.parse(value);\n    }\n    if (value !== null) {\n      return +value;\n    }\n\n    // Labels are in an incompatible format and no `parser` has been provided.\n    // The user might still use the deprecated `format` option for parsing.\n    if (!parser && typeof format === 'function') {\n      value = format(input);\n\n      // `format` could return something else than a timestamp, if so, parse it\n      if (!helpers$1.isFinite(value)) {\n        value = adapter.parse(value);\n      }\n    }\n    return value;\n  }\n  function parse(scale, input) {\n    if (helpers$1.isNullOrUndef(input)) {\n      return null;\n    }\n    var options = scale.options.time;\n    var value = toTimestamp(scale, scale.getRightValue(input));\n    if (value === null) {\n      return value;\n    }\n    if (options.round) {\n      value = +scale._adapter.startOf(value, options.round);\n    }\n    return value;\n  }\n\n  /**\r\n   * Figures out what unit results in an appropriate number of auto-generated ticks\r\n   */\n  function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n    var ilen = UNITS.length;\n    var i, interval, factor;\n    for (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n      interval = INTERVALS[UNITS[i]];\n      factor = interval.steps ? interval.steps : MAX_INTEGER;\n      if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n        return UNITS[i];\n      }\n    }\n    return UNITS[ilen - 1];\n  }\n\n  /**\r\n   * Figures out what unit to format a set of ticks with\r\n   */\n  function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n    var i, unit;\n    for (i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n      unit = UNITS[i];\n      if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n        return unit;\n      }\n    }\n    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n  }\n  function determineMajorUnit(unit) {\n    for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n      if (INTERVALS[UNITS[i]].common) {\n        return UNITS[i];\n      }\n    }\n  }\n\n  /**\r\n   * Generates a maximum of `capacity` timestamps between min and max, rounded to the\r\n   * `minor` unit using the given scale time `options`.\r\n   * Important: this method can return ticks outside the min and max range, it's the\r\n   * responsibility of the calling code to clamp values if needed.\r\n   */\n  function generate(scale, min, max, capacity) {\n    var adapter = scale._adapter;\n    var options = scale.options;\n    var timeOpts = options.time;\n    var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\n    var stepSize = resolve$5([timeOpts.stepSize, timeOpts.unitStepSize, 1]);\n    var weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    var first = min;\n    var ticks = [];\n    var time;\n\n    // For 'week' unit, handle the first day of week option\n    if (weekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, weekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor;\n    }\n    for (time = first; time < max; time = +adapter.add(time, stepSize, minor)) {\n      ticks.push(time);\n    }\n    if (time === max || options.bounds === 'ticks') {\n      ticks.push(time);\n    }\n    return ticks;\n  }\n\n  /**\r\n   * Returns the start and end offsets from edges in the form of {start, end}\r\n   * where each value is a relative width to the scale and ranges between 0 and 1.\r\n   * They add extra margins on the both sides by scaling down the original scale.\r\n   * Offsets are added when the `offset` option is true.\r\n   */\n  function computeOffsets(table, ticks, min, max, options) {\n    var start = 0;\n    var end = 0;\n    var first, last;\n    if (options.offset && ticks.length) {\n      first = interpolate$1(table, 'time', ticks[0], 'pos');\n      if (ticks.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;\n      }\n      last = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');\n      if (ticks.length === 1) {\n        end = last;\n      } else {\n        end = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;\n      }\n    }\n    return {\n      start: start,\n      end: end,\n      factor: 1 / (start + 1 + end)\n    };\n  }\n  function setMajorTicks(scale, ticks, map, majorUnit) {\n    var adapter = scale._adapter;\n    var first = +adapter.startOf(ticks[0].value, majorUnit);\n    var last = ticks[ticks.length - 1].value;\n    var major, index;\n    for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n      index = map[major];\n      if (index >= 0) {\n        ticks[index].major = true;\n      }\n    }\n    return ticks;\n  }\n  function ticksFromTimestamps(scale, values, majorUnit) {\n    var ticks = [];\n    var map = {};\n    var ilen = values.length;\n    var i, value;\n    for (i = 0; i < ilen; ++i) {\n      value = values[i];\n      map[value] = i;\n      ticks.push({\n        value: value,\n        major: false\n      });\n    }\n\n    // We set the major ticks separately from the above loop because calling startOf for every tick\n    // is expensive when there is a large number of ticks\n    return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n  }\n  var defaultConfig$4 = {\n    position: 'bottom',\n    /**\r\n     * Data distribution along the scale:\r\n     * - 'linear': data are spread according to their time (distances can vary),\r\n     * - 'series': data are spread at the same distance from each other.\r\n     * @see https://github.com/chartjs/Chart.js/pull/4507\r\n     * @since 2.7.0\r\n     */\n    distribution: 'linear',\n    /**\r\n     * Scale boundary strategy (bypassed by min/max time options)\r\n     * - `data`: make sure data are fully visible, ticks outside are removed\r\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\r\n     * @see https://github.com/chartjs/Chart.js/pull/4556\r\n     * @since 2.7.0\r\n     */\n    bounds: 'data',\n    adapters: {},\n    time: {\n      parser: false,\n      // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n      unit: false,\n      // false == automatic or override with week, month, year, etc.\n      round: false,\n      // none, or override with week, month, year, etc.\n      displayFormat: false,\n      // DEPRECATED\n      isoWeekday: false,\n      // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      autoSkip: false,\n      /**\r\n       * Ticks generation input values:\r\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\r\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\r\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\r\n       * @see https://github.com/chartjs/Chart.js/pull/4507\r\n       * @since 2.7.0\r\n       */\n      source: 'auto',\n      major: {\n        enabled: false\n      }\n    }\n  };\n  var scale_time = core_scale.extend({\n    initialize: function () {\n      this.mergeTicksOptions();\n      core_scale.prototype.initialize.call(this);\n    },\n    update: function () {\n      var me = this;\n      var options = me.options;\n      var time = options.time || (options.time = {});\n      var adapter = me._adapter = new core_adapters._date(options.adapters.date);\n\n      // DEPRECATIONS: output a message only one time per update\n      deprecated$1('time scale', time.format, 'time.format', 'time.parser');\n      deprecated$1('time scale', time.min, 'time.min', 'ticks.min');\n      deprecated$1('time scale', time.max, 'time.max', 'ticks.max');\n\n      // Backward compatibility: before introducing adapter, `displayFormats` was\n      // supposed to contain *all* unit/string pairs but this can't be resolved\n      // when loading the scale (adapters are loaded afterward), so let's populate\n      // missing formats on update\n      helpers$1.mergeIf(time.displayFormats, adapter.formats());\n      return core_scale.prototype.update.apply(me, arguments);\n    },\n    /**\r\n     * Allows data to be referenced via 't' attribute\r\n     */\n    getRightValue: function (rawValue) {\n      if (rawValue && rawValue.t !== undefined) {\n        rawValue = rawValue.t;\n      }\n      return core_scale.prototype.getRightValue.call(this, rawValue);\n    },\n    determineDataLimits: function () {\n      var me = this;\n      var chart = me.chart;\n      var adapter = me._adapter;\n      var options = me.options;\n      var unit = options.time.unit || 'day';\n      var min = MAX_INTEGER;\n      var max = MIN_INTEGER;\n      var timestamps = [];\n      var datasets = [];\n      var labels = [];\n      var i, j, ilen, jlen, data, timestamp, labelsAdded;\n      var dataLabels = me._getLabels();\n      for (i = 0, ilen = dataLabels.length; i < ilen; ++i) {\n        labels.push(parse(me, dataLabels[i]));\n      }\n      for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          data = chart.data.datasets[i].data;\n\n          // Let's consider that all data have the same format.\n          if (helpers$1.isObject(data[0])) {\n            datasets[i] = [];\n            for (j = 0, jlen = data.length; j < jlen; ++j) {\n              timestamp = parse(me, data[j]);\n              timestamps.push(timestamp);\n              datasets[i][j] = timestamp;\n            }\n          } else {\n            datasets[i] = labels.slice(0);\n            if (!labelsAdded) {\n              timestamps = timestamps.concat(labels);\n              labelsAdded = true;\n            }\n          }\n        } else {\n          datasets[i] = [];\n        }\n      }\n      if (labels.length) {\n        min = Math.min(min, labels[0]);\n        max = Math.max(max, labels[labels.length - 1]);\n      }\n      if (timestamps.length) {\n        timestamps = ilen > 1 ? arrayUnique(timestamps).sort(sorter) : timestamps.sort(sorter);\n        min = Math.min(min, timestamps[0]);\n        max = Math.max(max, timestamps[timestamps.length - 1]);\n      }\n      min = parse(me, getMin(options)) || min;\n      max = parse(me, getMax(options)) || max;\n\n      // In case there is no valid min/max, set limits based on unit time option\n      min = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;\n      max = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max;\n\n      // Make sure that max is strictly higher than min (required by the lookup table)\n      me.min = Math.min(min, max);\n      me.max = Math.max(min + 1, max);\n\n      // PRIVATE\n      me._table = [];\n      me._timestamps = {\n        data: timestamps,\n        datasets: datasets,\n        labels: labels\n      };\n    },\n    buildTicks: function () {\n      var me = this;\n      var min = me.min;\n      var max = me.max;\n      var options = me.options;\n      var tickOpts = options.ticks;\n      var timeOpts = options.time;\n      var timestamps = me._timestamps;\n      var ticks = [];\n      var capacity = me.getLabelCapacity(min);\n      var source = tickOpts.source;\n      var distribution = options.distribution;\n      var i, ilen, timestamp;\n      if (source === 'data' || source === 'auto' && distribution === 'series') {\n        timestamps = timestamps.data;\n      } else if (source === 'labels') {\n        timestamps = timestamps.labels;\n      } else {\n        timestamps = generate(me, min, max, capacity);\n      }\n      if (options.bounds === 'ticks' && timestamps.length) {\n        min = timestamps[0];\n        max = timestamps[timestamps.length - 1];\n      }\n\n      // Enforce limits with user min/max options\n      min = parse(me, getMin(options)) || min;\n      max = parse(me, getMax(options)) || max;\n\n      // Remove ticks outside the min/max range\n      for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n        timestamp = timestamps[i];\n        if (timestamp >= min && timestamp <= max) {\n          ticks.push(timestamp);\n        }\n      }\n      me.min = min;\n      me.max = max;\n\n      // PRIVATE\n      // determineUnitForFormatting relies on the number of ticks so we don't use it when\n      // autoSkip is enabled because we don't yet know what the final number of ticks will be\n      me._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, capacity) : determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));\n      me._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined : determineMajorUnit(me._unit);\n      me._table = buildLookupTable(me._timestamps.data, min, max, distribution);\n      me._offsets = computeOffsets(me._table, ticks, min, max, options);\n      if (tickOpts.reverse) {\n        ticks.reverse();\n      }\n      return ticksFromTimestamps(me, ticks, me._majorUnit);\n    },\n    getLabelForIndex: function (index, datasetIndex) {\n      var me = this;\n      var adapter = me._adapter;\n      var data = me.chart.data;\n      var timeOpts = me.options.time;\n      var label = data.labels && index < data.labels.length ? data.labels[index] : '';\n      var value = data.datasets[datasetIndex].data[index];\n      if (helpers$1.isObject(value)) {\n        label = me.getRightValue(value);\n      }\n      if (timeOpts.tooltipFormat) {\n        return adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);\n      }\n      if (typeof label === 'string') {\n        return label;\n      }\n      return adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);\n    },\n    /**\r\n     * Function to format an individual tick mark\r\n     * @private\r\n     */\n    tickFormatFunction: function (time, index, ticks, format) {\n      var me = this;\n      var adapter = me._adapter;\n      var options = me.options;\n      var formats = options.time.displayFormats;\n      var minorFormat = formats[me._unit];\n      var majorUnit = me._majorUnit;\n      var majorFormat = formats[majorUnit];\n      var tick = ticks[index];\n      var tickOpts = options.ticks;\n      var major = majorUnit && majorFormat && tick && tick.major;\n      var label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);\n      var nestedTickOpts = major ? tickOpts.major : tickOpts.minor;\n      var formatter = resolve$5([nestedTickOpts.callback, nestedTickOpts.userCallback, tickOpts.callback, tickOpts.userCallback]);\n      return formatter ? formatter(label, index, ticks) : label;\n    },\n    convertTicksToLabels: function (ticks) {\n      var labels = [];\n      var i, ilen;\n      for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n        labels.push(this.tickFormatFunction(ticks[i].value, i, ticks));\n      }\n      return labels;\n    },\n    /**\r\n     * @private\r\n     */\n    getPixelForOffset: function (time) {\n      var me = this;\n      var offsets = me._offsets;\n      var pos = interpolate$1(me._table, 'time', time, 'pos');\n      return me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n    },\n    getPixelForValue: function (value, index, datasetIndex) {\n      var me = this;\n      var time = null;\n      if (index !== undefined && datasetIndex !== undefined) {\n        time = me._timestamps.datasets[datasetIndex][index];\n      }\n      if (time === null) {\n        time = parse(me, value);\n      }\n      if (time !== null) {\n        return me.getPixelForOffset(time);\n      }\n    },\n    getPixelForTick: function (index) {\n      var ticks = this.getTicks();\n      return index >= 0 && index < ticks.length ? this.getPixelForOffset(ticks[index].value) : null;\n    },\n    getValueForPixel: function (pixel) {\n      var me = this;\n      var offsets = me._offsets;\n      var pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n      var time = interpolate$1(me._table, 'pos', pos, 'time');\n\n      // DEPRECATION, we should return time directly\n      return me._adapter._create(time);\n    },\n    /**\r\n     * @private\r\n     */\n    _getLabelSize: function (label) {\n      var me = this;\n      var ticksOpts = me.options.ticks;\n      var tickLabelWidth = me.ctx.measureText(label).width;\n      var angle = helpers$1.toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n      var cosRotation = Math.cos(angle);\n      var sinRotation = Math.sin(angle);\n      var tickFontSize = valueOrDefault$d(ticksOpts.fontSize, core_defaults.global.defaultFontSize);\n      return {\n        w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n        h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n      };\n    },\n    /**\r\n     * Crude approximation of what the label width might be\r\n     * @private\r\n     */\n    getLabelWidth: function (label) {\n      return this._getLabelSize(label).w;\n    },\n    /**\r\n     * @private\r\n     */\n    getLabelCapacity: function (exampleTime) {\n      var me = this;\n      var timeOpts = me.options.time;\n      var displayFormats = timeOpts.displayFormats;\n\n      // pick the longest format (milliseconds) for guestimation\n      var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n      var exampleLabel = me.tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);\n      var size = me._getLabelSize(exampleLabel);\n      var capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h);\n      if (me.options.offset) {\n        capacity--;\n      }\n      return capacity > 0 ? capacity : 1;\n    }\n  });\n\n  // INTERNAL: static default options, registered in src/index.js\n  var _defaults$4 = defaultConfig$4;\n  scale_time._defaults = _defaults$4;\n  var scales = {\n    category: scale_category,\n    linear: scale_linear,\n    logarithmic: scale_logarithmic,\n    radialLinear: scale_radialLinear,\n    time: scale_time\n  };\n  var FORMATS = {\n    datetime: 'MMM D, YYYY, h:mm:ss a',\n    millisecond: 'h:mm:ss.SSS a',\n    second: 'h:mm:ss a',\n    minute: 'h:mm a',\n    hour: 'hA',\n    day: 'MMM D',\n    week: 'll',\n    month: 'MMM YYYY',\n    quarter: '[Q]Q - YYYY',\n    year: 'YYYY'\n  };\n  core_adapters._date.override(typeof moment === 'function' ? {\n    _id: 'moment',\n    // DEBUG ONLY\n\n    formats: function () {\n      return FORMATS;\n    },\n    parse: function (value, format) {\n      if (typeof value === 'string' && typeof format === 'string') {\n        value = moment(value, format);\n      } else if (!(value instanceof moment)) {\n        value = moment(value);\n      }\n      return value.isValid() ? value.valueOf() : null;\n    },\n    format: function (time, format) {\n      return moment(time).format(format);\n    },\n    add: function (time, amount, unit) {\n      return moment(time).add(amount, unit).valueOf();\n    },\n    diff: function (max, min, unit) {\n      return moment(max).diff(moment(min), unit);\n    },\n    startOf: function (time, unit, weekday) {\n      time = moment(time);\n      if (unit === 'isoWeek') {\n        return time.isoWeekday(weekday).valueOf();\n      }\n      return time.startOf(unit).valueOf();\n    },\n    endOf: function (time, unit) {\n      return moment(time).endOf(unit).valueOf();\n    },\n    // DEPRECATIONS\n\n    /**\r\n     * Provided for backward compatibility with scale.getValueForPixel().\r\n     * @deprecated since version 2.8.0\r\n     * @todo remove at version 3\r\n     * @private\r\n     */\n    _create: function (time) {\n      return moment(time);\n    }\n  } : {});\n  core_defaults._set('global', {\n    plugins: {\n      filler: {\n        propagate: true\n      }\n    }\n  });\n  var mappers = {\n    dataset: function (source) {\n      var index = source.fill;\n      var chart = source.chart;\n      var meta = chart.getDatasetMeta(index);\n      var visible = meta && chart.isDatasetVisible(index);\n      var points = visible && meta.dataset._children || [];\n      var length = points.length || 0;\n      return !length ? null : function (point, i) {\n        return i < length && points[i]._view || null;\n      };\n    },\n    boundary: function (source) {\n      var boundary = source.boundary;\n      var x = boundary ? boundary.x : null;\n      var y = boundary ? boundary.y : null;\n      if (helpers$1.isArray(boundary)) {\n        return function (point, i) {\n          return boundary[i];\n        };\n      }\n      return function (point) {\n        return {\n          x: x === null ? point.x : x,\n          y: y === null ? point.y : y\n        };\n      };\n    }\n  };\n\n  // @todo if (fill[0] === '#')\n  function decodeFill(el, index, count) {\n    var model = el._model || {};\n    var fill = model.fill;\n    var target;\n    if (fill === undefined) {\n      fill = !!model.backgroundColor;\n    }\n    if (fill === false || fill === null) {\n      return false;\n    }\n    if (fill === true) {\n      return 'origin';\n    }\n    target = parseFloat(fill, 10);\n    if (isFinite(target) && Math.floor(target) === target) {\n      if (fill[0] === '-' || fill[0] === '+') {\n        target = index + target;\n      }\n      if (target === index || target < 0 || target >= count) {\n        return false;\n      }\n      return target;\n    }\n    switch (fill) {\n      // compatibility\n      case 'bottom':\n        return 'start';\n      case 'top':\n        return 'end';\n      case 'zero':\n        return 'origin';\n      // supported boundaries\n      case 'origin':\n      case 'start':\n      case 'end':\n        return fill;\n      // invalid fill values\n      default:\n        return false;\n    }\n  }\n  function computeLinearBoundary(source) {\n    var model = source.el._model || {};\n    var scale = source.el._scale || {};\n    var fill = source.fill;\n    var target = null;\n    var horizontal;\n    if (isFinite(fill)) {\n      return null;\n    }\n\n    // Backward compatibility: until v3, we still need to support boundary values set on\n    // the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\n    // controllers might still use it (e.g. the Smith chart).\n\n    if (fill === 'start') {\n      target = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\n    } else if (fill === 'end') {\n      target = model.scaleTop === undefined ? scale.top : model.scaleTop;\n    } else if (model.scaleZero !== undefined) {\n      target = model.scaleZero;\n    } else if (scale.getBasePixel) {\n      target = scale.getBasePixel();\n    }\n    if (target !== undefined && target !== null) {\n      if (target.x !== undefined && target.y !== undefined) {\n        return target;\n      }\n      if (helpers$1.isFinite(target)) {\n        horizontal = scale.isHorizontal();\n        return {\n          x: horizontal ? target : null,\n          y: horizontal ? null : target\n        };\n      }\n    }\n    return null;\n  }\n  function computeCircularBoundary(source) {\n    var scale = source.el._scale;\n    var options = scale.options;\n    var length = scale.chart.data.labels.length;\n    var fill = source.fill;\n    var target = [];\n    var start, end, center, i, point;\n    if (!length) {\n      return null;\n    }\n    start = options.ticks.reverse ? scale.max : scale.min;\n    end = options.ticks.reverse ? scale.min : scale.max;\n    center = scale.getPointPositionForValue(0, start);\n    for (i = 0; i < length; ++i) {\n      point = fill === 'start' || fill === 'end' ? scale.getPointPositionForValue(i, fill === 'start' ? start : end) : scale.getBasePosition(i);\n      if (options.gridLines.circular) {\n        point.cx = center.x;\n        point.cy = center.y;\n        point.angle = scale.getIndexAngle(i) - Math.PI / 2;\n      }\n      target.push(point);\n    }\n    return target;\n  }\n  function computeBoundary(source) {\n    var scale = source.el._scale || {};\n    if (scale.getPointPositionForValue) {\n      return computeCircularBoundary(source);\n    }\n    return computeLinearBoundary(source);\n  }\n  function resolveTarget(sources, index, propagate) {\n    var source = sources[index];\n    var fill = source.fill;\n    var visited = [index];\n    var target;\n    if (!propagate) {\n      return fill;\n    }\n    while (fill !== false && visited.indexOf(fill) === -1) {\n      if (!isFinite(fill)) {\n        return fill;\n      }\n      target = sources[fill];\n      if (!target) {\n        return false;\n      }\n      if (target.visible) {\n        return fill;\n      }\n      visited.push(fill);\n      fill = target.fill;\n    }\n    return false;\n  }\n  function createMapper(source) {\n    var fill = source.fill;\n    var type = 'dataset';\n    if (fill === false) {\n      return null;\n    }\n    if (!isFinite(fill)) {\n      type = 'boundary';\n    }\n    return mappers[type](source);\n  }\n  function isDrawable(point) {\n    return point && !point.skip;\n  }\n  function drawArea(ctx, curve0, curve1, len0, len1) {\n    var i, cx, cy, r;\n    if (!len0 || !len1) {\n      return;\n    }\n\n    // building first area curve (normal)\n    ctx.moveTo(curve0[0].x, curve0[0].y);\n    for (i = 1; i < len0; ++i) {\n      helpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\n    }\n    if (curve1[0].angle !== undefined) {\n      cx = curve1[0].cx;\n      cy = curve1[0].cy;\n      r = Math.sqrt(Math.pow(curve1[0].x - cx, 2) + Math.pow(curve1[0].y - cy, 2));\n      for (i = len1 - 1; i > 0; --i) {\n        ctx.arc(cx, cy, r, curve1[i].angle, curve1[i - 1].angle, true);\n      }\n      return;\n    }\n\n    // joining the two area curves\n    ctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\n\n    // building opposite area curve (reverse)\n    for (i = len1 - 1; i > 0; --i) {\n      helpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\n    }\n  }\n  function doFill(ctx, points, mapper, view, color, loop) {\n    var count = points.length;\n    var span = view.spanGaps;\n    var curve0 = [];\n    var curve1 = [];\n    var len0 = 0;\n    var len1 = 0;\n    var i, ilen, index, p0, p1, d0, d1, loopOffset;\n    ctx.beginPath();\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i % count;\n      p0 = points[index]._view;\n      p1 = mapper(p0, index, view);\n      d0 = isDrawable(p0);\n      d1 = isDrawable(p1);\n      if (loop && loopOffset === undefined && d0) {\n        loopOffset = i + 1;\n        ilen = count + loopOffset;\n      }\n      if (d0 && d1) {\n        len0 = curve0.push(p0);\n        len1 = curve1.push(p1);\n      } else if (len0 && len1) {\n        if (!span) {\n          drawArea(ctx, curve0, curve1, len0, len1);\n          len0 = len1 = 0;\n          curve0 = [];\n          curve1 = [];\n        } else {\n          if (d0) {\n            curve0.push(p0);\n          }\n          if (d1) {\n            curve1.push(p1);\n          }\n        }\n      }\n    }\n    drawArea(ctx, curve0, curve1, len0, len1);\n    ctx.closePath();\n    ctx.fillStyle = color;\n    ctx.fill();\n  }\n  var plugin_filler = {\n    id: 'filler',\n    afterDatasetsUpdate: function (chart, options) {\n      var count = (chart.data.datasets || []).length;\n      var propagate = options.propagate;\n      var sources = [];\n      var meta, i, el, source;\n      for (i = 0; i < count; ++i) {\n        meta = chart.getDatasetMeta(i);\n        el = meta.dataset;\n        source = null;\n        if (el && el._model && el instanceof elements.Line) {\n          source = {\n            visible: chart.isDatasetVisible(i),\n            fill: decodeFill(el, i, count),\n            chart: chart,\n            el: el\n          };\n        }\n        meta.$filler = source;\n        sources.push(source);\n      }\n      for (i = 0; i < count; ++i) {\n        source = sources[i];\n        if (!source) {\n          continue;\n        }\n        source.fill = resolveTarget(sources, i, propagate);\n        source.boundary = computeBoundary(source);\n        source.mapper = createMapper(source);\n      }\n    },\n    beforeDatasetsDraw: function (chart) {\n      var metasets = chart._getSortedVisibleDatasetMetas();\n      var ctx = chart.ctx;\n      var meta, i, el, view, points, mapper, color;\n      for (i = metasets.length - 1; i >= 0; --i) {\n        meta = metasets[i].$filler;\n        if (!meta || !meta.visible) {\n          continue;\n        }\n        el = meta.el;\n        view = el._view;\n        points = el._children || [];\n        mapper = meta.mapper;\n        color = view.backgroundColor || core_defaults.global.defaultColor;\n        if (mapper && color && points.length) {\n          helpers$1.canvas.clipArea(ctx, chart.chartArea);\n          doFill(ctx, points, mapper, view, color, el._loop);\n          helpers$1.canvas.unclipArea(ctx);\n        }\n      }\n    }\n  };\n  var getRtlHelper$1 = helpers$1.rtl.getRtlAdapter;\n  var noop$1 = helpers$1.noop;\n  var valueOrDefault$e = helpers$1.valueOrDefault;\n  core_defaults._set('global', {\n    legend: {\n      display: true,\n      position: 'top',\n      align: 'center',\n      fullWidth: true,\n      reverse: false,\n      weight: 1000,\n      // a callback that will handle\n      onClick: function (e, legendItem) {\n        var index = legendItem.datasetIndex;\n        var ci = this.chart;\n        var meta = ci.getDatasetMeta(index);\n\n        // See controller.isDatasetVisible comment\n        meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\n\n        // We hid a dataset ... rerender the chart\n        ci.update();\n      },\n      onHover: null,\n      onLeave: null,\n      labels: {\n        boxWidth: 40,\n        padding: 10,\n        // Generates labels shown in the legend\n        // Valid properties to return:\n        // text : text to display\n        // fillStyle : fill of coloured box\n        // strokeStyle: stroke of coloured box\n        // hidden : if this legend item refers to a hidden item\n        // lineCap : cap style for line\n        // lineDash\n        // lineDashOffset :\n        // lineJoin :\n        // lineWidth :\n        generateLabels: function (chart) {\n          var datasets = chart.data.datasets;\n          var options = chart.options.legend || {};\n          var usePointStyle = options.labels && options.labels.usePointStyle;\n          return chart._getSortedDatasetMetas().map(function (meta) {\n            var style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n            return {\n              text: datasets[meta.index].label,\n              fillStyle: style.backgroundColor,\n              hidden: !chart.isDatasetVisible(meta.index),\n              lineCap: style.borderCapStyle,\n              lineDash: style.borderDash,\n              lineDashOffset: style.borderDashOffset,\n              lineJoin: style.borderJoinStyle,\n              lineWidth: style.borderWidth,\n              strokeStyle: style.borderColor,\n              pointStyle: style.pointStyle,\n              rotation: style.rotation,\n              // Below is extra data used for toggling the datasets\n              datasetIndex: meta.index\n            };\n          }, this);\n        }\n      }\n    },\n    legendCallback: function (chart) {\n      var list = document.createElement('ul');\n      var datasets = chart.data.datasets;\n      var i, ilen, listItem, listItemSpan;\n      list.setAttribute('class', chart.id + '-legend');\n      for (i = 0, ilen = datasets.length; i < ilen; i++) {\n        listItem = list.appendChild(document.createElement('li'));\n        listItemSpan = listItem.appendChild(document.createElement('span'));\n        listItemSpan.style.backgroundColor = datasets[i].backgroundColor;\n        if (datasets[i].label) {\n          listItem.appendChild(document.createTextNode(datasets[i].label));\n        }\n      }\n      return list.outerHTML;\n    }\n  });\n\n  /**\r\n   * Helper function to get the box width based on the usePointStyle option\r\n   * @param {object} labelopts - the label options on the legend\r\n   * @param {number} fontSize - the label font size\r\n   * @return {number} width of the color box area\r\n   */\n  function getBoxWidth(labelOpts, fontSize) {\n    return labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ? fontSize : labelOpts.boxWidth;\n  }\n\n  /**\r\n   * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n   */\n  var Legend = core_element.extend({\n    initialize: function (config) {\n      var me = this;\n      helpers$1.extend(me, config);\n\n      // Contains hit boxes for each dataset (in dataset order)\n      me.legendHitBoxes = [];\n\n      /**\r\n      \t * @private\r\n      \t */\n      me._hoveredItem = null;\n\n      // Are we in doughnut mode which has a different data type\n      me.doughnutMode = false;\n    },\n    // These methods are ordered by lifecycle. Utilities then follow.\n    // Any function defined here is inherited by all legend types.\n    // Any function can be extended by the legend type\n\n    beforeUpdate: noop$1,\n    update: function (maxWidth, maxHeight, margins) {\n      var me = this;\n\n      // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n      me.beforeUpdate();\n\n      // Absorb the master measurements\n      me.maxWidth = maxWidth;\n      me.maxHeight = maxHeight;\n      me.margins = margins;\n\n      // Dimensions\n      me.beforeSetDimensions();\n      me.setDimensions();\n      me.afterSetDimensions();\n      // Labels\n      me.beforeBuildLabels();\n      me.buildLabels();\n      me.afterBuildLabels();\n\n      // Fit\n      me.beforeFit();\n      me.fit();\n      me.afterFit();\n      //\n      me.afterUpdate();\n      return me.minSize;\n    },\n    afterUpdate: noop$1,\n    //\n\n    beforeSetDimensions: noop$1,\n    setDimensions: function () {\n      var me = this;\n      // Set the unconstrained dimension before label rotation\n      if (me.isHorizontal()) {\n        // Reset position before calculating rotation\n        me.width = me.maxWidth;\n        me.left = 0;\n        me.right = me.width;\n      } else {\n        me.height = me.maxHeight;\n\n        // Reset position before calculating rotation\n        me.top = 0;\n        me.bottom = me.height;\n      }\n\n      // Reset padding\n      me.paddingLeft = 0;\n      me.paddingTop = 0;\n      me.paddingRight = 0;\n      me.paddingBottom = 0;\n\n      // Reset minSize\n      me.minSize = {\n        width: 0,\n        height: 0\n      };\n    },\n    afterSetDimensions: noop$1,\n    //\n\n    beforeBuildLabels: noop$1,\n    buildLabels: function () {\n      var me = this;\n      var labelOpts = me.options.labels || {};\n      var legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];\n      if (labelOpts.filter) {\n        legendItems = legendItems.filter(function (item) {\n          return labelOpts.filter(item, me.chart.data);\n        });\n      }\n      if (me.options.reverse) {\n        legendItems.reverse();\n      }\n      me.legendItems = legendItems;\n    },\n    afterBuildLabels: noop$1,\n    //\n\n    beforeFit: noop$1,\n    fit: function () {\n      var me = this;\n      var opts = me.options;\n      var labelOpts = opts.labels;\n      var display = opts.display;\n      var ctx = me.ctx;\n      var labelFont = helpers$1.options._parseFont(labelOpts);\n      var fontSize = labelFont.size;\n\n      // Reset hit boxes\n      var hitboxes = me.legendHitBoxes = [];\n      var minSize = me.minSize;\n      var isHorizontal = me.isHorizontal();\n      if (isHorizontal) {\n        minSize.width = me.maxWidth; // fill all the width\n        minSize.height = display ? 10 : 0;\n      } else {\n        minSize.width = display ? 10 : 0;\n        minSize.height = me.maxHeight; // fill all the height\n      }\n\n      // Increase sizes here\n      if (!display) {\n        me.width = minSize.width = me.height = minSize.height = 0;\n        return;\n      }\n      ctx.font = labelFont.string;\n      if (isHorizontal) {\n        // Labels\n\n        // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n        var lineWidths = me.lineWidths = [0];\n        var totalHeight = 0;\n        ctx.textAlign = 'left';\n        ctx.textBaseline = 'middle';\n        helpers$1.each(me.legendItems, function (legendItem, i) {\n          var boxWidth = getBoxWidth(labelOpts, fontSize);\n          var width = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n          if (i === 0 || lineWidths[lineWidths.length - 1] + width + 2 * labelOpts.padding > minSize.width) {\n            totalHeight += fontSize + labelOpts.padding;\n            lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n          }\n\n          // Store the hitbox width and height here. Final position will be updated in `draw`\n          hitboxes[i] = {\n            left: 0,\n            top: 0,\n            width: width,\n            height: fontSize\n          };\n          lineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n        });\n        minSize.height += totalHeight;\n      } else {\n        var vPadding = labelOpts.padding;\n        var columnWidths = me.columnWidths = [];\n        var columnHeights = me.columnHeights = [];\n        var totalWidth = labelOpts.padding;\n        var currentColWidth = 0;\n        var currentColHeight = 0;\n        helpers$1.each(me.legendItems, function (legendItem, i) {\n          var boxWidth = getBoxWidth(labelOpts, fontSize);\n          var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n          // If too tall, go to new column\n          if (i > 0 && currentColHeight + fontSize + 2 * vPadding > minSize.height) {\n            totalWidth += currentColWidth + labelOpts.padding;\n            columnWidths.push(currentColWidth); // previous column width\n            columnHeights.push(currentColHeight);\n            currentColWidth = 0;\n            currentColHeight = 0;\n          }\n\n          // Get max width\n          currentColWidth = Math.max(currentColWidth, itemWidth);\n          currentColHeight += fontSize + vPadding;\n\n          // Store the hitbox width and height here. Final position will be updated in `draw`\n          hitboxes[i] = {\n            left: 0,\n            top: 0,\n            width: itemWidth,\n            height: fontSize\n          };\n        });\n        totalWidth += currentColWidth;\n        columnWidths.push(currentColWidth);\n        columnHeights.push(currentColHeight);\n        minSize.width += totalWidth;\n      }\n      me.width = minSize.width;\n      me.height = minSize.height;\n    },\n    afterFit: noop$1,\n    // Shared Methods\n    isHorizontal: function () {\n      return this.options.position === 'top' || this.options.position === 'bottom';\n    },\n    // Actually draw the legend on the canvas\n    draw: function () {\n      var me = this;\n      var opts = me.options;\n      var labelOpts = opts.labels;\n      var globalDefaults = core_defaults.global;\n      var defaultColor = globalDefaults.defaultColor;\n      var lineDefault = globalDefaults.elements.line;\n      var legendHeight = me.height;\n      var columnHeights = me.columnHeights;\n      var legendWidth = me.width;\n      var lineWidths = me.lineWidths;\n      if (!opts.display) {\n        return;\n      }\n      var rtlHelper = getRtlHelper$1(opts.rtl, me.left, me.minSize.width);\n      var ctx = me.ctx;\n      var fontColor = valueOrDefault$e(labelOpts.fontColor, globalDefaults.defaultFontColor);\n      var labelFont = helpers$1.options._parseFont(labelOpts);\n      var fontSize = labelFont.size;\n      var cursor;\n\n      // Canvas setup\n      ctx.textAlign = rtlHelper.textAlign('left');\n      ctx.textBaseline = 'middle';\n      ctx.lineWidth = 0.5;\n      ctx.strokeStyle = fontColor; // for strikethrough effect\n      ctx.fillStyle = fontColor; // render in correct colour\n      ctx.font = labelFont.string;\n      var boxWidth = getBoxWidth(labelOpts, fontSize);\n      var hitboxes = me.legendHitBoxes;\n\n      // current position\n      var drawLegendBox = function (x, y, legendItem) {\n        if (isNaN(boxWidth) || boxWidth <= 0) {\n          return;\n        }\n\n        // Set the ctx for the box\n        ctx.save();\n        var lineWidth = valueOrDefault$e(legendItem.lineWidth, lineDefault.borderWidth);\n        ctx.fillStyle = valueOrDefault$e(legendItem.fillStyle, defaultColor);\n        ctx.lineCap = valueOrDefault$e(legendItem.lineCap, lineDefault.borderCapStyle);\n        ctx.lineDashOffset = valueOrDefault$e(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n        ctx.lineJoin = valueOrDefault$e(legendItem.lineJoin, lineDefault.borderJoinStyle);\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = valueOrDefault$e(legendItem.strokeStyle, defaultColor);\n        if (ctx.setLineDash) {\n          // IE 9 and 10 do not support line dash\n          ctx.setLineDash(valueOrDefault$e(legendItem.lineDash, lineDefault.borderDash));\n        }\n        if (labelOpts && labelOpts.usePointStyle) {\n          // Recalculate x and y for drawPoint() because its expecting\n          // x and y to be center of figure (instead of top left)\n          var radius = boxWidth * Math.SQRT2 / 2;\n          var centerX = rtlHelper.xPlus(x, boxWidth / 2);\n          var centerY = y + fontSize / 2;\n\n          // Draw pointStyle as legend symbol\n          helpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY, legendItem.rotation);\n        } else {\n          // Draw box as legend symbol\n          ctx.fillRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\n          if (lineWidth !== 0) {\n            ctx.strokeRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\n          }\n        }\n        ctx.restore();\n      };\n      var fillText = function (x, y, legendItem, textWidth) {\n        var halfFontSize = fontSize / 2;\n        var xLeft = rtlHelper.xPlus(x, boxWidth + halfFontSize);\n        var yMiddle = y + halfFontSize;\n        ctx.fillText(legendItem.text, xLeft, yMiddle);\n        if (legendItem.hidden) {\n          // Strikethrough the text if hidden\n          ctx.beginPath();\n          ctx.lineWidth = 2;\n          ctx.moveTo(xLeft, yMiddle);\n          ctx.lineTo(rtlHelper.xPlus(xLeft, textWidth), yMiddle);\n          ctx.stroke();\n        }\n      };\n      var alignmentOffset = function (dimension, blockSize) {\n        switch (opts.align) {\n          case 'start':\n            return labelOpts.padding;\n          case 'end':\n            return dimension - blockSize;\n          default:\n            // center\n            return (dimension - blockSize + labelOpts.padding) / 2;\n        }\n      };\n\n      // Horizontal\n      var isHorizontal = me.isHorizontal();\n      if (isHorizontal) {\n        cursor = {\n          x: me.left + alignmentOffset(legendWidth, lineWidths[0]),\n          y: me.top + labelOpts.padding,\n          line: 0\n        };\n      } else {\n        cursor = {\n          x: me.left + labelOpts.padding,\n          y: me.top + alignmentOffset(legendHeight, columnHeights[0]),\n          line: 0\n        };\n      }\n      helpers$1.rtl.overrideTextDirection(me.ctx, opts.textDirection);\n      var itemHeight = fontSize + labelOpts.padding;\n      helpers$1.each(me.legendItems, function (legendItem, i) {\n        var textWidth = ctx.measureText(legendItem.text).width;\n        var width = boxWidth + fontSize / 2 + textWidth;\n        var x = cursor.x;\n        var y = cursor.y;\n        rtlHelper.setWidth(me.minSize.width);\n\n        // Use (me.left + me.minSize.width) and (me.top + me.minSize.height)\n        // instead of me.right and me.bottom because me.width and me.height\n        // may have been changed since me.minSize was calculated\n        if (isHorizontal) {\n          if (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {\n            y = cursor.y += itemHeight;\n            cursor.line++;\n            x = cursor.x = me.left + alignmentOffset(legendWidth, lineWidths[cursor.line]);\n          }\n        } else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {\n          x = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n          cursor.line++;\n          y = cursor.y = me.top + alignmentOffset(legendHeight, columnHeights[cursor.line]);\n        }\n        var realX = rtlHelper.x(x);\n        drawLegendBox(realX, y, legendItem);\n        hitboxes[i].left = rtlHelper.leftForLtr(realX, hitboxes[i].width);\n        hitboxes[i].top = y;\n\n        // Fill the actual label\n        fillText(realX, y, legendItem, textWidth);\n        if (isHorizontal) {\n          cursor.x += width + labelOpts.padding;\n        } else {\n          cursor.y += itemHeight;\n        }\n      });\n      helpers$1.rtl.restoreTextDirection(me.ctx, opts.textDirection);\n    },\n    /**\r\n     * @private\r\n     */\n    _getLegendItemAt: function (x, y) {\n      var me = this;\n      var i, hitBox, lh;\n      if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n        // See if we are touching one of the dataset boxes\n        lh = me.legendHitBoxes;\n        for (i = 0; i < lh.length; ++i) {\n          hitBox = lh[i];\n          if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n            // Touching an element\n            return me.legendItems[i];\n          }\n        }\n      }\n      return null;\n    },\n    /**\r\n     * Handle an event\r\n     * @private\r\n     * @param {IEvent} event - The event to handle\r\n     */\n    handleEvent: function (e) {\n      var me = this;\n      var opts = me.options;\n      var type = e.type === 'mouseup' ? 'click' : e.type;\n      var hoveredItem;\n      if (type === 'mousemove') {\n        if (!opts.onHover && !opts.onLeave) {\n          return;\n        }\n      } else if (type === 'click') {\n        if (!opts.onClick) {\n          return;\n        }\n      } else {\n        return;\n      }\n\n      // Chart event already has relative position in it\n      hoveredItem = me._getLegendItemAt(e.x, e.y);\n      if (type === 'click') {\n        if (hoveredItem && opts.onClick) {\n          // use e.native for backwards compatibility\n          opts.onClick.call(me, e.native, hoveredItem);\n        }\n      } else {\n        if (opts.onLeave && hoveredItem !== me._hoveredItem) {\n          if (me._hoveredItem) {\n            opts.onLeave.call(me, e.native, me._hoveredItem);\n          }\n          me._hoveredItem = hoveredItem;\n        }\n        if (opts.onHover && hoveredItem) {\n          // use e.native for backwards compatibility\n          opts.onHover.call(me, e.native, hoveredItem);\n        }\n      }\n    }\n  });\n  function createNewLegendAndAttach(chart, legendOpts) {\n    var legend = new Legend({\n      ctx: chart.ctx,\n      options: legendOpts,\n      chart: chart\n    });\n    core_layouts.configure(chart, legend, legendOpts);\n    core_layouts.addBox(chart, legend);\n    chart.legend = legend;\n  }\n  var plugin_legend = {\n    id: 'legend',\n    /**\r\n     * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\r\n     * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\r\n     * the plugin, which one will be re-exposed in the chart.js file.\r\n     * https://github.com/chartjs/Chart.js/pull/2640\r\n     * @private\r\n     */\n    _element: Legend,\n    beforeInit: function (chart) {\n      var legendOpts = chart.options.legend;\n      if (legendOpts) {\n        createNewLegendAndAttach(chart, legendOpts);\n      }\n    },\n    beforeUpdate: function (chart) {\n      var legendOpts = chart.options.legend;\n      var legend = chart.legend;\n      if (legendOpts) {\n        helpers$1.mergeIf(legendOpts, core_defaults.global.legend);\n        if (legend) {\n          core_layouts.configure(chart, legend, legendOpts);\n          legend.options = legendOpts;\n        } else {\n          createNewLegendAndAttach(chart, legendOpts);\n        }\n      } else if (legend) {\n        core_layouts.removeBox(chart, legend);\n        delete chart.legend;\n      }\n    },\n    afterEvent: function (chart, e) {\n      var legend = chart.legend;\n      if (legend) {\n        legend.handleEvent(e);\n      }\n    }\n  };\n  var noop$2 = helpers$1.noop;\n  core_defaults._set('global', {\n    title: {\n      display: false,\n      fontStyle: 'bold',\n      fullWidth: true,\n      padding: 10,\n      position: 'top',\n      text: '',\n      weight: 2000 // by default greater than legend (1000) to be above\n    }\n  });\n\n  /**\r\n   * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n   */\n  var Title = core_element.extend({\n    initialize: function (config) {\n      var me = this;\n      helpers$1.extend(me, config);\n\n      // Contains hit boxes for each dataset (in dataset order)\n      me.legendHitBoxes = [];\n    },\n    // These methods are ordered by lifecycle. Utilities then follow.\n\n    beforeUpdate: noop$2,\n    update: function (maxWidth, maxHeight, margins) {\n      var me = this;\n\n      // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n      me.beforeUpdate();\n\n      // Absorb the master measurements\n      me.maxWidth = maxWidth;\n      me.maxHeight = maxHeight;\n      me.margins = margins;\n\n      // Dimensions\n      me.beforeSetDimensions();\n      me.setDimensions();\n      me.afterSetDimensions();\n      // Labels\n      me.beforeBuildLabels();\n      me.buildLabels();\n      me.afterBuildLabels();\n\n      // Fit\n      me.beforeFit();\n      me.fit();\n      me.afterFit();\n      //\n      me.afterUpdate();\n      return me.minSize;\n    },\n    afterUpdate: noop$2,\n    //\n\n    beforeSetDimensions: noop$2,\n    setDimensions: function () {\n      var me = this;\n      // Set the unconstrained dimension before label rotation\n      if (me.isHorizontal()) {\n        // Reset position before calculating rotation\n        me.width = me.maxWidth;\n        me.left = 0;\n        me.right = me.width;\n      } else {\n        me.height = me.maxHeight;\n\n        // Reset position before calculating rotation\n        me.top = 0;\n        me.bottom = me.height;\n      }\n\n      // Reset padding\n      me.paddingLeft = 0;\n      me.paddingTop = 0;\n      me.paddingRight = 0;\n      me.paddingBottom = 0;\n\n      // Reset minSize\n      me.minSize = {\n        width: 0,\n        height: 0\n      };\n    },\n    afterSetDimensions: noop$2,\n    //\n\n    beforeBuildLabels: noop$2,\n    buildLabels: noop$2,\n    afterBuildLabels: noop$2,\n    //\n\n    beforeFit: noop$2,\n    fit: function () {\n      var me = this;\n      var opts = me.options;\n      var minSize = me.minSize = {};\n      var isHorizontal = me.isHorizontal();\n      var lineCount, textSize;\n      if (!opts.display) {\n        me.width = minSize.width = me.height = minSize.height = 0;\n        return;\n      }\n      lineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;\n      textSize = lineCount * helpers$1.options._parseFont(opts).lineHeight + opts.padding * 2;\n      me.width = minSize.width = isHorizontal ? me.maxWidth : textSize;\n      me.height = minSize.height = isHorizontal ? textSize : me.maxHeight;\n    },\n    afterFit: noop$2,\n    // Shared Methods\n    isHorizontal: function () {\n      var pos = this.options.position;\n      return pos === 'top' || pos === 'bottom';\n    },\n    // Actually draw the title block on the canvas\n    draw: function () {\n      var me = this;\n      var ctx = me.ctx;\n      var opts = me.options;\n      if (!opts.display) {\n        return;\n      }\n      var fontOpts = helpers$1.options._parseFont(opts);\n      var lineHeight = fontOpts.lineHeight;\n      var offset = lineHeight / 2 + opts.padding;\n      var rotation = 0;\n      var top = me.top;\n      var left = me.left;\n      var bottom = me.bottom;\n      var right = me.right;\n      var maxWidth, titleX, titleY;\n      ctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour\n      ctx.font = fontOpts.string;\n\n      // Horizontal\n      if (me.isHorizontal()) {\n        titleX = left + (right - left) / 2; // midpoint of the width\n        titleY = top + offset;\n        maxWidth = right - left;\n      } else {\n        titleX = opts.position === 'left' ? left + offset : right - offset;\n        titleY = top + (bottom - top) / 2;\n        maxWidth = bottom - top;\n        rotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n      }\n      ctx.save();\n      ctx.translate(titleX, titleY);\n      ctx.rotate(rotation);\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'middle';\n      var text = opts.text;\n      if (helpers$1.isArray(text)) {\n        var y = 0;\n        for (var i = 0; i < text.length; ++i) {\n          ctx.fillText(text[i], 0, y, maxWidth);\n          y += lineHeight;\n        }\n      } else {\n        ctx.fillText(text, 0, 0, maxWidth);\n      }\n      ctx.restore();\n    }\n  });\n  function createNewTitleBlockAndAttach(chart, titleOpts) {\n    var title = new Title({\n      ctx: chart.ctx,\n      options: titleOpts,\n      chart: chart\n    });\n    core_layouts.configure(chart, title, titleOpts);\n    core_layouts.addBox(chart, title);\n    chart.titleBlock = title;\n  }\n  var plugin_title = {\n    id: 'title',\n    /**\r\n     * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\r\n     * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\r\n     * the plugin, which one will be re-exposed in the chart.js file.\r\n     * https://github.com/chartjs/Chart.js/pull/2640\r\n     * @private\r\n     */\n    _element: Title,\n    beforeInit: function (chart) {\n      var titleOpts = chart.options.title;\n      if (titleOpts) {\n        createNewTitleBlockAndAttach(chart, titleOpts);\n      }\n    },\n    beforeUpdate: function (chart) {\n      var titleOpts = chart.options.title;\n      var titleBlock = chart.titleBlock;\n      if (titleOpts) {\n        helpers$1.mergeIf(titleOpts, core_defaults.global.title);\n        if (titleBlock) {\n          core_layouts.configure(chart, titleBlock, titleOpts);\n          titleBlock.options = titleOpts;\n        } else {\n          createNewTitleBlockAndAttach(chart, titleOpts);\n        }\n      } else if (titleBlock) {\n        core_layouts.removeBox(chart, titleBlock);\n        delete chart.titleBlock;\n      }\n    }\n  };\n  var plugins = {};\n  var filler = plugin_filler;\n  var legend = plugin_legend;\n  var title = plugin_title;\n  plugins.filler = filler;\n  plugins.legend = legend;\n  plugins.title = title;\n\n  /**\r\n   * @namespace Chart\r\n   */\n\n  core_controller.helpers = helpers$1;\n\n  // @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\n  core_helpers();\n  core_controller._adapters = core_adapters;\n  core_controller.Animation = core_animation;\n  core_controller.animationService = core_animations;\n  core_controller.controllers = controllers;\n  core_controller.DatasetController = core_datasetController;\n  core_controller.defaults = core_defaults;\n  core_controller.Element = core_element;\n  core_controller.elements = elements;\n  core_controller.Interaction = core_interaction;\n  core_controller.layouts = core_layouts;\n  core_controller.platform = platform;\n  core_controller.plugins = core_plugins;\n  core_controller.Scale = core_scale;\n  core_controller.scaleService = core_scaleService;\n  core_controller.Ticks = core_ticks;\n  core_controller.Tooltip = core_tooltip;\n\n  // Register built-in scales\n\n  core_controller.helpers.each(scales, function (scale, type) {\n    core_controller.scaleService.registerScaleType(type, scale, scale._defaults);\n  });\n\n  // Load to register built-in adapters (as side effects)\n\n  // Loading built-in plugins\n\n  for (var k in plugins) {\n    if (plugins.hasOwnProperty(k)) {\n      core_controller.plugins.register(plugins[k]);\n    }\n  }\n  core_controller.platform.initialize();\n  var src = core_controller;\n  if (typeof window !== 'undefined') {\n    window.Chart = core_controller;\n  }\n\n  // DEPRECATIONS\n\n  /**\r\n   * Provided for backward compatibility, not available anymore\r\n   * @namespace Chart.Chart\r\n   * @deprecated since version 2.8.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  core_controller.Chart = core_controller;\n\n  /**\r\n   * Provided for backward compatibility, not available anymore\r\n   * @namespace Chart.Legend\r\n   * @deprecated since version 2.1.5\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  core_controller.Legend = plugins.legend._element;\n\n  /**\r\n   * Provided for backward compatibility, not available anymore\r\n   * @namespace Chart.Title\r\n   * @deprecated since version 2.1.5\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  core_controller.Title = plugins.title._element;\n\n  /**\r\n   * Provided for backward compatibility, use Chart.plugins instead\r\n   * @namespace Chart.pluginService\r\n   * @deprecated since version 2.1.5\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  core_controller.pluginService = core_controller.plugins;\n\n  /**\r\n   * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\r\n   * effect, instead simply create/register plugins via plain JavaScript objects.\r\n   * @interface Chart.PluginBase\r\n   * @deprecated since version 2.5.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  core_controller.PluginBase = core_controller.Element.extend({});\n\n  /**\r\n   * Provided for backward compatibility, use Chart.helpers.canvas instead.\r\n   * @namespace Chart.canvasHelpers\r\n   * @deprecated since version 2.6.0\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  core_controller.canvasHelpers = core_controller.helpers.canvas;\n\n  /**\r\n   * Provided for backward compatibility, use Chart.layouts instead.\r\n   * @namespace Chart.layoutService\r\n   * @deprecated since version 2.7.3\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  core_controller.layoutService = core_controller.layouts;\n\n  /**\r\n   * Provided for backward compatibility, not available anymore.\r\n   * @namespace Chart.LinearScaleBase\r\n   * @deprecated since version 2.8\r\n   * @todo remove at version 3\r\n   * @private\r\n   */\n  core_controller.LinearScaleBase = scale_linearbase;\n\n  /**\r\n   * Provided for backward compatibility, instead we should create a new Chart\r\n   * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).\r\n   * @deprecated since version 2.8.0\r\n   * @todo remove at version 3\r\n   */\n  core_controller.helpers.each(['Bar', 'Bubble', 'Doughnut', 'Line', 'PolarArea', 'Radar', 'Scatter'], function (klass) {\n    core_controller[klass] = function (ctx, cfg) {\n      return new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {\n        type: klass.charAt(0).toLowerCase() + klass.slice(1)\n      }));\n    };\n  });\n  return src;\n});","/*!\n * FilePondPluginImagePreview 4.6.11\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.FilePondPluginImagePreview = factory());\n})(this, function () {\n  'use strict';\n\n  // test if file is of type image and can be viewed in canvas\n  var isPreviewableImage = function isPreviewableImage(file) {\n    return /^image/.test(file.type);\n  };\n  function _typeof(obj) {\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  }\n  var REACT_ELEMENT_TYPE;\n  function _jsx(type, props, key, children) {\n    if (!REACT_ELEMENT_TYPE) {\n      REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element') || 0xeac7;\n    }\n    var defaultProps = type && type.defaultProps;\n    var childrenLength = arguments.length - 3;\n    if (!props && childrenLength !== 0) {\n      props = {\n        children: void 0\n      };\n    }\n    if (props && defaultProps) {\n      for (var propName in defaultProps) {\n        if (props[propName] === void 0) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    } else if (!props) {\n      props = defaultProps || {};\n    }\n    if (childrenLength === 1) {\n      props.children = children;\n    } else if (childrenLength > 1) {\n      var childArray = new Array(childrenLength);\n      for (var i = 0; i < childrenLength; i++) {\n        childArray[i] = arguments[i + 3];\n      }\n      props.children = childArray;\n    }\n    return {\n      $$typeof: REACT_ELEMENT_TYPE,\n      type: type,\n      key: key === undefined ? null : '' + key,\n      ref: null,\n      props: props,\n      _owner: null\n    };\n  }\n  function _asyncIterator(iterable) {\n    var method;\n    if (typeof Symbol === 'function') {\n      if (Symbol.asyncIterator) {\n        method = iterable[Symbol.asyncIterator];\n        if (method != null) return method.call(iterable);\n      }\n      if (Symbol.iterator) {\n        method = iterable[Symbol.iterator];\n        if (method != null) return method.call(iterable);\n      }\n    }\n    throw new TypeError('Object is not async iterable');\n  }\n  function _AwaitValue(value) {\n    this.wrapped = value;\n  }\n  function _AsyncGenerator(gen) {\n    var front, back;\n    function send(key, arg) {\n      return new Promise(function (resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n        var wrappedAwait = value instanceof _AwaitValue;\n        Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {\n          if (wrappedAwait) {\n            resume('next', arg);\n            return;\n          }\n          settle(result.done ? 'return' : 'normal', arg);\n        }, function (err) {\n          resume('throw', err);\n        });\n      } catch (err) {\n        settle('throw', err);\n      }\n    }\n    function settle(type, value) {\n      switch (type) {\n        case 'return':\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n        case 'throw':\n          front.reject(value);\n          break;\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n      front = front.next;\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n    this._invoke = send;\n    if (typeof gen.return !== 'function') {\n      this.return = undefined;\n    }\n  }\n  if (typeof Symbol === 'function' && Symbol.asyncIterator) {\n    _AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n      return this;\n    };\n  }\n  _AsyncGenerator.prototype.next = function (arg) {\n    return this._invoke('next', arg);\n  };\n  _AsyncGenerator.prototype.throw = function (arg) {\n    return this._invoke('throw', arg);\n  };\n  _AsyncGenerator.prototype.return = function (arg) {\n    return this._invoke('return', arg);\n  };\n  function _wrapAsyncGenerator(fn) {\n    return function () {\n      return new _AsyncGenerator(fn.apply(this, arguments));\n    };\n  }\n  function _awaitAsyncGenerator(value) {\n    return new _AwaitValue(value);\n  }\n  function _asyncGeneratorDelegate(inner, awaitWrap) {\n    var iter = {},\n      waiting = false;\n    function pump(key, value) {\n      waiting = true;\n      value = new Promise(function (resolve) {\n        resolve(inner[key](value));\n      });\n      return {\n        done: false,\n        value: awaitWrap(value)\n      };\n    }\n    if (typeof Symbol === 'function' && Symbol.iterator) {\n      iter[Symbol.iterator] = function () {\n        return this;\n      };\n    }\n    iter.next = function (value) {\n      if (waiting) {\n        waiting = false;\n        return value;\n      }\n      return pump('next', value);\n    };\n    if (typeof inner.throw === 'function') {\n      iter.throw = function (value) {\n        if (waiting) {\n          waiting = false;\n          throw value;\n        }\n        return pump('throw', value);\n      };\n    }\n    if (typeof inner.return === 'function') {\n      iter.return = function (value) {\n        return pump('return', value);\n      };\n    }\n    return iter;\n  }\n  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n      var info = gen[key](arg);\n      var value = info.value;\n    } catch (error) {\n      reject(error);\n      return;\n    }\n    if (info.done) {\n      resolve(value);\n    } else {\n      Promise.resolve(value).then(_next, _throw);\n    }\n  }\n  function _asyncToGenerator(fn) {\n    return function () {\n      var self = this,\n        args = arguments;\n      return new Promise(function (resolve, reject) {\n        var gen = fn.apply(self, args);\n        function _next(value) {\n          asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);\n        }\n        function _throw(err) {\n          asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);\n        }\n        _next(undefined);\n      });\n    };\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if ('value' in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n  function _defineEnumerableProperties(obj, descs) {\n    for (var key in descs) {\n      var desc = descs[key];\n      desc.configurable = desc.enumerable = true;\n      if ('value' in desc) desc.writable = true;\n      Object.defineProperty(obj, key, desc);\n    }\n    if (Object.getOwnPropertySymbols) {\n      var objectSymbols = Object.getOwnPropertySymbols(descs);\n      for (var i = 0; i < objectSymbols.length; i++) {\n        var sym = objectSymbols[i];\n        var desc = descs[sym];\n        desc.configurable = desc.enumerable = true;\n        if ('value' in desc) desc.writable = true;\n        Object.defineProperty(obj, sym, desc);\n      }\n    }\n    return obj;\n  }\n  function _defaults(obj, defaults) {\n    var keys = Object.getOwnPropertyNames(defaults);\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      var value = Object.getOwnPropertyDescriptor(defaults, key);\n      if (value && value.configurable && obj[key] === undefined) {\n        Object.defineProperty(obj, key, value);\n      }\n    }\n    return obj;\n  }\n  function _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  }\n  function _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  }\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n    return target;\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function');\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) _setPrototypeOf(subClass, superClass);\n  }\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n      return o.__proto__ || Object.getPrototypeOf(o);\n    };\n    return _getPrototypeOf(o);\n  }\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n    return _setPrototypeOf(o, p);\n  }\n  function isNativeReflectConstruct() {\n    if (typeof Reflect === 'undefined' || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === 'function') return true;\n    try {\n      Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n  function _construct(Parent, args, Class) {\n    if (isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct(Parent, args, Class) {\n        var a = [null];\n        a.push.apply(a, args);\n        var Constructor = Function.bind.apply(Parent, a);\n        var instance = new Constructor();\n        if (Class) _setPrototypeOf(instance, Class.prototype);\n        return instance;\n      };\n    }\n    return _construct.apply(null, arguments);\n  }\n  function _isNativeFunction(fn) {\n    return Function.toString.call(fn).indexOf('[native code]') !== -1;\n  }\n  function _wrapNativeSuper(Class) {\n    var _cache = typeof Map === 'function' ? new Map() : undefined;\n    _wrapNativeSuper = function _wrapNativeSuper(Class) {\n      if (Class === null || !_isNativeFunction(Class)) return Class;\n      if (typeof Class !== 'function') {\n        throw new TypeError('Super expression must either be null or a function');\n      }\n      if (typeof _cache !== 'undefined') {\n        if (_cache.has(Class)) return _cache.get(Class);\n        _cache.set(Class, Wrapper);\n      }\n      function Wrapper() {\n        return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n      }\n      Wrapper.prototype = Object.create(Class.prototype, {\n        constructor: {\n          value: Wrapper,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      });\n      return _setPrototypeOf(Wrapper, Class);\n    };\n    return _wrapNativeSuper(Class);\n  }\n  function _instanceof(left, right) {\n    if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) {\n      return right[Symbol.hasInstance](left);\n    } else {\n      return left instanceof right;\n    }\n  }\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n  function _interopRequireWildcard(obj) {\n    if (obj && obj.__esModule) {\n      return obj;\n    } else {\n      var newObj = {};\n      if (obj != null) {\n        for (var key in obj) {\n          if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};\n            if (desc.get || desc.set) {\n              Object.defineProperty(newObj, key, desc);\n            } else {\n              newObj[key] = obj[key];\n            }\n          }\n        }\n      }\n      newObj.default = obj;\n      return newObj;\n    }\n  }\n  function _newArrowCheck(innerThis, boundThis) {\n    if (innerThis !== boundThis) {\n      throw new TypeError('Cannot instantiate an arrow function');\n    }\n  }\n  function _objectDestructuringEmpty(obj) {\n    if (obj == null) throw new TypeError('Cannot destructure undefined');\n  }\n  function _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  }\n  function _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  }\n  function _assertThisInitialized(self) {\n    if (self === void 0) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n    return self;\n  }\n  function _possibleConstructorReturn(self, call) {\n    if (call && (typeof call === 'object' || typeof call === 'function')) {\n      return call;\n    }\n    return _assertThisInitialized(self);\n  }\n  function _superPropBase(object, property) {\n    while (!Object.prototype.hasOwnProperty.call(object, property)) {\n      object = _getPrototypeOf(object);\n      if (object === null) break;\n    }\n    return object;\n  }\n  function _get(target, property, receiver) {\n    if (typeof Reflect !== 'undefined' && Reflect.get) {\n      _get = Reflect.get;\n    } else {\n      _get = function _get(target, property, receiver) {\n        var base = _superPropBase(target, property);\n        if (!base) return;\n        var desc = Object.getOwnPropertyDescriptor(base, property);\n        if (desc.get) {\n          return desc.get.call(receiver);\n        }\n        return desc.value;\n      };\n    }\n    return _get(target, property, receiver || target);\n  }\n  function set(target, property, value, receiver) {\n    if (typeof Reflect !== 'undefined' && Reflect.set) {\n      set = Reflect.set;\n    } else {\n      set = function set(target, property, value, receiver) {\n        var base = _superPropBase(target, property);\n        var desc;\n        if (base) {\n          desc = Object.getOwnPropertyDescriptor(base, property);\n          if (desc.set) {\n            desc.set.call(receiver, value);\n            return true;\n          } else if (!desc.writable) {\n            return false;\n          }\n        }\n        desc = Object.getOwnPropertyDescriptor(receiver, property);\n        if (desc) {\n          if (!desc.writable) {\n            return false;\n          }\n          desc.value = value;\n          Object.defineProperty(receiver, property, desc);\n        } else {\n          _defineProperty(receiver, property, value);\n        }\n        return true;\n      };\n    }\n    return set(target, property, value, receiver);\n  }\n  function _set(target, property, value, receiver, isStrict) {\n    var s = set(target, property, value, receiver || target);\n    if (!s && isStrict) {\n      throw new Error('failed to set property');\n    }\n    return value;\n  }\n  function _taggedTemplateLiteral(strings, raw) {\n    if (!raw) {\n      raw = strings.slice(0);\n    }\n    return Object.freeze(Object.defineProperties(strings, {\n      raw: {\n        value: Object.freeze(raw)\n      }\n    }));\n  }\n  function _taggedTemplateLiteralLoose(strings, raw) {\n    if (!raw) {\n      raw = strings.slice(0);\n    }\n    strings.raw = raw;\n    return strings;\n  }\n  function _temporalRef(val, name) {\n    if (val === _temporalUndefined) {\n      throw new ReferenceError(name + ' is not defined - temporal dead zone');\n    } else {\n      return val;\n    }\n  }\n  function _readOnlyError(name) {\n    throw new Error('\"' + name + '\" is read-only');\n  }\n  function _classNameTDZError(name) {\n    throw new Error('Class \"' + name + '\" cannot be referenced in computed property keys.');\n  }\n  var _temporalUndefined = {};\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n  }\n  function _slicedToArrayLoose(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimitLoose(arr, i) || _nonIterableRest();\n  }\n  function _toArray(arr) {\n    return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n  }\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n  }\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n      return arr2;\n    }\n  }\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n  }\n  function _iterableToArray(iter) {\n    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === '[object Arguments]') return Array.from(iter);\n  }\n  function _iterableToArrayLimit(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i['return'] != null) _i['return']();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n    return _arr;\n  }\n  function _iterableToArrayLimitLoose(arr, i) {\n    var _arr = [];\n    for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n      _arr.push(_step.value);\n      if (i && _arr.length === i) break;\n    }\n    return _arr;\n  }\n  function _nonIterableSpread() {\n    throw new TypeError('Invalid attempt to spread non-iterable instance');\n  }\n  function _nonIterableRest() {\n    throw new TypeError('Invalid attempt to destructure non-iterable instance');\n  }\n  function _skipFirstGeneratorNext(fn) {\n    return function () {\n      var it = fn.apply(this, arguments);\n      it.next();\n      return it;\n    };\n  }\n  function _toPrimitive(input, hint) {\n    if (typeof input !== 'object' || input === null) return input;\n    var prim = input[Symbol.toPrimitive];\n    if (prim !== undefined) {\n      var res = prim.call(input, hint || 'default');\n      if (typeof res !== 'object') return res;\n      throw new TypeError('@@toPrimitive must return a primitive value.');\n    }\n    return (hint === 'string' ? String : Number)(input);\n  }\n  function _toPropertyKey(arg) {\n    var key = _toPrimitive(arg, 'string');\n    return typeof key === 'symbol' ? key : String(key);\n  }\n  function _initializerWarningHelper(descriptor, context) {\n    throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and set to use loose mode. ' + 'To use proposal-class-properties in spec mode with decorators, wait for ' + 'the next major version of decorators in stage 2.');\n  }\n  function _initializerDefineProperty(target, property, descriptor, context) {\n    if (!descriptor) return;\n    Object.defineProperty(target, property, {\n      enumerable: descriptor.enumerable,\n      configurable: descriptor.configurable,\n      writable: descriptor.writable,\n      value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n    });\n  }\n  function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n    var desc = {};\n    Object.keys(descriptor).forEach(function (key) {\n      desc[key] = descriptor[key];\n    });\n    desc.enumerable = !!desc.enumerable;\n    desc.configurable = !!desc.configurable;\n    if ('value' in desc || desc.initializer) {\n      desc.writable = true;\n    }\n    desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n      return decorator(target, property, desc) || desc;\n    }, desc);\n    if (context && desc.initializer !== void 0) {\n      desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n      desc.initializer = undefined;\n    }\n    if (desc.initializer === void 0) {\n      Object.defineProperty(target, property, desc);\n      desc = null;\n    }\n    return desc;\n  }\n  var id = 0;\n  function _classPrivateFieldLooseKey(name) {\n    return '__private_' + id++ + '_' + name;\n  }\n  function _classPrivateFieldLooseBase(receiver, privateKey) {\n    if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n      throw new TypeError('attempted to use private field on non-instance');\n    }\n    return receiver;\n  }\n  function _classPrivateFieldGet(receiver, privateMap) {\n    if (!privateMap.has(receiver)) {\n      throw new TypeError('attempted to get private field on non-instance');\n    }\n    var descriptor = privateMap.get(receiver);\n    if (descriptor.get) {\n      return descriptor.get.call(receiver);\n    }\n    return descriptor.value;\n  }\n  function _classPrivateFieldSet(receiver, privateMap, value) {\n    if (!privateMap.has(receiver)) {\n      throw new TypeError('attempted to set private field on non-instance');\n    }\n    var descriptor = privateMap.get(receiver);\n    if (descriptor.set) {\n      descriptor.set.call(receiver, value);\n    } else {\n      if (!descriptor.writable) {\n        throw new TypeError('attempted to set read only private field');\n      }\n      descriptor.value = value;\n    }\n    return value;\n  }\n  function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {\n    if (receiver !== classConstructor) {\n      throw new TypeError('Private static access of wrong provenance');\n    }\n    return descriptor.value;\n  }\n  function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {\n    if (receiver !== classConstructor) {\n      throw new TypeError('Private static access of wrong provenance');\n    }\n    if (!descriptor.writable) {\n      throw new TypeError('attempted to set read only private field');\n    }\n    descriptor.value = value;\n    return value;\n  }\n  function _classStaticPrivateMethodGet(receiver, classConstructor, method) {\n    if (receiver !== classConstructor) {\n      throw new TypeError('Private static access of wrong provenance');\n    }\n    return method;\n  }\n  function _classStaticPrivateMethodSet() {\n    throw new TypeError('attempted to set read only static private field');\n  }\n  function _decorate(decorators, factory, superClass, mixins) {\n    var api = _getDecoratorsApi();\n    if (mixins) {\n      for (var i = 0; i < mixins.length; i++) {\n        api = mixins[i](api);\n      }\n    }\n    var r = factory(function initialize(O) {\n      api.initializeInstanceElements(O, decorated.elements);\n    }, superClass);\n    var decorated = api.decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);\n    api.initializeClassElements(r.F, decorated.elements);\n    return api.runClassFinishers(r.F, decorated.finishers);\n  }\n  function _getDecoratorsApi() {\n    _getDecoratorsApi = function () {\n      return api;\n    };\n    var api = {\n      elementsDefinitionOrder: [['method'], ['field']],\n      initializeInstanceElements: function (O, elements) {\n        ['method', 'field'].forEach(function (kind) {\n          elements.forEach(function (element) {\n            if (element.kind === kind && element.placement === 'own') {\n              this.defineClassElement(O, element);\n            }\n          }, this);\n        }, this);\n      },\n      initializeClassElements: function (F, elements) {\n        var proto = F.prototype;\n        ['method', 'field'].forEach(function (kind) {\n          elements.forEach(function (element) {\n            var placement = element.placement;\n            if (element.kind === kind && (placement === 'static' || placement === 'prototype')) {\n              var receiver = placement === 'static' ? F : proto;\n              this.defineClassElement(receiver, element);\n            }\n          }, this);\n        }, this);\n      },\n      defineClassElement: function (receiver, element) {\n        var descriptor = element.descriptor;\n        if (element.kind === 'field') {\n          var initializer = element.initializer;\n          descriptor = {\n            enumerable: descriptor.enumerable,\n            writable: descriptor.writable,\n            configurable: descriptor.configurable,\n            value: initializer === void 0 ? void 0 : initializer.call(receiver)\n          };\n        }\n        Object.defineProperty(receiver, element.key, descriptor);\n      },\n      decorateClass: function (elements, decorators) {\n        var newElements = [];\n        var finishers = [];\n        var placements = {\n          static: [],\n          prototype: [],\n          own: []\n        };\n        elements.forEach(function (element) {\n          this.addElementPlacement(element, placements);\n        }, this);\n        elements.forEach(function (element) {\n          if (!_hasDecorators(element)) return newElements.push(element);\n          var elementFinishersExtras = this.decorateElement(element, placements);\n          newElements.push(elementFinishersExtras.element);\n          newElements.push.apply(newElements, elementFinishersExtras.extras);\n          finishers.push.apply(finishers, elementFinishersExtras.finishers);\n        }, this);\n        if (!decorators) {\n          return {\n            elements: newElements,\n            finishers: finishers\n          };\n        }\n        var result = this.decorateConstructor(newElements, decorators);\n        finishers.push.apply(finishers, result.finishers);\n        result.finishers = finishers;\n        return result;\n      },\n      addElementPlacement: function (element, placements, silent) {\n        var keys = placements[element.placement];\n        if (!silent && keys.indexOf(element.key) !== -1) {\n          throw new TypeError('Duplicated element (' + element.key + ')');\n        }\n        keys.push(element.key);\n      },\n      decorateElement: function (element, placements) {\n        var extras = [];\n        var finishers = [];\n        for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {\n          var keys = placements[element.placement];\n          keys.splice(keys.indexOf(element.key), 1);\n          var elementObject = this.fromElementDescriptor(element);\n          var elementFinisherExtras = this.toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);\n          element = elementFinisherExtras.element;\n          this.addElementPlacement(element, placements);\n          if (elementFinisherExtras.finisher) {\n            finishers.push(elementFinisherExtras.finisher);\n          }\n          var newExtras = elementFinisherExtras.extras;\n          if (newExtras) {\n            for (var j = 0; j < newExtras.length; j++) {\n              this.addElementPlacement(newExtras[j], placements);\n            }\n            extras.push.apply(extras, newExtras);\n          }\n        }\n        return {\n          element: element,\n          finishers: finishers,\n          extras: extras\n        };\n      },\n      decorateConstructor: function (elements, decorators) {\n        var finishers = [];\n        for (var i = decorators.length - 1; i >= 0; i--) {\n          var obj = this.fromClassDescriptor(elements);\n          var elementsAndFinisher = this.toClassDescriptor((0, decorators[i])(obj) || obj);\n          if (elementsAndFinisher.finisher !== undefined) {\n            finishers.push(elementsAndFinisher.finisher);\n          }\n          if (elementsAndFinisher.elements !== undefined) {\n            elements = elementsAndFinisher.elements;\n            for (var j = 0; j < elements.length - 1; j++) {\n              for (var k = j + 1; k < elements.length; k++) {\n                if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {\n                  throw new TypeError('Duplicated element (' + elements[j].key + ')');\n                }\n              }\n            }\n          }\n        }\n        return {\n          elements: elements,\n          finishers: finishers\n        };\n      },\n      fromElementDescriptor: function (element) {\n        var obj = {\n          kind: element.kind,\n          key: element.key,\n          placement: element.placement,\n          descriptor: element.descriptor\n        };\n        var desc = {\n          value: 'Descriptor',\n          configurable: true\n        };\n        Object.defineProperty(obj, Symbol.toStringTag, desc);\n        if (element.kind === 'field') obj.initializer = element.initializer;\n        return obj;\n      },\n      toElementDescriptors: function (elementObjects) {\n        if (elementObjects === undefined) return;\n        return _toArray(elementObjects).map(function (elementObject) {\n          var element = this.toElementDescriptor(elementObject);\n          this.disallowProperty(elementObject, 'finisher', 'An element descriptor');\n          this.disallowProperty(elementObject, 'extras', 'An element descriptor');\n          return element;\n        }, this);\n      },\n      toElementDescriptor: function (elementObject) {\n        var kind = String(elementObject.kind);\n        if (kind !== 'method' && kind !== 'field') {\n          throw new TypeError('An element descriptor\\'s .kind property must be either \"method\" or' + ' \"field\", but a decorator created an element descriptor with' + ' .kind \"' + kind + '\"');\n        }\n        var key = _toPropertyKey(elementObject.key);\n        var placement = String(elementObject.placement);\n        if (placement !== 'static' && placement !== 'prototype' && placement !== 'own') {\n          throw new TypeError('An element descriptor\\'s .placement property must be one of \"static\",' + ' \"prototype\" or \"own\", but a decorator created an element descriptor' + ' with .placement \"' + placement + '\"');\n        }\n        var descriptor = elementObject.descriptor;\n        this.disallowProperty(elementObject, 'elements', 'An element descriptor');\n        var element = {\n          kind: kind,\n          key: key,\n          placement: placement,\n          descriptor: Object.assign({}, descriptor)\n        };\n        if (kind !== 'field') {\n          this.disallowProperty(elementObject, 'initializer', 'A method descriptor');\n        } else {\n          this.disallowProperty(descriptor, 'get', 'The property descriptor of a field descriptor');\n          this.disallowProperty(descriptor, 'set', 'The property descriptor of a field descriptor');\n          this.disallowProperty(descriptor, 'value', 'The property descriptor of a field descriptor');\n          element.initializer = elementObject.initializer;\n        }\n        return element;\n      },\n      toElementFinisherExtras: function (elementObject) {\n        var element = this.toElementDescriptor(elementObject);\n        var finisher = _optionalCallableProperty(elementObject, 'finisher');\n        var extras = this.toElementDescriptors(elementObject.extras);\n        return {\n          element: element,\n          finisher: finisher,\n          extras: extras\n        };\n      },\n      fromClassDescriptor: function (elements) {\n        var obj = {\n          kind: 'class',\n          elements: elements.map(this.fromElementDescriptor, this)\n        };\n        var desc = {\n          value: 'Descriptor',\n          configurable: true\n        };\n        Object.defineProperty(obj, Symbol.toStringTag, desc);\n        return obj;\n      },\n      toClassDescriptor: function (obj) {\n        var kind = String(obj.kind);\n        if (kind !== 'class') {\n          throw new TypeError('A class descriptor\\'s .kind property must be \"class\", but a decorator' + ' created a class descriptor with .kind \"' + kind + '\"');\n        }\n        this.disallowProperty(obj, 'key', 'A class descriptor');\n        this.disallowProperty(obj, 'placement', 'A class descriptor');\n        this.disallowProperty(obj, 'descriptor', 'A class descriptor');\n        this.disallowProperty(obj, 'initializer', 'A class descriptor');\n        this.disallowProperty(obj, 'extras', 'A class descriptor');\n        var finisher = _optionalCallableProperty(obj, 'finisher');\n        var elements = this.toElementDescriptors(obj.elements);\n        return {\n          elements: elements,\n          finisher: finisher\n        };\n      },\n      runClassFinishers: function (constructor, finishers) {\n        for (var i = 0; i < finishers.length; i++) {\n          var newConstructor = (0, finishers[i])(constructor);\n          if (newConstructor !== undefined) {\n            if (typeof newConstructor !== 'function') {\n              throw new TypeError('Finishers must return a constructor.');\n            }\n            constructor = newConstructor;\n          }\n        }\n        return constructor;\n      },\n      disallowProperty: function (obj, name, objectType) {\n        if (obj[name] !== undefined) {\n          throw new TypeError(objectType + \" can't have a .\" + name + ' property.');\n        }\n      }\n    };\n    return api;\n  }\n  function _createElementDescriptor(def) {\n    var key = _toPropertyKey(def.key);\n    var descriptor;\n    if (def.kind === 'method') {\n      descriptor = {\n        value: def.value,\n        writable: true,\n        configurable: true,\n        enumerable: false\n      };\n    } else if (def.kind === 'get') {\n      descriptor = {\n        get: def.value,\n        configurable: true,\n        enumerable: false\n      };\n    } else if (def.kind === 'set') {\n      descriptor = {\n        set: def.value,\n        configurable: true,\n        enumerable: false\n      };\n    } else if (def.kind === 'field') {\n      descriptor = {\n        configurable: true,\n        writable: true,\n        enumerable: true\n      };\n    }\n    var element = {\n      kind: def.kind === 'field' ? 'field' : 'method',\n      key: key,\n      placement: def.static ? 'static' : def.kind === 'field' ? 'own' : 'prototype',\n      descriptor: descriptor\n    };\n    if (def.decorators) element.decorators = def.decorators;\n    if (def.kind === 'field') element.initializer = def.value;\n    return element;\n  }\n  function _coalesceGetterSetter(element, other) {\n    if (element.descriptor.get !== undefined) {\n      other.descriptor.get = element.descriptor.get;\n    } else {\n      other.descriptor.set = element.descriptor.set;\n    }\n  }\n  function _coalesceClassElements(elements) {\n    var newElements = [];\n    var isSameElement = function (other) {\n      return other.kind === 'method' && other.key === element.key && other.placement === element.placement;\n    };\n    for (var i = 0; i < elements.length; i++) {\n      var element = elements[i];\n      var other;\n      if (element.kind === 'method' && (other = newElements.find(isSameElement))) {\n        if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {\n          if (_hasDecorators(element) || _hasDecorators(other)) {\n            throw new ReferenceError('Duplicated methods (' + element.key + \") can't be decorated.\");\n          }\n          other.descriptor = element.descriptor;\n        } else {\n          if (_hasDecorators(element)) {\n            if (_hasDecorators(other)) {\n              throw new ReferenceError(\"Decorators can't be placed on different accessors with for \" + 'the same property (' + element.key + ').');\n            }\n            other.decorators = element.decorators;\n          }\n          _coalesceGetterSetter(element, other);\n        }\n      } else {\n        newElements.push(element);\n      }\n    }\n    return newElements;\n  }\n  function _hasDecorators(element) {\n    return element.decorators && element.decorators.length;\n  }\n  function _isDataDescriptor(desc) {\n    return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);\n  }\n  function _optionalCallableProperty(obj, name) {\n    var value = obj[name];\n    if (value !== undefined && typeof value !== 'function') {\n      throw new TypeError(\"Expected '\" + name + \"' to be a function\");\n    }\n    return value;\n  }\n  function _classPrivateMethodGet(receiver, privateSet, fn) {\n    if (!privateSet.has(receiver)) {\n      throw new TypeError('attempted to get private field on non-instance');\n    }\n    return fn;\n  }\n  function _classPrivateMethodSet() {\n    throw new TypeError('attempted to reassign private method');\n  }\n  function _wrapRegExp(re, groups) {\n    _wrapRegExp = function (re, groups) {\n      return new BabelRegExp(re, groups);\n    };\n    var _RegExp = _wrapNativeSuper(RegExp);\n    var _super = RegExp.prototype;\n    var _groups = new WeakMap();\n    function BabelRegExp(re, groups) {\n      var _this = _RegExp.call(this, re);\n      _groups.set(_this, groups);\n      return _this;\n    }\n    _inherits(BabelRegExp, _RegExp);\n    BabelRegExp.prototype.exec = function (str) {\n      var result = _super.exec.call(this, str);\n      if (result) result.groups = buildGroups(result, this);\n      return result;\n    };\n    BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\n      if (typeof substitution === 'string') {\n        var groups = _groups.get(this);\n        return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\n          return '$' + groups[name];\n        }));\n      } else if (typeof substitution === 'function') {\n        var _this = this;\n        return _super[Symbol.replace].call(this, str, function () {\n          var args = [];\n          args.push.apply(args, arguments);\n          if (typeof args[args.length - 1] !== 'object') {\n            args.push(buildGroups(args, _this));\n          }\n          return substitution.apply(this, args);\n        });\n      } else {\n        return _super[Symbol.replace].call(this, str, substitution);\n      }\n    };\n    function buildGroups(result, re) {\n      var g = _groups.get(re);\n      return Object.keys(g).reduce(function (groups, name) {\n        groups[name] = result[g[name]];\n        return groups;\n      }, Object.create(null));\n    }\n    return _wrapRegExp.apply(this, arguments);\n  }\n  var vectorMultiply = function vectorMultiply(v, amount) {\n    return createVector(v.x * amount, v.y * amount);\n  };\n  var vectorAdd = function vectorAdd(a, b) {\n    return createVector(a.x + b.x, a.y + b.y);\n  };\n  var vectorNormalize = function vectorNormalize(v) {\n    var l = Math.sqrt(v.x * v.x + v.y * v.y);\n    if (l === 0) {\n      return {\n        x: 0,\n        y: 0\n      };\n    }\n    return createVector(v.x / l, v.y / l);\n  };\n  var vectorRotate = function vectorRotate(v, radians, origin) {\n    var cos = Math.cos(radians);\n    var sin = Math.sin(radians);\n    var t = createVector(v.x - origin.x, v.y - origin.y);\n    return createVector(origin.x + cos * t.x - sin * t.y, origin.y + sin * t.x + cos * t.y);\n  };\n  var createVector = function createVector() {\n    var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    return {\n      x: x,\n      y: y\n    };\n  };\n  var getMarkupValue = function getMarkupValue(value, size) {\n    var scalar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n    var axis = arguments.length > 3 ? arguments[3] : undefined;\n    if (typeof value === 'string') {\n      return parseFloat(value) * scalar;\n    }\n    if (typeof value === 'number') {\n      return value * (axis ? size[axis] : Math.min(size.width, size.height));\n    }\n    return;\n  };\n  var getMarkupStyles = function getMarkupStyles(markup, size, scale) {\n    var lineStyle = markup.borderStyle || markup.lineStyle || 'solid';\n    var fill = markup.backgroundColor || markup.fontColor || 'transparent';\n    var stroke = markup.borderColor || markup.lineColor || 'transparent';\n    var strokeWidth = getMarkupValue(markup.borderWidth || markup.lineWidth, size, scale);\n    var lineCap = markup.lineCap || 'round';\n    var lineJoin = markup.lineJoin || 'round';\n    var dashes = typeof lineStyle === 'string' ? '' : lineStyle.map(function (v) {\n      return getMarkupValue(v, size, scale);\n    }).join(',');\n    var opacity = markup.opacity || 1;\n    return {\n      'stroke-linecap': lineCap,\n      'stroke-linejoin': lineJoin,\n      'stroke-width': strokeWidth || 0,\n      'stroke-dasharray': dashes,\n      stroke: stroke,\n      fill: fill,\n      opacity: opacity\n    };\n  };\n  var isDefined = function isDefined(value) {\n    return value != null;\n  };\n  var getMarkupRect = function getMarkupRect(rect, size) {\n    var scalar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n    var left = getMarkupValue(rect.x, size, scalar, 'width') || getMarkupValue(rect.left, size, scalar, 'width');\n    var top = getMarkupValue(rect.y, size, scalar, 'height') || getMarkupValue(rect.top, size, scalar, 'height');\n    var width = getMarkupValue(rect.width, size, scalar, 'width');\n    var height = getMarkupValue(rect.height, size, scalar, 'height');\n    var right = getMarkupValue(rect.right, size, scalar, 'width');\n    var bottom = getMarkupValue(rect.bottom, size, scalar, 'height');\n    if (!isDefined(top)) {\n      if (isDefined(height) && isDefined(bottom)) {\n        top = size.height - height - bottom;\n      } else {\n        top = bottom;\n      }\n    }\n    if (!isDefined(left)) {\n      if (isDefined(width) && isDefined(right)) {\n        left = size.width - width - right;\n      } else {\n        left = right;\n      }\n    }\n    if (!isDefined(width)) {\n      if (isDefined(left) && isDefined(right)) {\n        width = size.width - left - right;\n      } else {\n        width = 0;\n      }\n    }\n    if (!isDefined(height)) {\n      if (isDefined(top) && isDefined(bottom)) {\n        height = size.height - top - bottom;\n      } else {\n        height = 0;\n      }\n    }\n    return {\n      x: left || 0,\n      y: top || 0,\n      width: width || 0,\n      height: height || 0\n    };\n  };\n  var pointsToPathShape = function pointsToPathShape(points) {\n    return points.map(function (point, index) {\n      return ''.concat(index === 0 ? 'M' : 'L', ' ').concat(point.x, ' ').concat(point.y);\n    }).join(' ');\n  };\n  var setAttributes = function setAttributes(element, attr) {\n    return Object.keys(attr).forEach(function (key) {\n      return element.setAttribute(key, attr[key]);\n    });\n  };\n  var ns = 'http://www.w3.org/2000/svg';\n  var svg = function svg(tag, attr) {\n    var element = document.createElementNS(ns, tag);\n    if (attr) {\n      setAttributes(element, attr);\n    }\n    return element;\n  };\n  var updateRect = function updateRect(element) {\n    return setAttributes(element, Object.assign({}, element.rect, element.styles));\n  };\n  var updateEllipse = function updateEllipse(element) {\n    var cx = element.rect.x + element.rect.width * 0.5;\n    var cy = element.rect.y + element.rect.height * 0.5;\n    var rx = element.rect.width * 0.5;\n    var ry = element.rect.height * 0.5;\n    return setAttributes(element, Object.assign({\n      cx: cx,\n      cy: cy,\n      rx: rx,\n      ry: ry\n    }, element.styles));\n  };\n  var IMAGE_FIT_STYLE = {\n    contain: 'xMidYMid meet',\n    cover: 'xMidYMid slice'\n  };\n  var updateImage = function updateImage(element, markup) {\n    setAttributes(element, Object.assign({}, element.rect, element.styles, {\n      preserveAspectRatio: IMAGE_FIT_STYLE[markup.fit] || 'none'\n    }));\n  };\n  var TEXT_ANCHOR = {\n    left: 'start',\n    center: 'middle',\n    right: 'end'\n  };\n  var updateText = function updateText(element, markup, size, scale) {\n    var fontSize = getMarkupValue(markup.fontSize, size, scale);\n    var fontFamily = markup.fontFamily || 'sans-serif';\n    var fontWeight = markup.fontWeight || 'normal';\n    var textAlign = TEXT_ANCHOR[markup.textAlign] || 'start';\n    setAttributes(element, Object.assign({}, element.rect, element.styles, {\n      'stroke-width': 0,\n      'font-weight': fontWeight,\n      'font-size': fontSize,\n      'font-family': fontFamily,\n      'text-anchor': textAlign\n    }));\n\n    // update text\n    if (element.text !== markup.text) {\n      element.text = markup.text;\n      element.textContent = markup.text.length ? markup.text : ' ';\n    }\n  };\n  var updateLine = function updateLine(element, markup, size, scale) {\n    setAttributes(element, Object.assign({}, element.rect, element.styles, {\n      fill: 'none'\n    }));\n    var line = element.childNodes[0];\n    var begin = element.childNodes[1];\n    var end = element.childNodes[2];\n    var origin = element.rect;\n    var target = {\n      x: element.rect.x + element.rect.width,\n      y: element.rect.y + element.rect.height\n    };\n    setAttributes(line, {\n      x1: origin.x,\n      y1: origin.y,\n      x2: target.x,\n      y2: target.y\n    });\n    if (!markup.lineDecoration) return;\n    begin.style.display = 'none';\n    end.style.display = 'none';\n    var v = vectorNormalize({\n      x: target.x - origin.x,\n      y: target.y - origin.y\n    });\n    var l = getMarkupValue(0.05, size, scale);\n    if (markup.lineDecoration.indexOf('arrow-begin') !== -1) {\n      var arrowBeginRotationPoint = vectorMultiply(v, l);\n      var arrowBeginCenter = vectorAdd(origin, arrowBeginRotationPoint);\n      var arrowBeginA = vectorRotate(origin, 2, arrowBeginCenter);\n      var arrowBeginB = vectorRotate(origin, -2, arrowBeginCenter);\n      setAttributes(begin, {\n        style: 'display:block;',\n        d: 'M'.concat(arrowBeginA.x, ',').concat(arrowBeginA.y, ' L').concat(origin.x, ',').concat(origin.y, ' L').concat(arrowBeginB.x, ',').concat(arrowBeginB.y)\n      });\n    }\n    if (markup.lineDecoration.indexOf('arrow-end') !== -1) {\n      var arrowEndRotationPoint = vectorMultiply(v, -l);\n      var arrowEndCenter = vectorAdd(target, arrowEndRotationPoint);\n      var arrowEndA = vectorRotate(target, 2, arrowEndCenter);\n      var arrowEndB = vectorRotate(target, -2, arrowEndCenter);\n      setAttributes(end, {\n        style: 'display:block;',\n        d: 'M'.concat(arrowEndA.x, ',').concat(arrowEndA.y, ' L').concat(target.x, ',').concat(target.y, ' L').concat(arrowEndB.x, ',').concat(arrowEndB.y)\n      });\n    }\n  };\n  var updatePath = function updatePath(element, markup, size, scale) {\n    setAttributes(element, Object.assign({}, element.styles, {\n      fill: 'none',\n      d: pointsToPathShape(markup.points.map(function (point) {\n        return {\n          x: getMarkupValue(point.x, size, scale, 'width'),\n          y: getMarkupValue(point.y, size, scale, 'height')\n        };\n      }))\n    }));\n  };\n  var createShape = function createShape(node) {\n    return function (markup) {\n      return svg(node, {\n        id: markup.id\n      });\n    };\n  };\n  var createImage = function createImage(markup) {\n    var shape = svg('image', {\n      id: markup.id,\n      'stroke-linecap': 'round',\n      'stroke-linejoin': 'round',\n      opacity: '0'\n    });\n    shape.onload = function () {\n      shape.setAttribute('opacity', markup.opacity || 1);\n    };\n    shape.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', markup.src);\n    return shape;\n  };\n  var createLine = function createLine(markup) {\n    var shape = svg('g', {\n      id: markup.id,\n      'stroke-linecap': 'round',\n      'stroke-linejoin': 'round'\n    });\n    var line = svg('line');\n    shape.appendChild(line);\n    var begin = svg('path');\n    shape.appendChild(begin);\n    var end = svg('path');\n    shape.appendChild(end);\n    return shape;\n  };\n  var CREATE_TYPE_ROUTES = {\n    image: createImage,\n    rect: createShape('rect'),\n    ellipse: createShape('ellipse'),\n    text: createShape('text'),\n    path: createShape('path'),\n    line: createLine\n  };\n  var UPDATE_TYPE_ROUTES = {\n    rect: updateRect,\n    ellipse: updateEllipse,\n    image: updateImage,\n    text: updateText,\n    path: updatePath,\n    line: updateLine\n  };\n  var createMarkupByType = function createMarkupByType(type, markup) {\n    return CREATE_TYPE_ROUTES[type](markup);\n  };\n  var updateMarkupByType = function updateMarkupByType(element, type, markup, size, scale) {\n    if (type !== 'path') {\n      element.rect = getMarkupRect(markup, size, scale);\n    }\n    element.styles = getMarkupStyles(markup, size, scale);\n    UPDATE_TYPE_ROUTES[type](element, markup, size, scale);\n  };\n  var MARKUP_RECT = ['x', 'y', 'left', 'top', 'right', 'bottom', 'width', 'height'];\n  var toOptionalFraction = function toOptionalFraction(value) {\n    return typeof value === 'string' && /%/.test(value) ? parseFloat(value) / 100 : value;\n  };\n\n  // adds default markup properties, clones markup\n  var prepareMarkup = function prepareMarkup(markup) {\n    var _markup = _slicedToArray(markup, 2),\n      type = _markup[0],\n      props = _markup[1];\n    var rect = props.points ? {} : MARKUP_RECT.reduce(function (prev, curr) {\n      prev[curr] = toOptionalFraction(props[curr]);\n      return prev;\n    }, {});\n    return [type, Object.assign({\n      zIndex: 0\n    }, props, rect)];\n  };\n  var sortMarkupByZIndex = function sortMarkupByZIndex(a, b) {\n    if (a[1].zIndex > b[1].zIndex) {\n      return 1;\n    }\n    if (a[1].zIndex < b[1].zIndex) {\n      return -1;\n    }\n    return 0;\n  };\n  var createMarkupView = function createMarkupView(_) {\n    return _.utils.createView({\n      name: 'image-preview-markup',\n      tag: 'svg',\n      ignoreRect: true,\n      mixins: {\n        apis: ['width', 'height', 'crop', 'markup', 'resize', 'dirty']\n      },\n      write: function write(_ref) {\n        var root = _ref.root,\n          props = _ref.props;\n        if (!props.dirty) return;\n        var crop = props.crop,\n          resize = props.resize,\n          markup = props.markup;\n        var viewWidth = props.width;\n        var viewHeight = props.height;\n        var cropWidth = crop.width;\n        var cropHeight = crop.height;\n        if (resize) {\n          var _size = resize.size;\n          var outputWidth = _size && _size.width;\n          var outputHeight = _size && _size.height;\n          var outputFit = resize.mode;\n          var outputUpscale = resize.upscale;\n          if (outputWidth && !outputHeight) outputHeight = outputWidth;\n          if (outputHeight && !outputWidth) outputWidth = outputHeight;\n          var shouldUpscale = cropWidth < outputWidth && cropHeight < outputHeight;\n          if (!shouldUpscale || shouldUpscale && outputUpscale) {\n            var scalarWidth = outputWidth / cropWidth;\n            var scalarHeight = outputHeight / cropHeight;\n            if (outputFit === 'force') {\n              cropWidth = outputWidth;\n              cropHeight = outputHeight;\n            } else {\n              var scalar;\n              if (outputFit === 'cover') {\n                scalar = Math.max(scalarWidth, scalarHeight);\n              } else if (outputFit === 'contain') {\n                scalar = Math.min(scalarWidth, scalarHeight);\n              }\n              cropWidth = cropWidth * scalar;\n              cropHeight = cropHeight * scalar;\n            }\n          }\n        }\n        var size = {\n          width: viewWidth,\n          height: viewHeight\n        };\n        root.element.setAttribute('width', size.width);\n        root.element.setAttribute('height', size.height);\n        var scale = Math.min(viewWidth / cropWidth, viewHeight / cropHeight);\n\n        // clear\n        root.element.innerHTML = '';\n\n        // get filter\n        var markupFilter = root.query('GET_IMAGE_PREVIEW_MARKUP_FILTER');\n\n        // draw new\n        markup.filter(markupFilter).map(prepareMarkup).sort(sortMarkupByZIndex).forEach(function (markup) {\n          var _markup = _slicedToArray(markup, 2),\n            type = _markup[0],\n            settings = _markup[1];\n\n          // create\n          var element = createMarkupByType(type, settings);\n\n          // update\n          updateMarkupByType(element, type, settings, size, scale);\n\n          // add\n          root.element.appendChild(element);\n        });\n      }\n    });\n  };\n  var createVector$1 = function createVector(x, y) {\n    return {\n      x: x,\n      y: y\n    };\n  };\n  var vectorDot = function vectorDot(a, b) {\n    return a.x * b.x + a.y * b.y;\n  };\n  var vectorSubtract = function vectorSubtract(a, b) {\n    return createVector$1(a.x - b.x, a.y - b.y);\n  };\n  var vectorDistanceSquared = function vectorDistanceSquared(a, b) {\n    return vectorDot(vectorSubtract(a, b), vectorSubtract(a, b));\n  };\n  var vectorDistance = function vectorDistance(a, b) {\n    return Math.sqrt(vectorDistanceSquared(a, b));\n  };\n  var getOffsetPointOnEdge = function getOffsetPointOnEdge(length, rotation) {\n    var a = length;\n    var A = 1.5707963267948966;\n    var B = rotation;\n    var C = 1.5707963267948966 - rotation;\n    var sinA = Math.sin(A);\n    var sinB = Math.sin(B);\n    var sinC = Math.sin(C);\n    var cosC = Math.cos(C);\n    var ratio = a / sinA;\n    var b = ratio * sinB;\n    var c = ratio * sinC;\n    return createVector$1(cosC * b, cosC * c);\n  };\n  var getRotatedRectSize = function getRotatedRectSize(rect, rotation) {\n    var w = rect.width;\n    var h = rect.height;\n    var hor = getOffsetPointOnEdge(w, rotation);\n    var ver = getOffsetPointOnEdge(h, rotation);\n    var tl = createVector$1(rect.x + Math.abs(hor.x), rect.y - Math.abs(hor.y));\n    var tr = createVector$1(rect.x + rect.width + Math.abs(ver.y), rect.y + Math.abs(ver.x));\n    var bl = createVector$1(rect.x - Math.abs(ver.y), rect.y + rect.height - Math.abs(ver.x));\n    return {\n      width: vectorDistance(tl, tr),\n      height: vectorDistance(tl, bl)\n    };\n  };\n  var calculateCanvasSize = function calculateCanvasSize(image, canvasAspectRatio) {\n    var zoom = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n    var imageAspectRatio = image.height / image.width;\n\n    // determine actual pixels on x and y axis\n    var canvasWidth = 1;\n    var canvasHeight = canvasAspectRatio;\n    var imgWidth = 1;\n    var imgHeight = imageAspectRatio;\n    if (imgHeight > canvasHeight) {\n      imgHeight = canvasHeight;\n      imgWidth = imgHeight / imageAspectRatio;\n    }\n    var scalar = Math.max(canvasWidth / imgWidth, canvasHeight / imgHeight);\n    var width = image.width / (zoom * scalar * imgWidth);\n    var height = width * canvasAspectRatio;\n    return {\n      width: width,\n      height: height\n    };\n  };\n  var getImageRectZoomFactor = function getImageRectZoomFactor(imageRect, cropRect, rotation, center) {\n    // calculate available space round image center position\n    var cx = center.x > 0.5 ? 1 - center.x : center.x;\n    var cy = center.y > 0.5 ? 1 - center.y : center.y;\n    var imageWidth = cx * 2 * imageRect.width;\n    var imageHeight = cy * 2 * imageRect.height;\n\n    // calculate rotated crop rectangle size\n    var rotatedCropSize = getRotatedRectSize(cropRect, rotation);\n\n    // calculate scalar required to fit image\n    return Math.max(rotatedCropSize.width / imageWidth, rotatedCropSize.height / imageHeight);\n  };\n  var getCenteredCropRect = function getCenteredCropRect(container, aspectRatio) {\n    var width = container.width;\n    var height = width * aspectRatio;\n    if (height > container.height) {\n      height = container.height;\n      width = height / aspectRatio;\n    }\n    var x = (container.width - width) * 0.5;\n    var y = (container.height - height) * 0.5;\n    return {\n      x: x,\n      y: y,\n      width: width,\n      height: height\n    };\n  };\n  var getCurrentCropSize = function getCurrentCropSize(imageSize) {\n    var crop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var zoom = crop.zoom,\n      rotation = crop.rotation,\n      center = crop.center,\n      aspectRatio = crop.aspectRatio;\n    if (!aspectRatio) aspectRatio = imageSize.height / imageSize.width;\n    var canvasSize = calculateCanvasSize(imageSize, aspectRatio, zoom);\n    var canvasCenter = {\n      x: canvasSize.width * 0.5,\n      y: canvasSize.height * 0.5\n    };\n    var stage = {\n      x: 0,\n      y: 0,\n      width: canvasSize.width,\n      height: canvasSize.height,\n      center: canvasCenter\n    };\n    var shouldLimit = typeof crop.scaleToFit === 'undefined' || crop.scaleToFit;\n    var stageZoomFactor = getImageRectZoomFactor(imageSize, getCenteredCropRect(stage, aspectRatio), rotation, shouldLimit ? center : {\n      x: 0.5,\n      y: 0.5\n    });\n    var scale = zoom * stageZoomFactor;\n\n    // start drawing\n    return {\n      widthFloat: canvasSize.width / scale,\n      heightFloat: canvasSize.height / scale,\n      width: Math.round(canvasSize.width / scale),\n      height: Math.round(canvasSize.height / scale)\n    };\n  };\n  var IMAGE_SCALE_SPRING_PROPS = {\n    type: 'spring',\n    stiffness: 0.5,\n    damping: 0.45,\n    mass: 10\n  };\n\n  // does horizontal and vertical flipping\n  var createBitmapView = function createBitmapView(_) {\n    return _.utils.createView({\n      name: 'image-bitmap',\n      ignoreRect: true,\n      mixins: {\n        styles: ['scaleX', 'scaleY']\n      },\n      create: function create(_ref) {\n        var root = _ref.root,\n          props = _ref.props;\n        root.appendChild(props.image);\n      }\n    });\n  };\n\n  // shifts and rotates image\n  var createImageCanvasWrapper = function createImageCanvasWrapper(_) {\n    return _.utils.createView({\n      name: 'image-canvas-wrapper',\n      tag: 'div',\n      ignoreRect: true,\n      mixins: {\n        apis: ['crop', 'width', 'height'],\n        styles: ['originX', 'originY', 'translateX', 'translateY', 'scaleX', 'scaleY', 'rotateZ'],\n        animations: {\n          originX: IMAGE_SCALE_SPRING_PROPS,\n          originY: IMAGE_SCALE_SPRING_PROPS,\n          scaleX: IMAGE_SCALE_SPRING_PROPS,\n          scaleY: IMAGE_SCALE_SPRING_PROPS,\n          translateX: IMAGE_SCALE_SPRING_PROPS,\n          translateY: IMAGE_SCALE_SPRING_PROPS,\n          rotateZ: IMAGE_SCALE_SPRING_PROPS\n        }\n      },\n      create: function create(_ref2) {\n        var root = _ref2.root,\n          props = _ref2.props;\n        props.width = props.image.width;\n        props.height = props.image.height;\n        root.ref.bitmap = root.appendChildView(root.createChildView(createBitmapView(_), {\n          image: props.image\n        }));\n      },\n      write: function write(_ref3) {\n        var root = _ref3.root,\n          props = _ref3.props;\n        var flip = props.crop.flip;\n        var bitmap = root.ref.bitmap;\n        bitmap.scaleX = flip.horizontal ? -1 : 1;\n        bitmap.scaleY = flip.vertical ? -1 : 1;\n      }\n    });\n  };\n\n  // clips canvas to correct aspect ratio\n  var createClipView = function createClipView(_) {\n    return _.utils.createView({\n      name: 'image-clip',\n      tag: 'div',\n      ignoreRect: true,\n      mixins: {\n        apis: ['crop', 'markup', 'resize', 'width', 'height', 'dirty', 'background'],\n        styles: ['width', 'height', 'opacity'],\n        animations: {\n          opacity: {\n            type: 'tween',\n            duration: 250\n          }\n        }\n      },\n      didWriteView: function didWriteView(_ref4) {\n        var root = _ref4.root,\n          props = _ref4.props;\n        if (!props.background) return;\n        root.element.style.backgroundColor = props.background;\n      },\n      create: function create(_ref5) {\n        var root = _ref5.root,\n          props = _ref5.props;\n        root.ref.image = root.appendChildView(root.createChildView(createImageCanvasWrapper(_), Object.assign({}, props)));\n        root.ref.createMarkup = function () {\n          if (root.ref.markup) return;\n          root.ref.markup = root.appendChildView(root.createChildView(createMarkupView(_), Object.assign({}, props)));\n        };\n        root.ref.destroyMarkup = function () {\n          if (!root.ref.markup) return;\n          root.removeChildView(root.ref.markup);\n          root.ref.markup = null;\n        };\n\n        // set up transparency grid\n        var transparencyIndicator = root.query('GET_IMAGE_PREVIEW_TRANSPARENCY_INDICATOR');\n        if (transparencyIndicator === null) return;\n\n        // grid pattern\n        if (transparencyIndicator === 'grid') {\n          root.element.dataset.transparencyIndicator = transparencyIndicator;\n        }\n        // basic color\n        else {\n          root.element.dataset.transparencyIndicator = 'color';\n        }\n      },\n      write: function write(_ref6) {\n        var root = _ref6.root,\n          props = _ref6.props,\n          shouldOptimize = _ref6.shouldOptimize;\n        var crop = props.crop,\n          markup = props.markup,\n          resize = props.resize,\n          dirty = props.dirty,\n          width = props.width,\n          height = props.height;\n        root.ref.image.crop = crop;\n        var stage = {\n          x: 0,\n          y: 0,\n          width: width,\n          height: height,\n          center: {\n            x: width * 0.5,\n            y: height * 0.5\n          }\n        };\n        var image = {\n          width: root.ref.image.width,\n          height: root.ref.image.height\n        };\n        var origin = {\n          x: crop.center.x * image.width,\n          y: crop.center.y * image.height\n        };\n        var translation = {\n          x: stage.center.x - image.width * crop.center.x,\n          y: stage.center.y - image.height * crop.center.y\n        };\n        var rotation = Math.PI * 2 + crop.rotation % (Math.PI * 2);\n        var cropAspectRatio = crop.aspectRatio || image.height / image.width;\n        var shouldLimit = typeof crop.scaleToFit === 'undefined' || crop.scaleToFit;\n        var stageZoomFactor = getImageRectZoomFactor(image, getCenteredCropRect(stage, cropAspectRatio), rotation, shouldLimit ? crop.center : {\n          x: 0.5,\n          y: 0.5\n        });\n        var scale = crop.zoom * stageZoomFactor;\n\n        // update markup view\n        if (markup && markup.length) {\n          root.ref.createMarkup();\n          root.ref.markup.width = width;\n          root.ref.markup.height = height;\n          root.ref.markup.resize = resize;\n          root.ref.markup.dirty = dirty;\n          root.ref.markup.markup = markup;\n          root.ref.markup.crop = getCurrentCropSize(image, crop);\n        } else if (root.ref.markup) {\n          root.ref.destroyMarkup();\n        }\n\n        // update image view\n        var imageView = root.ref.image;\n\n        // don't update clip layout\n        if (shouldOptimize) {\n          imageView.originX = null;\n          imageView.originY = null;\n          imageView.translateX = null;\n          imageView.translateY = null;\n          imageView.rotateZ = null;\n          imageView.scaleX = null;\n          imageView.scaleY = null;\n          return;\n        }\n        imageView.originX = origin.x;\n        imageView.originY = origin.y;\n        imageView.translateX = translation.x;\n        imageView.translateY = translation.y;\n        imageView.rotateZ = rotation;\n        imageView.scaleX = scale;\n        imageView.scaleY = scale;\n      }\n    });\n  };\n  var createImageView = function createImageView(_) {\n    return _.utils.createView({\n      name: 'image-preview',\n      tag: 'div',\n      ignoreRect: true,\n      mixins: {\n        apis: ['image', 'crop', 'markup', 'resize', 'dirty', 'background'],\n        styles: ['translateY', 'scaleX', 'scaleY', 'opacity'],\n        animations: {\n          scaleX: IMAGE_SCALE_SPRING_PROPS,\n          scaleY: IMAGE_SCALE_SPRING_PROPS,\n          translateY: IMAGE_SCALE_SPRING_PROPS,\n          opacity: {\n            type: 'tween',\n            duration: 400\n          }\n        }\n      },\n      create: function create(_ref7) {\n        var root = _ref7.root,\n          props = _ref7.props;\n        root.ref.clip = root.appendChildView(root.createChildView(createClipView(_), {\n          id: props.id,\n          image: props.image,\n          crop: props.crop,\n          markup: props.markup,\n          resize: props.resize,\n          dirty: props.dirty,\n          background: props.background\n        }));\n      },\n      write: function write(_ref8) {\n        var root = _ref8.root,\n          props = _ref8.props,\n          shouldOptimize = _ref8.shouldOptimize;\n        var clip = root.ref.clip;\n        var image = props.image,\n          crop = props.crop,\n          markup = props.markup,\n          resize = props.resize,\n          dirty = props.dirty;\n        clip.crop = crop;\n        clip.markup = markup;\n        clip.resize = resize;\n        clip.dirty = dirty;\n\n        // don't update clip layout\n        clip.opacity = shouldOptimize ? 0 : 1;\n\n        // don't re-render if optimizing or hidden (width will be zero resulting in weird animations)\n        if (shouldOptimize || root.rect.element.hidden) return;\n\n        // calculate scaled preview image size\n        var imageAspectRatio = image.height / image.width;\n        var aspectRatio = crop.aspectRatio || imageAspectRatio;\n\n        // calculate container size\n        var containerWidth = root.rect.inner.width;\n        var containerHeight = root.rect.inner.height;\n        var fixedPreviewHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n        var minPreviewHeight = root.query('GET_IMAGE_PREVIEW_MIN_HEIGHT');\n        var maxPreviewHeight = root.query('GET_IMAGE_PREVIEW_MAX_HEIGHT');\n        var panelAspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n        var allowMultiple = root.query('GET_ALLOW_MULTIPLE');\n        if (panelAspectRatio && !allowMultiple) {\n          fixedPreviewHeight = containerWidth * panelAspectRatio;\n          aspectRatio = panelAspectRatio;\n        }\n\n        // determine clip width and height\n        var clipHeight = fixedPreviewHeight !== null ? fixedPreviewHeight : Math.max(minPreviewHeight, Math.min(containerWidth * aspectRatio, maxPreviewHeight));\n        var clipWidth = clipHeight / aspectRatio;\n        if (clipWidth > containerWidth) {\n          clipWidth = containerWidth;\n          clipHeight = clipWidth * aspectRatio;\n        }\n        if (clipHeight > containerHeight) {\n          clipHeight = containerHeight;\n          clipWidth = containerHeight / aspectRatio;\n        }\n        clip.width = clipWidth;\n        clip.height = clipHeight;\n      }\n    });\n  };\n  var SVG_MASK = '<svg width=\"500\" height=\"200\" viewBox=\"0 0 500 200\" preserveAspectRatio=\"none\">\\n    <defs>\\n        <radialGradient id=\"gradient-__UID__\" cx=\".5\" cy=\"1.25\" r=\"1.15\">\\n            <stop offset=\\'50%\\' stop-color=\\'#000000\\'/>\\n            <stop offset=\\'56%\\' stop-color=\\'#0a0a0a\\'/>\\n            <stop offset=\\'63%\\' stop-color=\\'#262626\\'/>\\n            <stop offset=\\'69%\\' stop-color=\\'#4f4f4f\\'/>\\n            <stop offset=\\'75%\\' stop-color=\\'#808080\\'/>\\n            <stop offset=\\'81%\\' stop-color=\\'#b1b1b1\\'/>\\n            <stop offset=\\'88%\\' stop-color=\\'#dadada\\'/>\\n            <stop offset=\\'94%\\' stop-color=\\'#f6f6f6\\'/>\\n            <stop offset=\\'100%\\' stop-color=\\'#ffffff\\'/>\\n        </radialGradient>\\n        <mask id=\"mask-__UID__\">\\n            <rect x=\"0\" y=\"0\" width=\"500\" height=\"200\" fill=\"url(#gradient-__UID__)\"></rect>\\n        </mask>\\n    </defs>\\n    <rect x=\"0\" width=\"500\" height=\"200\" fill=\"currentColor\" mask=\"url(#mask-__UID__)\"></rect>\\n</svg>';\n  var SVGMaskUniqueId = 0;\n  var createImageOverlayView = function createImageOverlayView(fpAPI) {\n    return fpAPI.utils.createView({\n      name: 'image-preview-overlay',\n      tag: 'div',\n      ignoreRect: true,\n      create: function create(_ref) {\n        var root = _ref.root,\n          props = _ref.props;\n        var mask = SVG_MASK;\n        if (document.querySelector('base')) {\n          var url = new URL(window.location.href.replace(window.location.hash, '')).href;\n          mask = mask.replace(/url\\(\\#/g, 'url(' + url + '#');\n        }\n        SVGMaskUniqueId++;\n        root.element.classList.add('filepond--image-preview-overlay-'.concat(props.status));\n        root.element.innerHTML = mask.replace(/__UID__/g, SVGMaskUniqueId);\n      },\n      mixins: {\n        styles: ['opacity'],\n        animations: {\n          opacity: {\n            type: 'spring',\n            mass: 25\n          }\n        }\n      }\n    });\n  };\n\n  /**\n   * Bitmap Worker\n   */\n  var BitmapWorker = function BitmapWorker() {\n    self.onmessage = function (e) {\n      createImageBitmap(e.data.message.file).then(function (bitmap) {\n        self.postMessage({\n          id: e.data.id,\n          message: bitmap\n        }, [bitmap]);\n      });\n    };\n  };\n\n  /**\n   * ColorMatrix Worker\n   */\n  var ColorMatrixWorker = function ColorMatrixWorker() {\n    self.onmessage = function (e) {\n      var imageData = e.data.message.imageData;\n      var matrix = e.data.message.colorMatrix;\n      var data = imageData.data;\n      var l = data.length;\n      var m11 = matrix[0];\n      var m12 = matrix[1];\n      var m13 = matrix[2];\n      var m14 = matrix[3];\n      var m15 = matrix[4];\n      var m21 = matrix[5];\n      var m22 = matrix[6];\n      var m23 = matrix[7];\n      var m24 = matrix[8];\n      var m25 = matrix[9];\n      var m31 = matrix[10];\n      var m32 = matrix[11];\n      var m33 = matrix[12];\n      var m34 = matrix[13];\n      var m35 = matrix[14];\n      var m41 = matrix[15];\n      var m42 = matrix[16];\n      var m43 = matrix[17];\n      var m44 = matrix[18];\n      var m45 = matrix[19];\n      var index = 0,\n        r = 0.0,\n        g = 0.0,\n        b = 0.0,\n        a = 0.0;\n      for (; index < l; index += 4) {\n        r = data[index] / 255;\n        g = data[index + 1] / 255;\n        b = data[index + 2] / 255;\n        a = data[index + 3] / 255;\n        data[index] = Math.max(0, Math.min((r * m11 + g * m12 + b * m13 + a * m14 + m15) * 255, 255));\n        data[index + 1] = Math.max(0, Math.min((r * m21 + g * m22 + b * m23 + a * m24 + m25) * 255, 255));\n        data[index + 2] = Math.max(0, Math.min((r * m31 + g * m32 + b * m33 + a * m34 + m35) * 255, 255));\n        data[index + 3] = Math.max(0, Math.min((r * m41 + g * m42 + b * m43 + a * m44 + m45) * 255, 255));\n      }\n      self.postMessage({\n        id: e.data.id,\n        message: imageData\n      }, [imageData.data.buffer]);\n    };\n  };\n  var getImageSize = function getImageSize(url, cb) {\n    var image = new Image();\n    image.onload = function () {\n      var width = image.naturalWidth;\n      var height = image.naturalHeight;\n      image = null;\n      cb(width, height);\n    };\n    image.src = url;\n  };\n  var transforms = {\n    1: function _() {\n      return [1, 0, 0, 1, 0, 0];\n    },\n    2: function _(width) {\n      return [-1, 0, 0, 1, width, 0];\n    },\n    3: function _(width, height) {\n      return [-1, 0, 0, -1, width, height];\n    },\n    4: function _(width, height) {\n      return [1, 0, 0, -1, 0, height];\n    },\n    5: function _() {\n      return [0, 1, 1, 0, 0, 0];\n    },\n    6: function _(width, height) {\n      return [0, 1, -1, 0, height, 0];\n    },\n    7: function _(width, height) {\n      return [0, -1, -1, 0, height, width];\n    },\n    8: function _(width) {\n      return [0, -1, 1, 0, 0, width];\n    }\n  };\n  var fixImageOrientation = function fixImageOrientation(ctx, width, height, orientation) {\n    // no orientation supplied\n    if (orientation === -1) {\n      return;\n    }\n    ctx.transform.apply(ctx, transforms[orientation](width, height));\n  };\n\n  // draws the preview image to canvas\n  var createPreviewImage = function createPreviewImage(data, width, height, orientation) {\n    // can't draw on half pixels\n    width = Math.round(width);\n    height = Math.round(height);\n\n    // draw image\n    var canvas = document.createElement('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    var ctx = canvas.getContext('2d');\n\n    // if is rotated incorrectly swap width and height\n    if (orientation >= 5 && orientation <= 8) {\n      var _ref = [height, width];\n      width = _ref[0];\n      height = _ref[1];\n    }\n\n    // correct image orientation\n    fixImageOrientation(ctx, width, height, orientation);\n\n    // draw the image\n    ctx.drawImage(data, 0, 0, width, height);\n    return canvas;\n  };\n  var isBitmap = function isBitmap(file) {\n    return /^image/.test(file.type) && !/svg/.test(file.type);\n  };\n  var MAX_WIDTH = 10;\n  var MAX_HEIGHT = 10;\n  var calculateAverageColor = function calculateAverageColor(image) {\n    var scalar = Math.min(MAX_WIDTH / image.width, MAX_HEIGHT / image.height);\n    var canvas = document.createElement('canvas');\n    var ctx = canvas.getContext('2d');\n    var width = canvas.width = Math.ceil(image.width * scalar);\n    var height = canvas.height = Math.ceil(image.height * scalar);\n    ctx.drawImage(image, 0, 0, width, height);\n    var data = null;\n    try {\n      data = ctx.getImageData(0, 0, width, height).data;\n    } catch (e) {\n      return null;\n    }\n    var l = data.length;\n    var r = 0;\n    var g = 0;\n    var b = 0;\n    var i = 0;\n    for (; i < l; i += 4) {\n      r += data[i] * data[i];\n      g += data[i + 1] * data[i + 1];\n      b += data[i + 2] * data[i + 2];\n    }\n    r = averageColor(r, l);\n    g = averageColor(g, l);\n    b = averageColor(b, l);\n    return {\n      r: r,\n      g: g,\n      b: b\n    };\n  };\n  var averageColor = function averageColor(c, l) {\n    return Math.floor(Math.sqrt(c / (l / 4)));\n  };\n  var cloneCanvas = function cloneCanvas(origin, target) {\n    target = target || document.createElement('canvas');\n    target.width = origin.width;\n    target.height = origin.height;\n    var ctx = target.getContext('2d');\n    ctx.drawImage(origin, 0, 0);\n    return target;\n  };\n  var cloneImageData = function cloneImageData(imageData) {\n    var id;\n    try {\n      id = new ImageData(imageData.width, imageData.height);\n    } catch (e) {\n      var canvas = document.createElement('canvas');\n      var ctx = canvas.getContext('2d');\n      id = ctx.createImageData(imageData.width, imageData.height);\n    }\n    id.data.set(new Uint8ClampedArray(imageData.data));\n    return id;\n  };\n  var loadImage = function loadImage(url) {\n    return new Promise(function (resolve, reject) {\n      var img = new Image();\n      img.crossOrigin = 'Anonymous';\n      img.onload = function () {\n        resolve(img);\n      };\n      img.onerror = function (e) {\n        reject(e);\n      };\n      img.src = url;\n    });\n  };\n  var createImageWrapperView = function createImageWrapperView(_) {\n    // create overlay view\n    var OverlayView = createImageOverlayView(_);\n    var ImageView = createImageView(_);\n    var createWorker = _.utils.createWorker;\n    var applyFilter = function applyFilter(root, filter, target) {\n      return new Promise(function (resolve) {\n        // will store image data for future filter updates\n        if (!root.ref.imageData) {\n          root.ref.imageData = target.getContext('2d').getImageData(0, 0, target.width, target.height);\n        }\n\n        // get image data reference\n        var imageData = cloneImageData(root.ref.imageData);\n        if (!filter || filter.length !== 20) {\n          target.getContext('2d').putImageData(imageData, 0, 0);\n          return resolve();\n        }\n        var worker = createWorker(ColorMatrixWorker);\n        worker.post({\n          imageData: imageData,\n          colorMatrix: filter\n        }, function (response) {\n          // apply filtered colors\n          target.getContext('2d').putImageData(response, 0, 0);\n\n          // stop worker\n          worker.terminate();\n\n          // done!\n          resolve();\n        }, [imageData.data.buffer]);\n      });\n    };\n    var removeImageView = function removeImageView(root, imageView) {\n      root.removeChildView(imageView);\n      imageView.image.width = 1;\n      imageView.image.height = 1;\n      imageView._destroy();\n    };\n\n    // remove an image\n    var shiftImage = function shiftImage(_ref) {\n      var root = _ref.root;\n      var imageView = root.ref.images.shift();\n      imageView.opacity = 0;\n      imageView.translateY = -15;\n      root.ref.imageViewBin.push(imageView);\n      return imageView;\n    };\n\n    // add new image\n    var pushImage = function pushImage(_ref2) {\n      var root = _ref2.root,\n        props = _ref2.props,\n        image = _ref2.image;\n      var id = props.id;\n      var item = root.query('GET_ITEM', {\n        id: id\n      });\n      if (!item) return;\n      var crop = item.getMetadata('crop') || {\n        center: {\n          x: 0.5,\n          y: 0.5\n        },\n        flip: {\n          horizontal: false,\n          vertical: false\n        },\n        zoom: 1,\n        rotation: 0,\n        aspectRatio: null\n      };\n      var background = root.query('GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR');\n      var markup;\n      var resize;\n      var dirty = false;\n      if (root.query('GET_IMAGE_PREVIEW_MARKUP_SHOW')) {\n        markup = item.getMetadata('markup') || [];\n        resize = item.getMetadata('resize');\n        dirty = true;\n      }\n\n      // append image presenter\n      var imageView = root.appendChildView(root.createChildView(ImageView, {\n        id: id,\n        image: image,\n        crop: crop,\n        resize: resize,\n        markup: markup,\n        dirty: dirty,\n        background: background,\n        opacity: 0,\n        scaleX: 1.15,\n        scaleY: 1.15,\n        translateY: 15\n      }), root.childViews.length);\n      root.ref.images.push(imageView);\n\n      // reveal the preview image\n      imageView.opacity = 1;\n      imageView.scaleX = 1;\n      imageView.scaleY = 1;\n      imageView.translateY = 0;\n\n      // the preview is now ready to be drawn\n      setTimeout(function () {\n        root.dispatch('DID_IMAGE_PREVIEW_SHOW', {\n          id: id\n        });\n      }, 250);\n    };\n    var updateImage = function updateImage(_ref3) {\n      var root = _ref3.root,\n        props = _ref3.props;\n      var item = root.query('GET_ITEM', {\n        id: props.id\n      });\n      if (!item) return;\n      var imageView = root.ref.images[root.ref.images.length - 1];\n      imageView.crop = item.getMetadata('crop');\n      imageView.background = root.query('GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR');\n      if (root.query('GET_IMAGE_PREVIEW_MARKUP_SHOW')) {\n        imageView.dirty = true;\n        imageView.resize = item.getMetadata('resize');\n        imageView.markup = item.getMetadata('markup');\n      }\n    };\n\n    // replace image preview\n    var didUpdateItemMetadata = function didUpdateItemMetadata(_ref4) {\n      var root = _ref4.root,\n        props = _ref4.props,\n        action = _ref4.action;\n      // only filter and crop trigger redraw\n      if (!/crop|filter|markup|resize/.test(action.change.key)) return;\n\n      // no images to update, exit\n      if (!root.ref.images.length) return;\n\n      // no item found, exit\n      var item = root.query('GET_ITEM', {\n        id: props.id\n      });\n      if (!item) return;\n\n      // for now, update existing image when filtering\n      if (/filter/.test(action.change.key)) {\n        var imageView = root.ref.images[root.ref.images.length - 1];\n        applyFilter(root, action.change.value, imageView.image);\n        return;\n      }\n      if (/crop|markup|resize/.test(action.change.key)) {\n        var crop = item.getMetadata('crop');\n        var image = root.ref.images[root.ref.images.length - 1];\n\n        // if aspect ratio has changed, we need to create a new image\n        if (crop && crop.aspectRatio && image.crop && image.crop.aspectRatio && Math.abs(crop.aspectRatio - image.crop.aspectRatio) > 0.00001) {\n          var _imageView = shiftImage({\n            root: root\n          });\n          pushImage({\n            root: root,\n            props: props,\n            image: cloneCanvas(_imageView.image)\n          });\n        }\n        // if not, we can update the current image\n        else {\n          updateImage({\n            root: root,\n            props: props\n          });\n        }\n      }\n    };\n    var canCreateImageBitmap = function canCreateImageBitmap(file) {\n      // Firefox versions before 58 will freeze when running createImageBitmap\n      // in a Web Worker so we detect those versions and return false for support\n      var userAgent = window.navigator.userAgent;\n      var isFirefox = userAgent.match(/Firefox\\/([0-9]+)\\./);\n      var firefoxVersion = isFirefox ? parseInt(isFirefox[1]) : null;\n      if (firefoxVersion <= 58) return false;\n      return 'createImageBitmap' in window && isBitmap(file);\n    };\n\n    /**\n     * Write handler for when preview container has been created\n     */\n    var didCreatePreviewContainer = function didCreatePreviewContainer(_ref5) {\n      var root = _ref5.root,\n        props = _ref5.props;\n      var id = props.id;\n\n      // we need to get the file data to determine the eventual image size\n      var item = root.query('GET_ITEM', id);\n      if (!item) return;\n\n      // get url to file (we'll revoke it later on when done)\n      var fileURL = URL.createObjectURL(item.file);\n\n      // determine image size of this item\n      getImageSize(fileURL, function (width, height) {\n        // we can now scale the panel to the final size\n        root.dispatch('DID_IMAGE_PREVIEW_CALCULATE_SIZE', {\n          id: id,\n          width: width,\n          height: height\n        });\n      });\n    };\n    var drawPreview = function drawPreview(_ref6) {\n      var root = _ref6.root,\n        props = _ref6.props;\n      var id = props.id;\n\n      // we need to get the file data to determine the eventual image size\n      var item = root.query('GET_ITEM', id);\n      if (!item) return;\n\n      // get url to file (we'll revoke it later on when done)\n      var fileURL = URL.createObjectURL(item.file);\n\n      // fallback\n      var loadPreviewFallback = function loadPreviewFallback() {\n        // let's scale the image in the main thread :(\n        loadImage(fileURL).then(previewImageLoaded);\n      };\n\n      // image is now ready\n      var previewImageLoaded = function previewImageLoaded(imageData) {\n        // the file url is no longer needed\n        URL.revokeObjectURL(fileURL);\n\n        // draw the scaled down version here and use that as source so bitmapdata can be closed\n        // orientation info\n        var exif = item.getMetadata('exif') || {};\n        var orientation = exif.orientation || -1;\n\n        // get width and height from action, and swap if orientation is incorrect\n        var width = imageData.width,\n          height = imageData.height;\n\n        // if no width or height, just return early.\n        if (!width || !height) return;\n        if (orientation >= 5 && orientation <= 8) {\n          var _ref7 = [height, width];\n          width = _ref7[0];\n          height = _ref7[1];\n        }\n\n        // scale canvas based on pixel density\n        // we multiply by .75 as that creates smaller but still clear images on screens with high res displays\n        var pixelDensityFactor = Math.max(1, window.devicePixelRatio * 0.75);\n\n        // we want as much pixels to work with as possible,\n        // this multiplies the minimum image resolution,\n        // so when zooming in it doesn't get too blurry\n        var zoomFactor = root.query('GET_IMAGE_PREVIEW_ZOOM_FACTOR');\n\n        // imaeg scale factor\n        var scaleFactor = zoomFactor * pixelDensityFactor;\n\n        // calculate scaled preview image size\n        var previewImageRatio = height / width;\n\n        // calculate image preview height and width\n        var previewContainerWidth = root.rect.element.width;\n        var previewContainerHeight = root.rect.element.height;\n        var imageWidth = previewContainerWidth;\n        var imageHeight = imageWidth * previewImageRatio;\n        if (previewImageRatio > 1) {\n          imageWidth = Math.min(width, previewContainerWidth * scaleFactor);\n          imageHeight = imageWidth * previewImageRatio;\n        } else {\n          imageHeight = Math.min(height, previewContainerHeight * scaleFactor);\n          imageWidth = imageHeight / previewImageRatio;\n        }\n\n        // transfer to image tag so no canvas memory wasted on iOS\n        var previewImage = createPreviewImage(imageData, imageWidth, imageHeight, orientation);\n\n        // done\n        var done = function done() {\n          // calculate average image color, disabled for now\n          var averageColor = root.query('GET_IMAGE_PREVIEW_CALCULATE_AVERAGE_IMAGE_COLOR') ? calculateAverageColor(data) : null;\n          item.setMetadata('color', averageColor, true);\n\n          // data has been transferred to canvas ( if was ImageBitmap )\n          if ('close' in imageData) {\n            imageData.close();\n          }\n\n          // show the overlay\n          root.ref.overlayShadow.opacity = 1;\n\n          // create the first image\n          pushImage({\n            root: root,\n            props: props,\n            image: previewImage\n          });\n        };\n\n        // apply filter\n        var filter = item.getMetadata('filter');\n        if (filter) {\n          applyFilter(root, filter, previewImage).then(done);\n        } else {\n          done();\n        }\n      };\n\n      // if we support scaling using createImageBitmap we use a worker\n      if (canCreateImageBitmap(item.file)) {\n        // let's scale the image in a worker\n        var worker = createWorker(BitmapWorker);\n        worker.post({\n          file: item.file\n        }, function (imageBitmap) {\n          // destroy worker\n          worker.terminate();\n\n          // no bitmap returned, must be something wrong,\n          // try the oldschool way\n          if (!imageBitmap) {\n            loadPreviewFallback();\n            return;\n          }\n\n          // yay we got our bitmap, let's continue showing the preview\n          previewImageLoaded(imageBitmap);\n        });\n      } else {\n        // create fallback preview\n        loadPreviewFallback();\n      }\n    };\n\n    /**\n     * Write handler for when the preview image is ready to be animated\n     */\n    var didDrawPreview = function didDrawPreview(_ref8) {\n      var root = _ref8.root;\n      // get last added image\n      var image = root.ref.images[root.ref.images.length - 1];\n      image.translateY = 0;\n      image.scaleX = 1.0;\n      image.scaleY = 1.0;\n      image.opacity = 1;\n    };\n\n    /**\n     * Write handler for when the preview has been loaded\n     */\n    var restoreOverlay = function restoreOverlay(_ref9) {\n      var root = _ref9.root;\n      root.ref.overlayShadow.opacity = 1;\n      root.ref.overlayError.opacity = 0;\n      root.ref.overlaySuccess.opacity = 0;\n    };\n    var didThrowError = function didThrowError(_ref10) {\n      var root = _ref10.root;\n      root.ref.overlayShadow.opacity = 0.25;\n      root.ref.overlayError.opacity = 1;\n    };\n    var didCompleteProcessing = function didCompleteProcessing(_ref11) {\n      var root = _ref11.root;\n      root.ref.overlayShadow.opacity = 0.25;\n      root.ref.overlaySuccess.opacity = 1;\n    };\n\n    /**\n     * Constructor\n     */\n    var create = function create(_ref12) {\n      var root = _ref12.root;\n      // image view\n      root.ref.images = [];\n\n      // the preview image data (we need this to filter the image)\n      root.ref.imageData = null;\n\n      // image bin\n      root.ref.imageViewBin = [];\n\n      // image overlays\n      root.ref.overlayShadow = root.appendChildView(root.createChildView(OverlayView, {\n        opacity: 0,\n        status: 'idle'\n      }));\n      root.ref.overlaySuccess = root.appendChildView(root.createChildView(OverlayView, {\n        opacity: 0,\n        status: 'success'\n      }));\n      root.ref.overlayError = root.appendChildView(root.createChildView(OverlayView, {\n        opacity: 0,\n        status: 'failure'\n      }));\n    };\n    return _.utils.createView({\n      name: 'image-preview-wrapper',\n      create: create,\n      styles: ['height'],\n      apis: ['height'],\n      destroy: function destroy(_ref13) {\n        var root = _ref13.root;\n        // we resize the image so memory on iOS 12 is released more quickly (it seems)\n        root.ref.images.forEach(function (imageView) {\n          imageView.image.width = 1;\n          imageView.image.height = 1;\n        });\n      },\n      didWriteView: function didWriteView(_ref14) {\n        var root = _ref14.root;\n        root.ref.images.forEach(function (imageView) {\n          imageView.dirty = false;\n        });\n      },\n      write: _.utils.createRoute({\n        // image preview stated\n        DID_IMAGE_PREVIEW_DRAW: didDrawPreview,\n        DID_IMAGE_PREVIEW_CONTAINER_CREATE: didCreatePreviewContainer,\n        DID_FINISH_CALCULATE_PREVIEWSIZE: drawPreview,\n        DID_UPDATE_ITEM_METADATA: didUpdateItemMetadata,\n        // file states\n        DID_THROW_ITEM_LOAD_ERROR: didThrowError,\n        DID_THROW_ITEM_PROCESSING_ERROR: didThrowError,\n        DID_THROW_ITEM_INVALID: didThrowError,\n        DID_COMPLETE_ITEM_PROCESSING: didCompleteProcessing,\n        DID_START_ITEM_PROCESSING: restoreOverlay,\n        DID_REVERT_ITEM_PROCESSING: restoreOverlay\n      }, function (_ref15) {\n        var root = _ref15.root;\n        // views on death row\n        var viewsToRemove = root.ref.imageViewBin.filter(function (imageView) {\n          return imageView.opacity === 0;\n        });\n\n        // views to retain\n        root.ref.imageViewBin = root.ref.imageViewBin.filter(function (imageView) {\n          return imageView.opacity > 0;\n        });\n\n        // remove these views\n        viewsToRemove.forEach(function (imageView) {\n          return removeImageView(root, imageView);\n        });\n        viewsToRemove.length = 0;\n      })\n    });\n  };\n\n  /**\n   * Image Preview Plugin\n   */\n  var plugin = function plugin(fpAPI) {\n    var addFilter = fpAPI.addFilter,\n      utils = fpAPI.utils;\n    var Type = utils.Type,\n      createRoute = utils.createRoute,\n      isFile = utils.isFile;\n\n    // imagePreviewView\n    var imagePreviewView = createImageWrapperView(fpAPI);\n\n    // called for each view that is created right after the 'create' method\n    addFilter('CREATE_VIEW', function (viewAPI) {\n      // get reference to created view\n      var is = viewAPI.is,\n        view = viewAPI.view,\n        query = viewAPI.query;\n\n      // only hook up to item view and only if is enabled for this cropper\n      if (!is('file') || !query('GET_ALLOW_IMAGE_PREVIEW')) return;\n\n      // create the image preview plugin, but only do so if the item is an image\n      var didLoadItem = function didLoadItem(_ref) {\n        var root = _ref.root,\n          props = _ref.props;\n        var id = props.id;\n        var item = query('GET_ITEM', id);\n\n        // item could theoretically have been removed in the mean time\n        if (!item || !isFile(item.file) || item.archived) return;\n\n        // get the file object\n        var file = item.file;\n\n        // exit if this is not an image\n        if (!isPreviewableImage(file)) return;\n\n        // test if is filtered\n        if (!query('GET_IMAGE_PREVIEW_FILTER_ITEM')(item)) return;\n\n        // exit if image size is too high and no createImageBitmap support\n        // this would simply bring the browser to its knees and that is not what we want\n        var supportsCreateImageBitmap = ('createImageBitmap' in (window || {}));\n        var maxPreviewFileSize = query('GET_IMAGE_PREVIEW_MAX_FILE_SIZE');\n        if (!supportsCreateImageBitmap && maxPreviewFileSize && file.size > maxPreviewFileSize) return;\n\n        // set preview view\n        root.ref.imagePreview = view.appendChildView(view.createChildView(imagePreviewView, {\n          id: id\n        }));\n\n        // update height if is fixed\n        var fixedPreviewHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n        if (fixedPreviewHeight) {\n          root.dispatch('DID_UPDATE_PANEL_HEIGHT', {\n            id: item.id,\n            height: fixedPreviewHeight\n          });\n        }\n\n        // now ready\n        var queue = !supportsCreateImageBitmap && file.size > query('GET_IMAGE_PREVIEW_MAX_INSTANT_PREVIEW_FILE_SIZE');\n        root.dispatch('DID_IMAGE_PREVIEW_CONTAINER_CREATE', {\n          id: id\n        }, queue);\n      };\n      var rescaleItem = function rescaleItem(root, props) {\n        if (!root.ref.imagePreview) return;\n        var id = props.id;\n\n        // get item\n        var item = root.query('GET_ITEM', {\n          id: id\n        });\n        if (!item) return;\n\n        // if is fixed height or panel has aspect ratio, exit here, height has already been defined\n        var panelAspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n        var itemPanelAspectRatio = root.query('GET_ITEM_PANEL_ASPECT_RATIO');\n        var fixedHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n        if (panelAspectRatio || itemPanelAspectRatio || fixedHeight) return;\n\n        // no data!\n        var _root$ref = root.ref,\n          imageWidth = _root$ref.imageWidth,\n          imageHeight = _root$ref.imageHeight;\n        if (!imageWidth || !imageHeight) return;\n\n        // get height min and max\n        var minPreviewHeight = root.query('GET_IMAGE_PREVIEW_MIN_HEIGHT');\n        var maxPreviewHeight = root.query('GET_IMAGE_PREVIEW_MAX_HEIGHT');\n\n        // orientation info\n        var exif = item.getMetadata('exif') || {};\n        var orientation = exif.orientation || -1;\n\n        // get width and height from action, and swap of orientation is incorrect\n        if (orientation >= 5 && orientation <= 8) {\n          var _ref2 = [imageHeight, imageWidth];\n          imageWidth = _ref2[0];\n          imageHeight = _ref2[1];\n        }\n\n        // scale up width and height when we're dealing with an SVG\n        if (!isBitmap(item.file) || root.query('GET_IMAGE_PREVIEW_UPSCALE')) {\n          var scalar = 2048 / imageWidth;\n          imageWidth *= scalar;\n          imageHeight *= scalar;\n        }\n\n        // image aspect ratio\n        var imageAspectRatio = imageHeight / imageWidth;\n\n        // we need the item to get to the crop size\n        var previewAspectRatio = (item.getMetadata('crop') || {}).aspectRatio || imageAspectRatio;\n\n        // preview height range\n        var previewHeightMax = Math.max(minPreviewHeight, Math.min(imageHeight, maxPreviewHeight));\n        var itemWidth = root.rect.element.width;\n        var previewHeight = Math.min(itemWidth * previewAspectRatio, previewHeightMax);\n\n        // request update to panel height\n        root.dispatch('DID_UPDATE_PANEL_HEIGHT', {\n          id: item.id,\n          height: previewHeight\n        });\n      };\n      var didResizeView = function didResizeView(_ref3) {\n        var root = _ref3.root;\n        // actions in next write operation\n        root.ref.shouldRescale = true;\n      };\n      var didUpdateItemMetadata = function didUpdateItemMetadata(_ref4) {\n        var root = _ref4.root,\n          action = _ref4.action;\n        if (action.change.key !== 'crop') return;\n\n        // actions in next write operation\n        root.ref.shouldRescale = true;\n      };\n      var didCalculatePreviewSize = function didCalculatePreviewSize(_ref5) {\n        var root = _ref5.root,\n          action = _ref5.action;\n        // remember dimensions\n        root.ref.imageWidth = action.width;\n        root.ref.imageHeight = action.height;\n\n        // actions in next write operation\n        root.ref.shouldRescale = true;\n        root.ref.shouldDrawPreview = true;\n\n        // as image load could take a while and fire when draw loop is resting we need to give it a kick\n        root.dispatch('KICK');\n      };\n\n      // start writing\n      view.registerWriter(createRoute({\n        DID_RESIZE_ROOT: didResizeView,\n        DID_STOP_RESIZE: didResizeView,\n        DID_LOAD_ITEM: didLoadItem,\n        DID_IMAGE_PREVIEW_CALCULATE_SIZE: didCalculatePreviewSize,\n        DID_UPDATE_ITEM_METADATA: didUpdateItemMetadata\n      }, function (_ref6) {\n        var root = _ref6.root,\n          props = _ref6.props;\n        // no preview view attached\n        if (!root.ref.imagePreview) return;\n\n        // don't do anything while hidden\n        if (root.rect.element.hidden) return;\n\n        // resize the item panel\n        if (root.ref.shouldRescale) {\n          rescaleItem(root, props);\n          root.ref.shouldRescale = false;\n        }\n        if (root.ref.shouldDrawPreview) {\n          // queue till next frame so we're sure the height has been applied this forces the draw image call inside the wrapper view to use the correct height\n          requestAnimationFrame(function () {\n            // this requestAnimationFrame nesting is horrible but it fixes an issue with 100hz displays on Chrome\n            // https://github.com/pqina/filepond-plugin-image-preview/issues/57\n            requestAnimationFrame(function () {\n              root.dispatch('DID_FINISH_CALCULATE_PREVIEWSIZE', {\n                id: props.id\n              });\n            });\n          });\n          root.ref.shouldDrawPreview = false;\n        }\n      }));\n    });\n\n    // expose plugin\n    return {\n      options: {\n        // Enable or disable image preview\n        allowImagePreview: [true, Type.BOOLEAN],\n        // filters file items to determine which are shown as preview\n        imagePreviewFilterItem: [function () {\n          return true;\n        }, Type.FUNCTION],\n        // Fixed preview height\n        imagePreviewHeight: [null, Type.INT],\n        // Min image height\n        imagePreviewMinHeight: [44, Type.INT],\n        // Max image height\n        imagePreviewMaxHeight: [256, Type.INT],\n        // Max size of preview file for when createImageBitmap is not supported\n        imagePreviewMaxFileSize: [null, Type.INT],\n        // The amount of extra pixels added to the image preview to allow comfortable zooming\n        imagePreviewZoomFactor: [2, Type.INT],\n        // Should we upscale small images to fit the max bounding box of the preview area\n        imagePreviewUpscale: [false, Type.BOOLEAN],\n        // Max size of preview file that we allow to try to instant preview if createImageBitmap is not supported, else image is queued for loading\n        imagePreviewMaxInstantPreviewFileSize: [1000000, Type.INT],\n        // Style of the transparancy indicator used behind images\n        imagePreviewTransparencyIndicator: [null, Type.STRING],\n        // Enables or disables reading average image color\n        imagePreviewCalculateAverageImageColor: [false, Type.BOOLEAN],\n        // Enables or disables the previewing of markup\n        imagePreviewMarkupShow: [true, Type.BOOLEAN],\n        // Allows filtering of markup to only show certain shapes\n        imagePreviewMarkupFilter: [function () {\n          return true;\n        }, Type.FUNCTION]\n      }\n    };\n  };\n\n  // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n  var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  if (isBrowser) {\n    document.dispatchEvent(new CustomEvent('FilePond:pluginloaded', {\n      detail: plugin\n    }));\n  }\n  return plugin;\n});","/*!\n * FilePondPluginFileMetadata 1.0.8\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.FilePondPluginFileMetadata = factory());\n})(this, function () {\n  'use strict';\n\n  var plugin = function plugin(_ref) {\n    var addFilter = _ref.addFilter,\n      utils = _ref.utils;\n\n    // get quick reference to Type utils\n    var Type = utils.Type;\n\n    // setup attribute mapping for accept\n    addFilter('SET_ATTRIBUTE_TO_OPTION_MAP', function (map) {\n      return Object.assign(map, {\n        '^fileMetadata': {\n          group: 'fileMetadataObject'\n        }\n      });\n    });\n    addFilter('DID_LOAD_ITEM', function (item, _ref2) {\n      var query = _ref2.query;\n      return new Promise(function (resolve) {\n        if (!query('GET_ALLOW_FILE_METADATA')) {\n          return resolve(item);\n        }\n\n        // get default object and add as metadata\n        var data = query('GET_FILE_METADATA_OBJECT');\n        if (typeof data === 'object' && data !== null) {\n          Object.keys(data).forEach(function (key) {\n            item.setMetadata(key, data[key], true);\n          });\n        }\n        resolve(item);\n      });\n    });\n    return {\n      options: {\n        // Enable or disable file renaming\n        allowFileMetadata: [true, Type.BOOLEAN],\n        // A metadata object to add to all files\n        fileMetadataObject: [null, Type.OBJECT]\n      }\n    };\n  };\n\n  // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n  var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  if (isBrowser) {\n    document.dispatchEvent(new CustomEvent('FilePond:pluginloaded', {\n      detail: plugin\n    }));\n  }\n  return plugin;\n});","/*!\n * FilePondPluginFileValidateType 1.2.8\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.FilePondPluginFileValidateType = factory());\n})(this, function () {\n  'use strict';\n\n  var plugin = function plugin(_ref) {\n    var addFilter = _ref.addFilter,\n      utils = _ref.utils;\n    // get quick reference to Type utils\n    var Type = utils.Type,\n      isString = utils.isString,\n      replaceInString = utils.replaceInString,\n      guesstimateMimeType = utils.guesstimateMimeType,\n      getExtensionFromFilename = utils.getExtensionFromFilename,\n      getFilenameFromURL = utils.getFilenameFromURL;\n    var mimeTypeMatchesWildCard = function mimeTypeMatchesWildCard(mimeType, wildcard) {\n      var mimeTypeGroup = (/^[^/]+/.exec(mimeType) || []).pop(); // image/png -> image\n      var wildcardGroup = wildcard.slice(0, -2); // image/* -> image\n      return mimeTypeGroup === wildcardGroup;\n    };\n    var isValidMimeType = function isValidMimeType(acceptedTypes, userInputType) {\n      return acceptedTypes.some(function (acceptedType) {\n        // accepted is wildcard mime type\n        if (/\\*$/.test(acceptedType)) {\n          return mimeTypeMatchesWildCard(userInputType, acceptedType);\n        }\n\n        // is normal mime type\n        return acceptedType === userInputType;\n      });\n    };\n    var getItemType = function getItemType(item) {\n      // if the item is a url we guess the mime type by the extension\n      var type = '';\n      if (isString(item)) {\n        var filename = getFilenameFromURL(item);\n        var extension = getExtensionFromFilename(filename);\n        if (extension) {\n          type = guesstimateMimeType(extension);\n        }\n      } else {\n        type = item.type;\n      }\n      return type;\n    };\n    var validateFile = function validateFile(item, acceptedFileTypes, typeDetector) {\n      // no types defined, everything is allowed \\o/\n      if (acceptedFileTypes.length === 0) {\n        return true;\n      }\n\n      // gets the item type\n      var type = getItemType(item);\n\n      // no type detector, test now\n      if (!typeDetector) {\n        return isValidMimeType(acceptedFileTypes, type);\n      }\n\n      // use type detector\n      return new Promise(function (resolve, reject) {\n        typeDetector(item, type).then(function (detectedType) {\n          if (isValidMimeType(acceptedFileTypes, detectedType)) {\n            resolve();\n          } else {\n            reject();\n          }\n        }).catch(reject);\n      });\n    };\n    var applyMimeTypeMap = function applyMimeTypeMap(map) {\n      return function (acceptedFileType) {\n        return map[acceptedFileType] === null ? false : map[acceptedFileType] || acceptedFileType;\n      };\n    };\n\n    // setup attribute mapping for accept\n    addFilter('SET_ATTRIBUTE_TO_OPTION_MAP', function (map) {\n      return Object.assign(map, {\n        accept: 'acceptedFileTypes'\n      });\n    });\n\n    // filtering if an item is allowed in hopper\n    addFilter('ALLOW_HOPPER_ITEM', function (file, _ref2) {\n      var query = _ref2.query;\n      // if we are not doing file type validation exit\n      if (!query('GET_ALLOW_FILE_TYPE_VALIDATION')) {\n        return true;\n      }\n\n      // we validate the file against the accepted file types\n      return validateFile(file, query('GET_ACCEPTED_FILE_TYPES'));\n    });\n\n    // called for each file that is loaded\n    // right before it is set to the item state\n    // should return a promise\n    addFilter('LOAD_FILE', function (file, _ref3) {\n      var query = _ref3.query;\n      return new Promise(function (resolve, reject) {\n        if (!query('GET_ALLOW_FILE_TYPE_VALIDATION')) {\n          resolve(file);\n          return;\n        }\n        var acceptedFileTypes = query('GET_ACCEPTED_FILE_TYPES');\n\n        // custom type detector method\n        var typeDetector = query('GET_FILE_VALIDATE_TYPE_DETECT_TYPE');\n\n        // if invalid, exit here\n        var validationResult = validateFile(file, acceptedFileTypes, typeDetector);\n        var handleRejection = function handleRejection() {\n          var acceptedFileTypesMapped = acceptedFileTypes.map(applyMimeTypeMap(query('GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES_MAP'))).filter(function (label) {\n            return label !== false;\n          });\n          var acceptedFileTypesMapped_unique = acceptedFileTypesMapped.filter(function (item, index) {\n            return acceptedFileTypesMapped.indexOf(item) === index;\n          });\n          reject({\n            status: {\n              main: query('GET_LABEL_FILE_TYPE_NOT_ALLOWED'),\n              sub: replaceInString(query('GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES'), {\n                allTypes: acceptedFileTypesMapped_unique.join(', '),\n                allButLastType: acceptedFileTypesMapped_unique.slice(0, -1).join(', '),\n                lastType: acceptedFileTypesMapped_unique[acceptedFileTypesMapped.length - 1]\n              })\n            }\n          });\n        };\n\n        // has returned new filename immidiately\n        if (typeof validationResult === 'boolean') {\n          if (!validationResult) {\n            return handleRejection();\n          }\n          return resolve(file);\n        }\n\n        // is promise\n        validationResult.then(function () {\n          resolve(file);\n        }).catch(handleRejection);\n      });\n    });\n\n    // expose plugin\n    return {\n      // default options\n      options: {\n        // Enable or disable file type validation\n        allowFileTypeValidation: [true, Type.BOOLEAN],\n        // What file types to accept\n        acceptedFileTypes: [[], Type.ARRAY],\n        // - must be comma separated\n        // - mime types: image/png, image/jpeg, image/gif\n        // - extensions: .png, .jpg, .jpeg ( not enabled yet )\n        // - wildcards: image/*\n\n        // label to show when a type is not allowed\n        labelFileTypeNotAllowed: ['File is of invalid type', Type.STRING],\n        // nicer label\n        fileValidateTypeLabelExpectedTypes: ['Expects {allButLastType} or {lastType}', Type.STRING],\n        // map mime types to extensions\n        fileValidateTypeLabelExpectedTypesMap: [{}, Type.OBJECT],\n        // Custom function to detect type of file\n        fileValidateTypeDetectType: [null, Type.FUNCTION]\n      }\n    };\n  };\n\n  // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n  var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  if (isBrowser) {\n    document.dispatchEvent(new CustomEvent('FilePond:pluginloaded', {\n      detail: plugin\n    }));\n  }\n  return plugin;\n});","/*!\n * FilePondPluginFileValidateSize 2.2.8\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.FilePondPluginFileValidateSize = factory());\n})(this, function () {\n  'use strict';\n\n  var plugin = function plugin(_ref) {\n    var addFilter = _ref.addFilter,\n      utils = _ref.utils;\n    // get quick reference to Type utils\n    var Type = utils.Type,\n      replaceInString = utils.replaceInString,\n      toNaturalFileSize = utils.toNaturalFileSize;\n\n    // filtering if an item is allowed in hopper\n    addFilter('ALLOW_HOPPER_ITEM', function (file, _ref2) {\n      var query = _ref2.query;\n      if (!query('GET_ALLOW_FILE_SIZE_VALIDATION')) {\n        return true;\n      }\n      var sizeMax = query('GET_MAX_FILE_SIZE');\n      if (sizeMax !== null && file.size > sizeMax) {\n        return false;\n      }\n      var sizeMin = query('GET_MIN_FILE_SIZE');\n      if (sizeMin !== null && file.size < sizeMin) {\n        return false;\n      }\n      return true;\n    });\n\n    // called for each file that is loaded\n    // right before it is set to the item state\n    // should return a promise\n    addFilter('LOAD_FILE', function (file, _ref3) {\n      var query = _ref3.query;\n      return new Promise(function (resolve, reject) {\n        // if not allowed, all fine, exit\n        if (!query('GET_ALLOW_FILE_SIZE_VALIDATION')) {\n          return resolve(file);\n        }\n\n        // check if file should be filtered\n        var fileFilter = query('GET_FILE_VALIDATE_SIZE_FILTER');\n        if (fileFilter && !fileFilter(file)) {\n          return resolve(file);\n        }\n\n        // reject or resolve based on file size\n        var sizeMax = query('GET_MAX_FILE_SIZE');\n        if (sizeMax !== null && file.size > sizeMax) {\n          reject({\n            status: {\n              main: query('GET_LABEL_MAX_FILE_SIZE_EXCEEDED'),\n              sub: replaceInString(query('GET_LABEL_MAX_FILE_SIZE'), {\n                filesize: toNaturalFileSize(sizeMax, '.', query('GET_FILE_SIZE_BASE'), query('GET_FILE_SIZE_LABELS', query))\n              })\n            }\n          });\n          return;\n        }\n\n        // reject or resolve based on file size\n        var sizeMin = query('GET_MIN_FILE_SIZE');\n        if (sizeMin !== null && file.size < sizeMin) {\n          reject({\n            status: {\n              main: query('GET_LABEL_MIN_FILE_SIZE_EXCEEDED'),\n              sub: replaceInString(query('GET_LABEL_MIN_FILE_SIZE'), {\n                filesize: toNaturalFileSize(sizeMin, '.', query('GET_FILE_SIZE_BASE'), query('GET_FILE_SIZE_LABELS', query))\n              })\n            }\n          });\n          return;\n        }\n\n        // returns the current option value\n        var totalSizeMax = query('GET_MAX_TOTAL_FILE_SIZE');\n        if (totalSizeMax !== null) {\n          // get the current total file size\n          var currentTotalSize = query('GET_ACTIVE_ITEMS').reduce(function (total, item) {\n            return total + item.fileSize;\n          }, 0);\n\n          // get the size of the new file\n          if (currentTotalSize > totalSizeMax) {\n            reject({\n              status: {\n                main: query('GET_LABEL_MAX_TOTAL_FILE_SIZE_EXCEEDED'),\n                sub: replaceInString(query('GET_LABEL_MAX_TOTAL_FILE_SIZE'), {\n                  filesize: toNaturalFileSize(totalSizeMax, '.', query('GET_FILE_SIZE_BASE'), query('GET_FILE_SIZE_LABELS', query))\n                })\n              }\n            });\n            return;\n          }\n        }\n\n        // file is fine, let's pass it back\n        resolve(file);\n      });\n    });\n    return {\n      options: {\n        // Enable or disable file type validation\n        allowFileSizeValidation: [true, Type.BOOLEAN],\n        // Max individual file size in bytes\n        maxFileSize: [null, Type.INT],\n        // Min individual file size in bytes\n        minFileSize: [null, Type.INT],\n        // Max total file size in bytes\n        maxTotalFileSize: [null, Type.INT],\n        // Filter the files that need to be validated for size\n        fileValidateSizeFilter: [null, Type.FUNCTION],\n        // error labels\n        labelMinFileSizeExceeded: ['File is too small', Type.STRING],\n        labelMinFileSize: ['Minimum file size is {filesize}', Type.STRING],\n        labelMaxFileSizeExceeded: ['File is too large', Type.STRING],\n        labelMaxFileSize: ['Maximum file size is {filesize}', Type.STRING],\n        labelMaxTotalFileSizeExceeded: ['Maximum total size exceeded', Type.STRING],\n        labelMaxTotalFileSize: ['Maximum total file size is {filesize}', Type.STRING]\n      }\n    };\n  };\n\n  // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n  var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  if (isBrowser) {\n    document.dispatchEvent(new CustomEvent('FilePond:pluginloaded', {\n      detail: plugin\n    }));\n  }\n  return plugin;\n});","var 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","var 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 $TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var 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 $TypeError($String(argument) + ' is not an object');\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n","var global = require('../internals/global');\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 = global.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","var 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","var g;\n\n// This works in non-strict mode\ng = function () {\n  return this;\n}();\ntry {\n  // This works if eval is allowed (see CSP)\n  g = g || new Function(\"return this\")();\n} catch (e) {\n  // This works if the window reference is available\n  if (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;","var 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","var global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","var global = require('../internals/global');\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(global, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","module.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || '';\n","var 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 $TypeError(tryToString(argument) + ' is not a function');\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var 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","// 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","import jquery from 'jquery'\nwindow.jQuery = jquery\nwindow.$ = jquery","// Replaces card-img-top thumbnails that error out (mainly on staging) with a placeholder image\n// Useful for testing production data on staging where the image data is present but from the wrong bucket\ndocument.addEventListener('error', function(e) {\n  // Prevent infinite loops in case the placeholder image fails to load by checking dataset.errorHandled\n  if (e.target.tagName.toLowerCase() == 'img' && e.target.classList.contains('card-img-top') && !e.target.dataset.errorHandled) {\n    e.target.dataset.errorHandled = true\n    e.target.src = \"https://assets.superhivestaging.com/site_assets/image-placeholder.png\"\n  }\n}, true)\n","import Cookies from 'js-cookie';\n\n$(document).on('turbolinks:load', function () {\n  $('.js-admin-menu_toggle, .js-creator-menu_toggle').on('click', function(e) {\n    var lastSetting = $('.js-admin-menu, .js-creator-menu').hasClass('show');\n    Cookies.set('manageui_menu_closed', !lastSetting);\n  });\n\n  if (matchMedia) {\n    const mq = window.matchMedia(\"(max-width: 1200px)\");\n    mq.addListener(menuWidthChange);\n    menuWidthChange(mq);\n  }\n\n  function menuWidthChange(mq) {\n    if (mq.matches) {\n      closeBackendMenu();\n    } else {\n      openBackendMenu();\n    }\n  }\n\n  function closeBackendMenu() {\n    Cookies.set('manageui_menu_closed', true);\n    $('.js-admin-menu, .js-creator-menu').removeClass('show');\n  }\n\n  function openBackendMenu() {\n    Cookies.set('manageui_menu_closed', false);\n    $('.js-admin-menu, .js-creator-menu').addClass('show');\n  }\n});\n","$(document).on('turbolinks:load', function(){\n\n\t\tvar main      = '#ls'\n\t\t,\tresults     = '#ls--results'\n\t\t,\tloader      = '#ls--loading'\n\t\t,\tinput  \t\t\t= '#ls--input'\n\t\t,\thelper      = '#ls--helper'\n\t\t, $spinner\t\t= $('.js-backend-search-spinner')\n\t\t,\ttimer\n\n\t\t$(input).on('keyup keypress', function ( e ) {\n\n\t\t\t// clear the previous timer\n\t\t\tclearTimeout(timer)\n\n\t\t\tvar key         = e.which\n\t\t\t,\tthat        = this\n\t\t\t,\tval \t\t\t\t= $.trim( $(this).val() )\n\t\t\t,\tvalEqual    = val == $(that).val()\n\t\t\t,\tnotEmpty    = '' !== val\n\t\t\t, searchPath  = $(main).data('search-path')\n\t\t\t, basePath  \t=\t $(main).data('base-path')\n\n\t\t\t// 600ms delay so we dont exectute excessively\n\t\t\ttimer = setTimeout(function() {\n\n\t\t\t\t// don't proceed if the value is empty or not equal to itself\n\t\t\t\tif ( !valEqual && !notEmpty )\n\t\t\t\t\treturn false;\n\n\t\t\t\t// if we have more than 1 character\n\t\t\t\tif ( val.length >= 1 || val.length >= 1 && 13 == key ) {\n\n\t\t\t\t\t// dont run on escape or arrow keys\n\t\t\t\t\tif( blacklistedKeys( key ) )\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t// show loader\n\t\t\t\t\t$spinner.show()\n\n\t\t\t\t\t// remove any helpers\n\t\t\t\t\t$( helper ).fadeOut().remove();\n\n\t\t\t\t\t// make the search request\n\t\t\t\t  $.ajax({\n\t\t\t\t    type:'GET',\n\t\t\t\t   \turl: searchPath+'/?q='+encodeURIComponent(val),\n\t\t\t\t    dataType : 'script',\n\t\t\t\t    success: function(){\n\t\t\t\t\t\t\t$spinner.hide()\n\t\t\t\t    }\n\t\t\t\t  });\n\n\t\t\t\t} else if (val == '') {\n\n\t\t\t\t\t// show loader\n\t\t\t\t\t$spinner.show()\n\n\t\t\t\t  $.ajax({\n\t\t\t\t    type:'GET',\n\t\t\t\t   \turl: basePath,\n\t\t\t\t    dataType : 'script',\n\t\t\t\t    success: function(){\n\t\t\t\t\t\t\t$spinner.hide()\n\t\t\t\t    }\n\t\t\t\t  });\n\n\t\t\t\t}\n\n\t\t\t}, 600);\n\n\t\t});\n\n\t\t/**\n\t\t*\tUtility function to destroy the search\n\t\t*/\n\t\tfunction destroySearch(){\n\n\t\t\t$( input ).val('');\n\t\t}\n\n\t\t/**\n\t\t* \tBlacklisted keys - dont allow search on escape or arrow keys\n\t\t*/\n\t\tfunction blacklistedKeys( key ){\n\n\t\t\treturn 27 == key || 37 == key || 38 == key || 39 == key || 40 == key;\n\n\t\t}\n});\n","import Chartkick from \"chartkick\"\nimport Chart from \"chart.js\"\n\nChartkick.use(Chart);\nChartkick.configure({\n  width: \"100%\",\n  height:'250px',\n  colors: [\"#1dbdff\",\"#697182\",\"#55a626\",\"#a920ae\", \"#c15c50\", \"#0082c8\", \"#f58231\", \"#911eb4\", \"#46f0f0\", \"#f032e6\", \"#d2f53c\", \"#fabebe\", \"#008080\", \"#e6beff\", \"#aa6e28\", \"#fffac8\", \"#800000\", \"#aaffc3\", \"#808000\", \"#ffd8b1\"],\n  curve:false,\n  points:false,\n  library:{\n    scales:{\n      xAxes:[{\n        ticks: {\n          beginAtZero: true,\n          fontColor:'#818a9e'\n        },\n        gridLines:{\n          display:false\n        }\n      }],\n      yAxes: [{\n        ticks: {\n          fontColor:'#818a9e'\n        },\n        gridLines:{\n          display:false\n        }\n      }]\n    }\n  }\n});\n","module.exports = function (module) {\n  if (!module.webpackPolyfill) {\n    module.deprecate = function () {};\n    module.paths = [];\n    // module.parent = undefined by default\n    if (!module.children) module.children = [];\n    Object.defineProperty(module, \"loaded\", {\n      enumerable: true,\n      get: function () {\n        return module.l;\n      }\n    });\n    Object.defineProperty(module, \"id\", {\n      enumerable: true,\n      get: function () {\n        return module.i;\n      }\n    });\n    module.webpackPolyfill = 1;\n  }\n  return module;\n};","var map = {\n\t\"./af\": 27,\n\t\"./af.js\": 27,\n\t\"./ar\": 28,\n\t\"./ar-dz\": 29,\n\t\"./ar-dz.js\": 29,\n\t\"./ar-kw\": 30,\n\t\"./ar-kw.js\": 30,\n\t\"./ar-ly\": 31,\n\t\"./ar-ly.js\": 31,\n\t\"./ar-ma\": 32,\n\t\"./ar-ma.js\": 32,\n\t\"./ar-sa\": 33,\n\t\"./ar-sa.js\": 33,\n\t\"./ar-tn\": 34,\n\t\"./ar-tn.js\": 34,\n\t\"./ar.js\": 28,\n\t\"./az\": 35,\n\t\"./az.js\": 35,\n\t\"./be\": 36,\n\t\"./be.js\": 36,\n\t\"./bg\": 37,\n\t\"./bg.js\": 37,\n\t\"./bm\": 38,\n\t\"./bm.js\": 38,\n\t\"./bn\": 39,\n\t\"./bn-bd\": 40,\n\t\"./bn-bd.js\": 40,\n\t\"./bn.js\": 39,\n\t\"./bo\": 41,\n\t\"./bo.js\": 41,\n\t\"./br\": 42,\n\t\"./br.js\": 42,\n\t\"./bs\": 43,\n\t\"./bs.js\": 43,\n\t\"./ca\": 44,\n\t\"./ca.js\": 44,\n\t\"./cs\": 45,\n\t\"./cs.js\": 45,\n\t\"./cv\": 46,\n\t\"./cv.js\": 46,\n\t\"./cy\": 47,\n\t\"./cy.js\": 47,\n\t\"./da\": 48,\n\t\"./da.js\": 48,\n\t\"./de\": 49,\n\t\"./de-at\": 50,\n\t\"./de-at.js\": 50,\n\t\"./de-ch\": 51,\n\t\"./de-ch.js\": 51,\n\t\"./de.js\": 49,\n\t\"./dv\": 52,\n\t\"./dv.js\": 52,\n\t\"./el\": 53,\n\t\"./el.js\": 53,\n\t\"./en-au\": 54,\n\t\"./en-au.js\": 54,\n\t\"./en-ca\": 55,\n\t\"./en-ca.js\": 55,\n\t\"./en-gb\": 56,\n\t\"./en-gb.js\": 56,\n\t\"./en-ie\": 57,\n\t\"./en-ie.js\": 57,\n\t\"./en-il\": 58,\n\t\"./en-il.js\": 58,\n\t\"./en-in\": 59,\n\t\"./en-in.js\": 59,\n\t\"./en-nz\": 60,\n\t\"./en-nz.js\": 60,\n\t\"./en-sg\": 61,\n\t\"./en-sg.js\": 61,\n\t\"./eo\": 62,\n\t\"./eo.js\": 62,\n\t\"./es\": 63,\n\t\"./es-do\": 64,\n\t\"./es-do.js\": 64,\n\t\"./es-mx\": 65,\n\t\"./es-mx.js\": 65,\n\t\"./es-us\": 66,\n\t\"./es-us.js\": 66,\n\t\"./es.js\": 63,\n\t\"./et\": 67,\n\t\"./et.js\": 67,\n\t\"./eu\": 68,\n\t\"./eu.js\": 68,\n\t\"./fa\": 69,\n\t\"./fa.js\": 69,\n\t\"./fi\": 70,\n\t\"./fi.js\": 70,\n\t\"./fil\": 71,\n\t\"./fil.js\": 71,\n\t\"./fo\": 72,\n\t\"./fo.js\": 72,\n\t\"./fr\": 73,\n\t\"./fr-ca\": 74,\n\t\"./fr-ca.js\": 74,\n\t\"./fr-ch\": 75,\n\t\"./fr-ch.js\": 75,\n\t\"./fr.js\": 73,\n\t\"./fy\": 76,\n\t\"./fy.js\": 76,\n\t\"./ga\": 77,\n\t\"./ga.js\": 77,\n\t\"./gd\": 78,\n\t\"./gd.js\": 78,\n\t\"./gl\": 79,\n\t\"./gl.js\": 79,\n\t\"./gom-deva\": 80,\n\t\"./gom-deva.js\": 80,\n\t\"./gom-latn\": 81,\n\t\"./gom-latn.js\": 81,\n\t\"./gu\": 82,\n\t\"./gu.js\": 82,\n\t\"./he\": 83,\n\t\"./he.js\": 83,\n\t\"./hi\": 84,\n\t\"./hi.js\": 84,\n\t\"./hr\": 85,\n\t\"./hr.js\": 85,\n\t\"./hu\": 86,\n\t\"./hu.js\": 86,\n\t\"./hy-am\": 87,\n\t\"./hy-am.js\": 87,\n\t\"./id\": 88,\n\t\"./id.js\": 88,\n\t\"./is\": 89,\n\t\"./is.js\": 89,\n\t\"./it\": 90,\n\t\"./it-ch\": 91,\n\t\"./it-ch.js\": 91,\n\t\"./it.js\": 90,\n\t\"./ja\": 92,\n\t\"./ja.js\": 92,\n\t\"./jv\": 93,\n\t\"./jv.js\": 93,\n\t\"./ka\": 94,\n\t\"./ka.js\": 94,\n\t\"./kk\": 95,\n\t\"./kk.js\": 95,\n\t\"./km\": 96,\n\t\"./km.js\": 96,\n\t\"./kn\": 97,\n\t\"./kn.js\": 97,\n\t\"./ko\": 98,\n\t\"./ko.js\": 98,\n\t\"./ku\": 99,\n\t\"./ku.js\": 99,\n\t\"./ky\": 100,\n\t\"./ky.js\": 100,\n\t\"./lb\": 101,\n\t\"./lb.js\": 101,\n\t\"./lo\": 102,\n\t\"./lo.js\": 102,\n\t\"./lt\": 103,\n\t\"./lt.js\": 103,\n\t\"./lv\": 104,\n\t\"./lv.js\": 104,\n\t\"./me\": 105,\n\t\"./me.js\": 105,\n\t\"./mi\": 106,\n\t\"./mi.js\": 106,\n\t\"./mk\": 107,\n\t\"./mk.js\": 107,\n\t\"./ml\": 108,\n\t\"./ml.js\": 108,\n\t\"./mn\": 109,\n\t\"./mn.js\": 109,\n\t\"./mr\": 110,\n\t\"./mr.js\": 110,\n\t\"./ms\": 111,\n\t\"./ms-my\": 112,\n\t\"./ms-my.js\": 112,\n\t\"./ms.js\": 111,\n\t\"./mt\": 113,\n\t\"./mt.js\": 113,\n\t\"./my\": 114,\n\t\"./my.js\": 114,\n\t\"./nb\": 115,\n\t\"./nb.js\": 115,\n\t\"./ne\": 116,\n\t\"./ne.js\": 116,\n\t\"./nl\": 117,\n\t\"./nl-be\": 118,\n\t\"./nl-be.js\": 118,\n\t\"./nl.js\": 117,\n\t\"./nn\": 119,\n\t\"./nn.js\": 119,\n\t\"./oc-lnc\": 120,\n\t\"./oc-lnc.js\": 120,\n\t\"./pa-in\": 121,\n\t\"./pa-in.js\": 121,\n\t\"./pl\": 122,\n\t\"./pl.js\": 122,\n\t\"./pt\": 123,\n\t\"./pt-br\": 124,\n\t\"./pt-br.js\": 124,\n\t\"./pt.js\": 123,\n\t\"./ro\": 125,\n\t\"./ro.js\": 125,\n\t\"./ru\": 126,\n\t\"./ru.js\": 126,\n\t\"./sd\": 127,\n\t\"./sd.js\": 127,\n\t\"./se\": 128,\n\t\"./se.js\": 128,\n\t\"./si\": 129,\n\t\"./si.js\": 129,\n\t\"./sk\": 130,\n\t\"./sk.js\": 130,\n\t\"./sl\": 131,\n\t\"./sl.js\": 131,\n\t\"./sq\": 132,\n\t\"./sq.js\": 132,\n\t\"./sr\": 133,\n\t\"./sr-cyrl\": 134,\n\t\"./sr-cyrl.js\": 134,\n\t\"./sr.js\": 133,\n\t\"./ss\": 135,\n\t\"./ss.js\": 135,\n\t\"./sv\": 136,\n\t\"./sv.js\": 136,\n\t\"./sw\": 137,\n\t\"./sw.js\": 137,\n\t\"./ta\": 138,\n\t\"./ta.js\": 138,\n\t\"./te\": 139,\n\t\"./te.js\": 139,\n\t\"./tet\": 140,\n\t\"./tet.js\": 140,\n\t\"./tg\": 141,\n\t\"./tg.js\": 141,\n\t\"./th\": 142,\n\t\"./th.js\": 142,\n\t\"./tk\": 143,\n\t\"./tk.js\": 143,\n\t\"./tl-ph\": 144,\n\t\"./tl-ph.js\": 144,\n\t\"./tlh\": 145,\n\t\"./tlh.js\": 145,\n\t\"./tr\": 146,\n\t\"./tr.js\": 146,\n\t\"./tzl\": 147,\n\t\"./tzl.js\": 147,\n\t\"./tzm\": 148,\n\t\"./tzm-latn\": 149,\n\t\"./tzm-latn.js\": 149,\n\t\"./tzm.js\": 148,\n\t\"./ug-cn\": 150,\n\t\"./ug-cn.js\": 150,\n\t\"./uk\": 151,\n\t\"./uk.js\": 151,\n\t\"./ur\": 152,\n\t\"./ur.js\": 152,\n\t\"./uz\": 153,\n\t\"./uz-latn\": 154,\n\t\"./uz-latn.js\": 154,\n\t\"./uz.js\": 153,\n\t\"./vi\": 155,\n\t\"./vi.js\": 155,\n\t\"./x-pseudo\": 156,\n\t\"./x-pseudo.js\": 156,\n\t\"./yo\": 157,\n\t\"./yo.js\": 157,\n\t\"./zh-cn\": 158,\n\t\"./zh-cn.js\": 158,\n\t\"./zh-hk\": 159,\n\t\"./zh-hk.js\": 159,\n\t\"./zh-mo\": 160,\n\t\"./zh-mo.js\": 160,\n\t\"./zh-tw\": 161,\n\t\"./zh-tw.js\": 161\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 190;","import Highcharts from 'highcharts'\n\n$(document).on('ready turbolinks:load', function(){\n\n  Highcharts.setOptions({\n    colors: ['#0070F3', '#9747FF', '#FF47CC', '#F0D800', '#FD4F01', '#00F37E'],\n    credits: { enabled: false },\n    plotOptions: {\n      line: {\n        marker: {\n          symbol: 'circle'\n        }\n      }\n    }\n  })\n\n  var $charts = $('.js-chart')\n  $charts.each(function(index, el){\n    var $el = $(el)\n    if ($el.data('path')){\n      $.ajax({\n        url: $el.data('path'),\n        success: function(data, status){\n          Highcharts.chart(el, data)\n        },\n        error: function(request, errorMessage){\n          $el.empty()\n          var $error = $('<div/>', { class: 'text-center text-danger lead mb-3' })\n          var $icon = $('<i/>', { class: 'fa fa-exclamation-triangle fa-2x mt-4 mb-3 d-block' })\n          $error.append($icon)\n          $error.append('Sorry, there was an error while trying to load the chart.')\n          $el.append($error)\n        }\n      })\n    }\n  })\n\n})\n","$(document).on('turbolinks:load', function () {\n\n  // clear/hide discount code field on all browsers\n  if ($('#discount_code').length) {\n    $('#discount_code').val('').hide();\n  }\n\n  // only allow alphanumeric chars on paste\n  $('#discount_code').on('paste', function(e) {\n    e.preventDefault();\n    let pastedText = (e.originalEvent || e).clipboardData.getData('text/plain')\n      .replace(/[^a-zA-Z0-9-]/g, '');\n\n    const input = $(this)[0];\n    input.setRangeText(\n      pastedText,\n      input.selectionStart,\n      input.selectionEnd,\n      'end'\n    );\n  });\n\n  // existing operations code\n\n  $('#discount_code').hide();\n\n  $('#discount_code').on('keyup', function(e){\n\n    $('.apply-coupon').attr('href', '/carts/checkout/discount/'+$(this).val());\n\n\t}).on('keypress', function(e){\n\n    // don't allow anything weird (except hyphens)\n    if (e.which != 45 && (e.which < 48 || (e.which > 57 && e.which < 65) || (e.which > 90 && e.which < 97) || e.which > 122)) {\n      return false;\n    }\n\t}).on('input keyup', function(e) {\n    $(this).val($(this).val().replace(/[^a-zA-Z0-9-]/g, ''));\n  });\n\n\t$('a[data-bs-toggle-coupon]').on('click',function(e){\n    e.preventDefault();\n    $('.coupon-code-wrap, #discount_code').toggle('fast');\n    $(this).closest('.fieldset').fadeOut().remove();\n  });\n\n  var $body = $('body');\n  var $cart_total = $('#amount').val()\n  $('#payment-form').on('submit', function(){\n    $body.addClass('loading').prepend('<div class=\"loading-messages\">' + 'Submitting order...' + '</div>');\n  });\n\n  if ($body.hasClass('layout-carts-checkout') && $cart_total > 0) {\n    initPaypalCheckout(true);\n  }\n\n});\n\nfunction initPaypalCheckout(active){\n  if ($('body').hasClass('layout-carts-checkout') && active) {\n    paypal.Buttons({\n      fundingSource: paypal.FUNDING.PAYPAL,\n      style: {\n        color: 'blue',\n        label: 'checkout'\n      },\n      createOrder: function(data, actions) {\n        // Set up the transaction\n        return actions.order.create({\n          purchase_units: [{\n            amount: {\n              value: $(\"#amount\").val() / 100,\n              currency_code: 'USD',\n              breakdown: {\n                item_total: {\n                  value: $(\"#subtotal_amount\").val() / 100,\n                  currency_code: 'USD'\n                },\n                tax_total: {\n                  value: $(\"#tax_amount\").val() / 100,\n                  currency_code: 'USD'\n                }\n              }\n            },\n            description: \"Blender Market order\",\n            items: $('.js-order-item').map(function(i, item) {\n              var $item = $(item);\n              return {\n                name: $item.data('title'),\n                quantity: 1,\n                description: $item.data('version'),\n                unit_amount: {\n                  value: $item.data('price') / 100,\n                  currency_code: 'USD'\n                },\n                category: 'DIGITAL_GOODS'\n              };\n            }).toArray()\n          }]\n        });\n      },\n      onApprove: function(data, actions) {\n        // Authorize the transaction\n        actions.order.authorize().then(function(authorization) {\n          $('body').addClass('loading').prepend('<div class=\"loading-messages\">Please wait ...</div>');\n          // Call server to validate and capture the transaction\n          return $.ajax({\n            type: 'POST',\n            url: '/orders',\n            data: {\n              gateway: 'paypal',\n              amount: $(\"#amount\").val(),\n              coupon_id: $(\"#coupon_id\").val(),\n              paypal_payment: authorization,\n              subtotal_amount: $('#subtotal_amount').val()\n            },\n            dataType: 'json',\n            success: function(response){\n              location.replace(response['pickup']);\n            },\n            error: function(response){\n              location.replace(response['checkout']);\n            }\n          });\n        });\n      }\n    }).render('#paypal-button-container');\n  }\n}\n","import { url_get_param, url_add_param, url_remove_param } from '../../util/methods';\n\n$(document).on('turbolinks:load', function(){\n  // Flatpickr initialization\n  initializeFlatpickr();\n});\n\nfunction initializeFlatpickr(){\n  $('.js-datepicker').flatpickr();\n  $('.js-datetimepicker').flatpickr({\n    enableTime: true,\n  });\n\n  var startDate = $('#dp-start').val()\n  var endDate = $('#dp-end').val()\n\n  $('#dp-start').flatpickr(\n    {\n      minDate: '2014-06-10',\n      maxDate: $('#dp-end').data('end-date'),\n      onChange: function (selectedDates, dateStr, instance) {\n        if (selectedDates[0] > Date.parse(endDate) ) {\n          alert('The start date can not be greater than the end date');\n        } else {\n          var url = url_add_param(location.href, 'start_date', dateStr);\n          if( !url_get_param('end_date') ) {\n            var url = url_add_param(url, 'end_date', endDate)\n          }\n          Turbolinks.visit(url)\n        }\n      }\n    }\n  );\n\n  $('#dp-end').flatpickr(\n    {\n      minDate: '2014-06-10',\n      maxDate: $('#dp-end').data('end-date'),\n      onChange: function (selectedDates, dateStr, instance) {\n        if (selectedDates[0] < Date.parse(startDate) ) {\n          alert('The end date can not be less than the start date');\n        } else {\n          var url = url_add_param(location.href, 'end_date', dateStr);\n          if( !url_get_param('start_date') ) {\n            var url = url_add_param(url, 'start_date', startDate)\n          }\n          Turbolinks.visit(url)\n        }\n      }\n    }\n  );\n\n  $('#subscription_expiration').flatpickr()\n}\n","import * as FilePond from 'filepond';\nimport FilePondPluginImagePreview from 'filepond-plugin-image-preview';\nimport FilePondPluginFileMetadata from 'filepond-plugin-file-metadata';\nimport FilePondPluginFileValidateType from 'filepond-plugin-file-validate-type';\nimport FilePondPluginFileValidateSize from 'filepond-plugin-file-validate-size';\nimport { checkProductFormCompletion } from '../../views/creator/products/form_sections';\nimport { transferFileElementOutOfPond } from '../../views/creator/products/version_form';\n\n$(document).on('turbolinks:load', function () {\n\n  // FilePond setup\n  FilePond.registerPlugin(FilePondPluginImagePreview);\n  FilePond.registerPlugin(FilePondPluginFileMetadata);\n  FilePond.registerPlugin(FilePondPluginFileValidateType);\n  FilePond.registerPlugin(FilePondPluginFileValidateSize);\n\n  var $featuredImageInputs = $('.js-imageInputFeatured');\n  $featuredImageInputs.each(function(index, el){\n    var $el = $(el);\n    var pond = FilePond.create(el,\n    {\n      maxFiles: 1,\n      maxFileSize: '5MB',\n      acceptedFileTypes: ['image/png', 'image/jpeg', 'image/gif'],\n      allowMultiple: false,\n      allowImagePreview: true,\n      allowPaste: false,\n      server: {\n        load: loadFile,\n        process: processFeaturedImage,\n        revert: removeFeaturedImage,\n        remove: removeFeaturedImage\n      },\n      files: $el.data('files')\n    });\n  });\n\n  var $multiImageInputs = $('.js-imageInputMulti');\n  var $addToTop = $('#js-image-add-to-top');\n  $multiImageInputs.each(function(index, el){\n    var $el = $(el);\n    var imageInsertLocation = $addToTop.val() === 'true' ? 'before' : 'after';\n    var pond = FilePond.create(el,\n    {\n      maxFileSize: '5MB',\n      acceptedFileTypes: ['image/*'],\n      allowMultiple: true,\n      allowImagePreview: true,\n      imagePreviewHeight: 200,\n      itemInsertLocation: imageInsertLocation,\n      allowReorder: true,\n      allowPaste: false,\n      server: {\n        load: loadFile,\n        process: processImageFile,\n        revert: removeImage,\n        remove: removeImage\n      },\n      files: $el.data('files'),\n      onprocessfile: setImageOrder,\n      onreorderfiles: reorderProductImages\n    });\n\n    function setImageOrder(){\n      reorderProductImages(pond.getFiles());\n    };\n  });\n\n  var $downloadInputs = $('.js-fileInputDownload');\n  $downloadInputs.each(function(index, el){\n    var pond = FilePond.create(el,\n    {\n      allowMultiple: true,\n      allowRevert: false,\n      allowRemove: false,\n      allowPaste: false,\n      server: {\n        process: processDownloadFile\n      }\n    });\n  });\n\n  var $versionDownloadInputs = $('.js-versionFileInputDownload');\n  $versionDownloadInputs.each(function(index, el){\n    var pond = FilePond.create(el,\n    {\n      allowMultiple: true,\n      allowRevert: false,\n      allowRemove: false,\n      allowPaste: false,\n      server: {\n        process: processVersionDownloadFile\n      }\n    });\n  });\n\n  var $avatarInputs = $('.js-imageInputAvatar');\n  $avatarInputs.each(function(index, el){\n    var $el = $(el);\n    var pond = FilePond.create(el,\n    {\n      maxFileSize: '5MB',\n      acceptedFileTypes: ['image/*'],\n      maxFiles: 1,\n      allowMultiple: false,\n      allowImagePreview: true,\n      server: {\n        load: loadFile,\n        process: processAvatarImage,\n        revert: removeAvatarImage,\n        remove: removeAvatarImage\n      },\n      files: $el.data('files')\n    });\n  });\n\n  var $messageInputs = $('.js-fileInputMessage');\n  $messageInputs.each(function(index, el){\n    var pond = FilePond.create(el,\n    {\n      maxFileSize: '5MB',\n      maxFiles: 1,\n      allowMultiple: false,\n      allowRevert: false,\n      allowRemove: false,\n      server: {\n        process: processMessageFile\n      }\n    });\n  });\n\n  var $postImageInputs = $('.js-imageInputPost');\n  $postImageInputs.each(function(index, el){\n    var $el = $(el);\n    var pond = FilePond.create(el,\n    {\n      maxFiles: 1,\n      maxFileSize: '5MB',\n      acceptedFileTypes: ['image/png', 'image/jpeg', 'image/gif'],\n      allowMultiple: false,\n      allowImagePreview: true,\n      server: {\n        load: loadFile,\n        process: processPostImage,\n        revert: removePostImage,\n        remove: removePostImage\n      },\n      files: $el.data('files')\n    });\n  });\n\n  var $shopBannerInputs = $('.js-imageInputBanner');\n  $shopBannerInputs.each(function(index, el){\n    var $el = $(el);\n    var pond = FilePond.create(el,\n    {\n      maxFiles: 1,\n      maxFileSize: '5MB',\n      acceptedFileTypes: ['image/png', 'image/jpeg', 'image/gif'],\n      allowMultiple: false,\n      allowImagePreview: true,\n      server: {\n        load: loadFile,\n        process: processBannerImage,\n        revert: removeBannerImage,\n        remove: removeBannerImage\n      },\n      files: $el.data('files')\n    });\n  });\n\n});\n\nfunction loadFile(source, load, error, progress, abort, headers) {\n  $.ajax({\n    url: source.split(\"|\")[1], // [0] is the database ID\n    method: 'get',\n    cache: false, // avoid S3 cors issues\n    xhrFields: {\n      responseType: 'blob'\n    },\n    success: function(response){\n      load(response);\n    }\n  })\n}\n\n//\n// 1. PROCESS\n//\nfunction processImageFile(fieldName, file, metadata, load, error, progress, abort) {\n  // Begin processing image by sending a request to the server\n  // Subsequent methods are handled in 2 callbacks: sendFileToS3, createProductImage\n  // SetTimeout causes this to be started in a thread, which helps with animations\n  setTimeout(getPresignParams(file, load, error, createProductImage, '/s3/public_params'), 0);\n}\n\nfunction processFeaturedImage(fieldName, file, metadata, load, error, progress, abort) {\n  setTimeout(getPresignParams(file, load, error, updateProductFeaturedImage, '/s3/public_params'), 0);\n}\n\nfunction processDownloadFile(fieldName, file, metadata, load, error, progress, abort) {\n  setTimeout(getPresignParams(file, load, error, createProductDownload), 0);\n}\n\nfunction processVersionDownloadFile(fieldName, file, metadata, load, error, progress, abort) {\n  setTimeout(getPresignParams(file, load, error, createProductVersionDownload), 0);\n}\n\nfunction processAvatarImage(fieldName, file, metadata, load, error, progress, abort) {\n  setTimeout(getPresignParams(file, load, error, updateUserAvatarImage, '/s3/public_params'), 0);\n}\n\nfunction processMessageFile(fieldName, file, metadata, load, error, progress, abort) {\n  setTimeout(getPresignParams(file, load, error, assignMessageFiles), 0);\n}\n\nfunction processPostImage(fieldName, file, metadata, load, error, progress, abort) {\n  setTimeout(getPresignParams(file, load, error, updatePostImage, '/s3/public_params'), 0);\n}\n\nfunction processBannerImage(fieldName, file, metadata, load, error, progress, abort) {\n  setTimeout(getPresignParams(file, load, error, updateShopBannerImage, '/s3/public_params'), 0);\n}\n\n//\n// 2. PRESIGN\n//\nfunction getPresignParams(file, load, error, callbackMethod, url='/s3/params') {\n  // Server should presign the file and return params for S3\n  $.ajax({\n    url: url,\n    method: 'get',\n    data: {\n      filename: file.name,\n      type: file.type\n    },\n    success: function(presignResponse){\n      setTimeout(sendFileToS3(file, presignResponse, load, error, callbackMethod), 0);\n    }\n  });\n}\n\n//\n// 3. S3 Storage\n//\nfunction sendFileToS3(file, presignResponse, load, error, callbackMethod){\n\n  // Presign succeeded\n  var url = new URL(presignResponse['url']);\n\n  $.ajax({\n    url: url,\n    method: 'PUT',\n    headers: presignResponse['headers'],\n    data: file,\n    processData: false,\n    contentType: file.type,\n    success: function(awsResponse){\n      // File has been successfully uploaded to S3!\n      // Now we have to inform our server of the upload.\n\n      var presignFileData = {\n        'key': url.pathname\n      }\n      setTimeout(callbackMethod(file, presignFileData, load, error), 0);\n    }\n  });\n}\n\n//\n// 4. APP HOOKUPS\n//\n\nfunction formatCachedUpload(file, presignFileData, storage='cache') {\n  return {\n    id: presignFileData['key'].match(/^\\/cache\\/(.+)/)[1], // object key without cache prefix\n    storage: storage,\n    metadata: {\n      size: file.size,\n      filename: file.name,\n      mime_type: file.type,\n    }\n  };\n}\n\n// This method takes the CSRF token from a form and submits it remotely\nfunction ajaxUpdateForm(formSelector, requestMethod, data, successCallback) {\n  var $form = $(formSelector);\n  var formData = {\n    _method: requestMethod,\n    authenticity_token: $form.find('input[name=\"authenticity_token\"]').val()\n  };\n  $.ajax({\n    url: $form.attr('action'),\n    method: 'post',\n    dataType: 'json',\n    data: {\n      ...formData,\n      ...data\n    },\n    success: successCallback\n  });\n}\n\nfunction updateProductFeaturedImage(file, presignFileData, load, error) {\n  // Construct uploaded file data in the format that Shrine expects\n  var uploadedFileData = formatCachedUpload(file, presignFileData, 'public_cache');\n\n  // Make an AJAX request to update our server with the new image\n  ajaxUpdateForm(\n    '.edit_product',\n    'patch',\n    { product: { image: uploadedFileData } },\n    function(response){\n      if (response['success'] == true){\n        load(uploadedFileData['id']);\n        checkProductFormCompletion(); // update form circles\n      } else {\n        error('Something went wrong');\n        checkProductFormCompletion();\n      }\n    }\n  );\n}\n\nfunction createProductImage(file, presignFileData, load, error) {\n  var uploadedFileData = formatCachedUpload(file, presignFileData, 'public_cache');\n\n  ajaxUpdateForm(\n    '.edit_product',\n    'patch',\n    { product: { images_attributes: [{ id: null, image: uploadedFileData }] } },\n    function(response){\n      // Tell FilePond to finish. last_image_id is used to associate the image\n      // to the newly created ProductImage in the back end.\n      if (response['success'] == true){\n        load(response['last_image_id'] + \"|\" + uploadedFileData['id']);\n      } else {\n        error('Something went wrong');\n      }\n    }\n  );\n}\n\nfunction createProductDownload(file, presignFileData, load, error) {\n  // Construct uploaded file data in the format that Shrine expects\n  var uploadedFileData = formatCachedUpload(file, presignFileData);\n\n  // Make an AJAX request to update our server with the new image\n  ajaxUpdateForm(\n    '.edit_product',\n    'patch',\n    { product: { downloads_attributes: [{ id: null, title: file.name, file: uploadedFileData }] } },\n    function(response){\n      // Tell FilePond to finish. This ID doesn't matter, we will not use FP to revert downloads.\n      if (response['success'] == true){\n        load(uploadedFileData['id']);\n      } else {\n        error('Something went wrong');\n      }\n    }\n  );\n}\n\nfunction createProductVersionDownload(file, presignFileData, load, error) {\n  // Construct uploaded file data in the format that Shrine expects\n  var uploadedFileData = formatCachedUpload(file, presignFileData);\n\n  // Make an AJAX request to update our server with the new product file\n  ajaxUpdateForm(\n    '.new_download',\n    'post',\n    { download: { id: null, title: file.name, file: uploadedFileData } },\n    function(response){\n      // Tell FilePond to finish and create html element for response data\n      if (response['success'] == true){\n        load(uploadedFileData['id']);\n        var pond = FilePond.find($('.js-versionFileInputDownload')[0]);\n\n        setTimeout(function() {\n          transferFileElementOutOfPond(pond, file, response['html']);\n        }, 2000);\n\n      } else {\n        error('Something went wrong');\n      }\n    }\n  );\n\n}\n\n\nfunction updateUserAvatarImage(file, presignFileData, load, error) {\n  // Construct uploaded file data in the format that Shrine expects\n  var uploadedFileData = formatCachedUpload(file, presignFileData, 'public_cache');\n\n  // Make an AJAX request to update our server with the new image\n  ajaxUpdateForm(\n    '.edit_user',\n    'patch',\n    { user: { avatar: uploadedFileData } },\n    function(response){\n      if (response['success'] == true){\n        load(uploadedFileData['id']);\n      } else {\n        error('Something went wrong');\n      }\n    }\n  );\n}\n\nfunction assignMessageFiles(file, presignFileData, load, error) {\n  // Construct uploaded file data in the format that Shrine expects\n  var uploadedFileData = formatCachedUpload(file, presignFileData);\n  // Put it in a hidden field to be used on form submit\n  $('.js-fileInputMessage-target').val(JSON.stringify(uploadedFileData));\n  load(uploadedFileData['id']);\n}\n\nfunction updatePostImage(file, presignFileData, load, error) {\n  // Construct uploaded file data in the format that Shrine expects\n  var uploadedFileData = formatCachedUpload(file, presignFileData, 'public_cache');\n\n  // Make an AJAX request to update our server with the new image\n  ajaxUpdateForm(\n    '.edit_post',\n    'patch',\n    { post: { image: uploadedFileData } },\n    function(response){\n      if (response['success'] == true){\n        load(uploadedFileData['id']);\n      } else {\n        error('Something went wrong');\n      }\n    }\n  );\n}\n\nfunction updateShopBannerImage(file, presignFileData, load, error) {\n  // Construct uploaded file data in the format that Shrine expects\n  var uploadedFileData = formatCachedUpload(file, presignFileData, 'public_cache');\n\n  //the controller expects a settings id, otherwise it will create a new ShopSetting\n  var $settingsId = $('input[name=\"shop[settings_attributes][id]\"]').val()\n\n  // Make an AJAX request to update our server with the new image\n  ajaxUpdateForm(\n    '.edit_shop',\n    'patch',\n    { \n      shop: {\n        settings_attributes: { \n          id: $settingsId,\n          banner: uploadedFileData \n        }\n      } \n    },\n    function(response){\n      if (response['success'] == true){\n        load(uploadedFileData['id']);\n      } else {\n        error('Something went wrong');\n      }\n    }\n  );\n}\n\n//\n// 4a. IMAGE GALLERY REORDERING\n//\n\n// This only works with 1 multiple image gallery at a time due to the global variable.\n// If needed we can refactor this later to be more flexible.\nvar temporaryImageReorderTimeout;\nfunction reorderProductImages(filesArray) {\n  // Set a timeout. After 5 seconds of no activity, let's update the server\n  clearTimeout(temporaryImageReorderTimeout);\n  temporaryImageReorderTimeout = setTimeout(function(){\n    updateProductImageOrdinals(filesArray);\n  }, 5000);\n}\n\nfunction updateProductImageOrdinals(filesArray) {\n  var formattedData = [];\n  for (var i=0; i<filesArray.length; i++){\n    formattedData.push({\n      id: filesArray[i].serverId.split(\"|\")[0],\n      ordinal: i\n    });\n  }\n\n  ajaxUpdateForm(\n    '.edit_product',\n    'patch',\n    { product: { images_attributes: formattedData } },\n    function(response){\n      // pass\n    }\n  );\n}\n\n//\n// 5. REMOVE / REVERT\n//\nfunction removeFeaturedImage(source, load, error) {\n  // Make an AJAX request to delete the image\n  ajaxUpdateForm(\n    '.edit_product',\n    'patch',\n    { product: { remove_image: true } },\n    function(response){\n      if (response['success'] == true){\n        load();\n        setTimeout(checkProductFormCompletion, 300);\n      } else {\n        error('File could not be removed');\n        checkProductFormCompletion();\n      }\n    }\n  );\n}\n\nfunction removeImage(source, load, error) {\n  var productImageID = source.split(\"|\")[0];\n\n  // Make an AJAX request to delete the image\n  ajaxUpdateForm(\n    '.edit_product',\n    'patch',\n    { product: { destroy_product_images: [productImageID] } },\n    function(response){\n      if (response['success'] == true){\n        load();\n      } else {\n        error('File could not be removed');\n      }\n    }\n  );\n}\n\nfunction removeAvatarImage(source, load, error) {\n  // Make an AJAX request to delete the image\n  ajaxUpdateForm(\n    '.edit_user',\n    'patch',\n    { user: { remove_avatar: true } },\n    function(response){\n      if (response['success'] == true){\n        load();\n      } else {\n        error('File could not be removed');\n      }\n    }\n  );\n}\n\nfunction removePostImage(source, load, error) {\n  // Make an AJAX request to delete the image\n  ajaxUpdateForm(\n    '.edit_post',\n    'patch',\n    { post: { remove_image: true } },\n    function(response){\n      if (response['success'] == true){\n        load();\n        setTimeout(checkProductFormCompletion, 300);\n      } else {\n        error('File could not be removed');\n        checkProductFormCompletion();\n      }\n    }\n  );\n}\n\nfunction removeBannerImage(source, load, error) {\n  var $settingsId = $('input[name=\"shop[settings_attributes][id]\"]').val()\n\n  // Make an AJAX request to delete the image\n  ajaxUpdateForm(\n    '.edit_shop',\n    'patch',\n    { \n      shop: {\n        settings_attributes: { \n          id: $settingsId,\n          remove_banner: true\n        }\n      } \n    },\n    function(response){\n      if (response['success'] == true){\n        load();\n      } else {\n        error('File could not be removed');\n      }\n    }\n  );\n}\n","$(document).on('turbolinks:load', function(){\n  $(\".show-password\").each(function (index, input) {\n    var $input = $(input);\n    var $toggler = $('.toggle-show-password');\n\n    $toggler.on('click', function () {\n      var change = \"\";\n      if ($(this).hasClass('fa-eye')) {\n        $(this).removeClass('fa-eye').addClass('fa-eye-slash')\n        change = \"text\";\n      } else {\n        $(this).removeClass('fa-eye-slash').addClass('fa-eye')\n        change = \"password\";\n      }\n      var $rep = $(\"<input type='\" + change + \"' required />\")\n        .attr(\"id\", $input.attr(\"id\"))\n        .attr(\"name\", $input.attr(\"name\"))\n        .attr('class', $input.attr('class'))\n        .val($input.val())\n        .insertBefore($input);\n      $input.remove();\n      $input = $rep;\n    }).insertAfter($input);\n  });\n});","$(document).on('turbolinks:load', function (){\n  var placeholderText = 'Search...'; \n\tcleanupLastLoad();\n\n  $('.js-select-multi').select2({\n    multiple: true,\n    width: '100%'\n  });\n\n  function initializeSelect2(selectElement) {\n    var $selectElement = $(selectElement);\n    if ($selectElement.data('url')) {\n        $selectElement.select2({\n        ajax: {\n            url: $selectElement.data('url'),\n            dataType: 'json',\n            delay: 250,\n            data: function (params) {\n            return {\n                q: params.term // search term\n            };\n            },\n            processResults: function (data) {\n            return {\n                results: data.results\n            };\n            },\n            cache: true\n        },\n        minimumInputLength: 3,\n        placeholder: placeholderText,\n        width: '100%'\n        });        \n    } else {\n      $selectElement.select2({\n        width: '100%'\n      });        \n    }\n  }\n  // Initialize for static page load\n  $('.js-select, .js-input-select').each(function() {\n  \tinitializeSelect2(this);\n  });\n\n  // Reinitialize for dynamically added elements (e.g., via Cocoon)\n  $(document).on('cocoon:after-insert', function(e, insertedItem) {\n    $(insertedItem).find('.js-select, .js-input-select').each(function() {\n      initializeSelect2(this);\n    });\n  });\n\n\tfunction cleanupLastLoad(){\n\t\t// Select2 cleanup\n\t\tvar $selects = $('.js-select');\n\t\tfor (var i=0; i<$selects.length; i++){\n\t\t\tvar $sel = $($selects[i]);\n\t\t\tif ($sel.data('select2')) $sel.select2('destroy');\n\t\t}\n\t\n\t\tvar $multiSelects = $('.js-select');\n\t\tfor (var i=0; i<$multiSelects.length; i++){\n\t\t\tvar $sel = $($multiSelects[i]);\n\t\t\tif ($sel.data('select2')) $sel.select2('destroy');\n\t\t}\n\t\t\n\t}\n\n});\n","$(document).on('turbolinks:load', function(){\n\n  $userSelect = $('.js-user-select')\n  $selectSpinner = $('.js-select2-spinner')\n\n  $userSelect.select2({\n    placeholder: \"Search by username...\",\n    ajax: {\n      url: '/users/autocomplete',\n      dataType: 'json',\n      delay: 500,\n      data: function(params){\n        if (params.term && params.term.length > 0) $selectSpinner.show() //display spinner when user starts typing\n\n        return {\n          query: params.term\n        }\n      },\n      processResults: function(data) {\n        if (data) $selectSpinner.hide() //hide spinner when API returns a response\n\n        data = $.map(data, function (obj) {\n          obj.text = obj.username; // select2 looks for a text key in data to display as option\n          return obj;\n        })\n\n        return {\n          results: data\n        }\n      }\n    },\n  })\n\n  $userSelect.on('select2:select', function(e) {\n    let data = e.params.data;\n    let options = `<option value=${data.id} selected>${data.text}</option>`\n    $userSelect.empty().append(options).val(data.id).trigger('change')\n  });    \n})\n\n","$(document).on('turbolinks:load', function() {\n\n  var $variantFormsContainer = $('#js-sortable-variants');\n  var productId = $('input[name=\"data_product_id\"]').val();\n\n  if ($variantFormsContainer.length) {\n    \n    var $variantNestedFields = $('.js-variant-nested-field');\n\n    if ($variantNestedFields.length) {\n      $variantNestedFields.each(function() {\n        var $this = $(this);\n        var $variantFileSelect = $this.find('.js-variant-file-select');\n\n        // initialize file select dropdown for existing variant files\n        if ($variantFileSelect.length) {\n          $variantFileSelect.each(function() {\n            initializeVariantFileSelect(this);\n          });\n        }\n\n        // initialize newly added file select dropdown\n        $this.on('cocoon:after-insert', function(e, $insertedItem) {\n          if ($insertedItem.hasClass('js-variant-file-wrapper')) {\n            let $insertedVariantFileSelect = $insertedItem.find('.js-variant-file-select');\n\n            $insertedVariantFileSelect.each(function() {\n              initializeVariantFileSelect(this);\n            });\n          }\n        });\n      });\n    }\n\n    // Initialize file select dropdown for newly added Variant nested form fields\n    $variantFormsContainer.on('cocoon:after-insert', function(e, $insertedItem) {\n\n      if ($insertedItem.hasClass('js-variant-nested-field')) {\n\n        $insertedItem.on('cocoon:after-insert', function(e, $insertedItem) {\n          \n          if ($insertedItem.hasClass('js-variant-file-wrapper')) {\n            let $insertedVariantFileSelect = $insertedItem.find('.js-variant-file-select');\n\n            $insertedVariantFileSelect.each(function() {\n              initializeVariantFileSelect(this);\n            });\n          }\n        });\n      }\n    });\n\n    function initializeVariantFileSelect(fileSelect) {\n      let $fileSelect = $(fileSelect);\n\n      $fileSelect.select2({\n        width: '100%',\n        ajax: {\n          url: '/api/v1/products/files/search/' + productId,\n          dataType: 'json',\n          delay: 250,\n          data: function(params) {\n            return { q: params.term }\n          },\n          processResults: function(data) {\n            return { results: data }\n          },\n          cache: true\n        },\n        placeholder: 'Select or Search by filename...'\n      });\n      \n      $fileSelect.on('select2:select', function(e) {\n        let data = e.params.data;\n        let selected = new Option(data.text, data.id, true, true);\n        $fileSelect.empty().append(selected).trigger('change');\n      });\n    };\n  };\n});","$(document).on('turbolinks:load', function(){\n\n  var $slugInputs = $('.js-input-slug');\n  if ($slugInputs.length > 0) {\n    $slugInputs.on('keypress', preventInvalidSlugInput);\n    $slugInputs.on('paste', preventPasteSlugInput);\n    $slugInputs.on('change', lowercaseSlugValue);\n\n    $slugInputs.each(function(index, item) {\n      var $item = $(item);\n      var checkApiToUse = $item.data('check');\n\n      if (checkApiToUse == \"users\") {\n        checkSlug($item, '/api/v1/users/checkslug/');\n      } else if (checkApiToUse == \"products\") {\n        checkSlug($item, '/api/v1/checkslug/');\n      }\n    });\n\n  }\n\n  var $couponCodeInput = $('.js-input-coupon_code');\n  if ($couponCodeInput.length > 0) {\n    $couponCodeInput.on('keypress', preventInvalidSlugInput);\n    $couponCodeInput.on('paste', preventPasteSlugInput);\n    $couponCodeInput.on('change', lowercaseSlugValue);\n  }\n\n})\n\nfunction preventInvalidSlugInput(e) {\n  // Prevent user from entering characters not supported in slugs\n  if (\n    e.which == 32 ||\n    (e.which < 48 && e.which !== 45 ) ||\n    (e.which > 57 && e.which < 65) ||\n    (e.which > 90 && e.which < 97) ||\n    e.which > 122\n  ) {\n    return false;\n  }\n}\n\nfunction preventPasteSlugInput(e) {\n  e.preventDefault();\n}\n\nfunction lowercaseSlugValue(e) {\n  var $this = $(this);\n  $this.val($this.val().toLowerCase());\n}\n\nfunction checkSlug($el, path) {\n  var slugTimer;\n\n  $el.on('input', function(e){\n    clearTimeout(slugTimer);\n\n    var $this = $(this);\n    var slug = stringToSlug($.trim($this.val().toLowerCase()));\n\n    clearSlugFeedback($this);\n\n    slugTimer = setTimeout(function(){\n      // See if we should check the slug\n      if (slug == '' || slug.length <= 5) {\n        return;\n      }\n\n      $this.addClass('is-loading');\n\n      $.ajax({\n        url: path + slug,\n        success: function(response){\n          if (response && response['slug_taken'] == false) {\n            slugSuccess($this, response);\n          }\n          else if (response && response['slug_taken'] == true && response['user_id'] == $this.data('user')) {\n            slugSuccess($this, response);\n          }\n          else {\n            slugFail($this, response);\n          }\n        }\n      }); // end ajax\n    }, 600); // end slugTimer = setTimeout(...);\n  }); // end $el.on('keypress');\n}\n\nfunction clearSlugFeedback($target){\n  $target.removeClass('is-loading is-valid is-invalid');\n  $target.closest('.form-group').find('label.text-danger').remove();\n}\n\nfunction slugFail($target, response){\n  clearSlugFeedback($target);\n  $target.addClass('is-invalid');\n  $target.after('<label class=\"text-danger small mb-2\">Slug has been taken.</label>');\n}\n\nfunction slugSuccess($target, response){\n  clearSlugFeedback($target);\n  $target.addClass('is-valid');\n}\n\nfunction stringToSlug(str){\n  return (\n    str.toLowerCase()\n    .replace(/\\.[^/.]+$/, \"\")\n    .replace(/ /g,'-')\n    .replace(/[^\\w-]+/g,'')\n  );\n}\n","$(document).on('turbolinks:load', function () {\n\n  // Clean up any pre existing text editors\n  $('.js-textEditor-basic').summernote('destroy');\n  $('.js-textEditor-expanded').summernote('destroy');\n  $('.js-textEditor-slim').summernote('destroy');\n  $('.js-textEditor-simple').summernote('destroy');\n\n  // Initialize basic Summernote text editor\n  var basicEditors = $('.js-textEditor-basic');\n  for (var i=0; i<basicEditors.length; i++){\n    var $basicNote = $(basicEditors[i]);\n    $basicNote.summernote({\n      height: 140,\n      toolbar: [\n        ['style', ['style']],\n        ['font', ['bold', 'italic', 'underline', 'strikethrough', 'clear']],\n        ['color', ['color']],\n        ['para', ['ul', 'ol', 'paragraph']],\n        ['table', ['table']],\n        ['insert', ['link', 'picture', 'video']],\n        ['view', ['fullscreen', 'codeview', 'help']],\n      ],\n      callbacks: {\n        onImageUpload: function(files){\n          summernoteImageUpload(files, $basicNote);\n        },\n        onImageLinkInsert: function(url) {\n          insertDefaultWidthImage(url, $basicNote);\n        },\n        onBlurCodeview: function () {\n          // ensure that text entered inside code view is saved without having to switch back to visual mode\n          // more info: https://github.com/summernote/django-summernote/issues/127#issuecomment-714735251\n          let codeviewHtml = $(this).summernote('code');\n          $(this).val(codeviewHtml);\n        },\n      },\n      prettifyHtml: true,\n      codemirror: {\n        htmlMode: true,\n        lineWrapping: true,\n        lineNumbers: true,\n        mode: 'text/html'\n      },\n      codeviewFilter: false,\n      codeviewIframeFilter: true\n    });\n  }\n\n  // Expanded height text editor\n  var expandedEditors = $('.js-textEditor-expanded');\n  for (var i=0; i<expandedEditors.length; i++){\n    var $expandedNote = $(expandedEditors[i]);\n    $expandedNote.summernote({\n      height: 400,\n      toolbar: [\n        ['style', ['style']],\n        ['font', ['bold', 'italic', 'underline', 'strikethrough', 'clear']],\n        ['color', ['color']],\n        ['para', ['ul', 'ol', 'paragraph']],\n        ['table', ['table']],\n        ['insert', ['link', 'picture', 'video']],\n        ['view', ['fullscreen', 'codeview', 'help']],\n      ],\n      callbacks: {\n        onImageUpload: function(files){\n          summernoteImageUpload(files, $expandedNote);\n        },\n        onImageLinkInsert: function (url) {\n          insertDefaultWidthImage(url, $expandedNote);\n        },\n        onBlurCodeview: function () {\n          let codeviewHtml = $(this).summernote('code');\n          $(this).val(codeviewHtml);\n        },\n      },\n      prettifyHtml: true,\n      codemirror: {\n        htmlMode: true,\n        lineWrapping: true,\n        lineNumbers: true,\n        mode: 'text/html'\n      },\n      codeviewFilter: false,\n      codeviewIframeFilter: true\n    });\n\n    //modify the video node that summernote creates and make it responsive with bootstrap classes\n    var nativeVideoNodeBuilderFunc = $expandedNote.summernote('module', 'videoDialog').createVideoNode;\n    $expandedNote.summernote('module', 'videoDialog').createVideoNode = function(url) {\n      url = url.replace(/\\&.*/,'');\n      var tmp = nativeVideoNodeBuilderFunc(url);\n      var $embed = $('<p><br></p>');\n      var $iframeWrapper = $('<div>').addClass('ratio ratio-16x9');\n      $(tmp).appendTo($iframeWrapper);\n      $iframeWrapper.prependTo($embed);\n      return $embed[0];\n    };\n  }\n\n  // Slim text editor\n  var slimEditors = $('.js-textEditor-slim');\n  for (var i=0; i<slimEditors.length; i++){\n    var $slimNote = $(slimEditors[i]);\n    $slimNote.summernote({\n      height: 140,\n      toolbar: [\n        ['font', ['bold', 'italic', 'underline', 'strikethrough', 'clear']],\n        ['para', ['ul', 'ol', 'paragraph']],\n        ['insert', ['link', 'picture']],\n        ['view', ['help']],\n      ],\n      callbacks: {\n        onImageUpload: function(files){\n          summernoteImageUpload(files, $slimNote);\n        },\n        onImageLinkInsert: function (url) {\n          insertDefaultWidthImage(url, $slimNote);\n        }\n      }\n    });\n  }\n\n  // Simple text editor\n  var simpleEditors = $('.js-textEditor-simple');\n  for (var i = 0; i < simpleEditors.length; i++){\n    var $simpleNote = $(simpleEditors[i]);\n    $simpleNote.summernote({\n      height: 140,\n      toolbar: [\n        ['font', ['bold', 'italic', 'underline', 'strikethrough', 'clear']],\n        ['para', ['ul', 'ol', 'paragraph']],\n        ['view', ['help']],\n      ],\n    });\n  }\n\n  // Clean up initialized text editors before navigating away\n  $(document).one('turbolinks:before-cache', function() {\n    $('.js-textEditor-basic').summernote('destroy');\n    $('.js-textEditor-expanded').summernote('destroy');\n    $('.js-textEditor-slim').summernote('destroy');\n    $('.js-textEditor-simple').summernote('destroy');\n  });\n\n});\n\nfunction summernoteImageUpload(files, $summernote) {\n  var file = files[0]; // TODO multiple images at once?\n  // Get presign params and initiate upload\n  $.ajax({\n    url: '/s3/public_params',\n    method: 'get',\n    data: {\n      filename: file.name,\n      type: file.type\n    },\n    success: function(presignResponse){\n      setTimeout(function() {\n        sendSummernoteFileToS3(file, presignResponse, $summernote);\n      }, 0);\n    }\n  });\n}\n\nfunction sendSummernoteFileToS3(file, presignResponse, $summernote) {\n  // Presign succeeded, package file to send via AJAX\n  var url = new URL(presignResponse['url']);\n  // Upload file to S3\n  $.ajax({\n    url: url,\n    method: 'PUT',\n    headers: presignResponse['headers'],\n    data: file,\n    processData: false,\n    contentType: file.type,\n    success: function(awsResponse){\n      // File has been successfully uploaded to S3!\n      // Now we just have to insert the proper URL into the editor.\n      insertDefaultWidthImage(cdnImageUrl+url['pathname'], $summernote);\n    }\n  });\n}\n\nfunction insertDefaultWidthImage(url, $summernote) {\n  var $img = $('<img>').attr({ src: url, style: \"max-width: 100%;\" });\n  $summernote.summernote('insertNode', $img[0]);\n}\n\n$(document).on('cocoon:after-insert', function (e, $insertedItem) {\n\n  var slimEditors = $insertedItem.find('.js-textEditor-slim');\n  for (var i=0; i<slimEditors.length; i++){\n    var $summernote = $(slimEditors[i]);\n    $summernote.summernote({\n      height: 140,\n      toolbar: [\n        ['font', ['bold', 'italic', 'underline', 'strikethrough', 'clear']],\n        ['para', ['ul', 'ol', 'paragraph']],\n        ['insert', ['link', 'picture']],\n        ['view', ['help']],\n      ],\n      callbacks: {\n        onImageUpload: function(files){\n          summernoteImageUpload(files, $summernote);\n        }\n      }\n    });\n  }\n\n});\n","$(document).on('ready turbolinks:load', function(){\n\n  $('.js-input-counted').each(function(){\n    var $textarea = $(this)\n    var $counter = $textarea.parent().find('.js-input-counted-target')\n    var $counterContainer = $counter.parent()\n\n    updateCounterInput($textarea, $counter, $counterContainer)\n\n    $('.note-editable').on('input', function(){\n      var $noteTextarea= $(this)\n      updateCounterInput($textarea, $counter, $counterContainer, $noteTextarea)\n    })\n  })\n\n})\n\nfunction strip_html_tags(str) {\n  return str.replace(/<[^>]*>?/gm, '');\n}\n\nfunction updateCounterInput($textarea, $counter, $container, $noteTextarea= null){\n  var minLength =  $textarea.data('minlength')\n  var noteTextLength = $noteTextarea && strip_html_tags($noteTextarea.text()).length \n  var strippedInputCountedContainerLength = strip_html_tags($('.js-input-counted').val()).length\n\n  function currentLength(){\n    if (noteTextLength) {\n      return noteTextLength\n    } else if(strippedInputCountedContainerLength > 0) {\n      return strippedInputCountedContainerLength\n    } else {\n      return 0\n    }\n  }\n\n  $counter.text(`${currentLength()}/${minLength}`)\n  if (currentLength() < minLength) {\n    $container.addClass('error text-danger')\n    $('.fa-exclamation-triangle').show()\n  } else {\n    $container.removeClass('error text-danger')\n    $('.fa-exclamation-triangle').hide()\n  }\n}","$(document).on('turbolinks:load', function () {\n    var $createBtn  = $('#js-create-account-btn'),\n        $loginForm  = $('#js-login-form'),\n        $loginLink  = $('#js-login-link'),\n        $signUpForm = $('#js-registration-form');\n\n    $createBtn.on('click', function(){\n      $loginForm.hide();\n      $signUpForm.show();\n    });\n\n    $loginLink.on('click', function(e){\n      e.preventDefault();\n      $signUpForm.hide();\n      $loginForm.show();\n    });\n\n});","import { productImageSwiper } from '../swiper_init/swiper.js';\n\n$(document).on('turbolinks:load', function () {\n\n  var $supportModal = $(\".js-support-modal\");\n\n  $supportModal.on('show.bs.modal', function() {\n    productImageSwiper.keyboard.disable();\n  });\n\n  $supportModal.on('hide.bs.modal', function() { \n    productImageSwiper.keyboard.enable();\n  });\n\n});","$(document).on('turbolinks:load', function () {\n\n  // Reset YouTube video when modal is closed\n  var $modal = $('.js-modal-youtube');\n  if ($modal.length > 0) {\n    // Store video source for autoplay and auto-stop\n    var videoSrc = $('.yvideo').attr('src');\n\n    $modal.on('show.bs.modal', function (e) {\n      $('.yvideo').attr('src', videoSrc + \"&autoplay=1\");\n    });\n\n    $modal.on('hidden.bs.modal', function (e) {\n      $('.yvideo').attr('src', videoSrc);\n    });\n  }\n\n});\n","$(document).on('turbolinks:load', function () {\n\n  var $productContent;\n\n  if ($('.layout-products-show').length) {\n    $productContent = $('.js-product-content-show')\n  } else if ($('.layout-products-edit').length) {\n    $productContent = $('.note-editable');\n  };\n\n  if ($productContent != undefined && $productContent.length) {\n    var $noneResponsiveIframes = $productContent.find('iframe').filter(function(){\n      var $this = $(this);\n      var src = $this.attr('src') || '';\n      if ((src.includes('youtube') || src.includes('vimeo')) && $this.parent().not('div.ratio').length) {\n        return $this;\n      };\n    });\n\n    if ($noneResponsiveIframes.length) {\n      $noneResponsiveIframes.each(function(){\n        var $this = $(this);\n        var $wrapper = $('<div>').addClass('ratio ratio-16x9');\n\n        if ($this.parent('span.fr-video').length){\n          var $span = $this.parent();\n          $this.appendTo($wrapper);\n          $span.replaceWith($wrapper);\n        } else {\n          $this.wrap($wrapper);\n        };\n      });\n    };\n  };\n});\n","$(document).on('turbolinks:load', function () {\n  $('.js-product-variantPrice').on('change', function() {\n    $('.js-variant-container.active').removeClass('active');\n    $(this).closest('.js-variant-container').addClass('active');\n  });\n});\n","import { url_get_param, url_add_param, url_remove_param } from '../../util/methods';\n\n$(document).on('turbolinks:load', function () {\n\n  var $priceList = $('.js-product-variantPriceList');\n\n  if ($priceList.length > 0) {\n    var $priceCart = $('.js-price-cart');\n    var $addToCartBtn = $('.js-product-addToCart');\n    var $addToCartForm = $addToCartBtn.parent('form');\n    var $variantContainer = $('.js-variant-container');\n    var $variantPrices = $('.js-product-variantPrice');\n    var queryStr = window.location.search;\n    var varId = url_get_param('variant');\n\n    $variantPrices.on('change', function(e){\n      var $this = $(this);\n      var price = $this.data('price');\n      var variantId = $.trim($this.val());\n\n      if ($this.is(':checked')) {\n        $priceCart.text(price);\n        $addToCartForm.attr('action', function(_, action){\n          var baseAction = url_remove_param(action, 'variant');\n          return url_add_param(baseAction, 'variant', variantId);\n        });\n\n        $variantContainer.removeClass('active-variant');\n        $variantContainer.addClass('active-variant');\n      }\n    });\n\n    if (queryStr && varId){\n      $('#variant-' + varId).trigger('click');\n    }\n  }\n\n});\n","import { url_get_param, url_add_param, url_remove_param } from '../../util/methods';\n\n$(document).on('turbolinks:load', function () {\n\n  function isSortActive(){\n    return $('.reset-sort').length\n  }\n\n  function isSearchActive(){\n    return $('body').hasClass('layout-search-index')\n  }\n\n  function isInbox(){\n    return $('body').hasClass('layout-inbox-index')\n  }\n\n  function removeSortParams(){\n    var url = url_remove_param(location.href,'sort_sales')\n    url = url_remove_param(url,'sort_date')\n    url = url_remove_param(url,'sort_price')\n    url = url_remove_param(url,'sort_range')\n    url = url_remove_param(url,'sort_reviews')\n    url = url_remove_param(url,'sort_about')\n    url = url_remove_param(url,'sort_status')\n    url = url_remove_param(url,'sort_earnings')\n    url = url_remove_param(url,'sort_hearts')\n    url = url_remove_param(url,'sort_paid')\n    url = url_remove_param(url,'sort_amount')\n    url = url_remove_param(url,'sort_items_amount')\n    url = url_remove_param(url,'sort_claimed')\n    url = url_remove_param(url,'sort_license')\n    url = url_remove_param(url,'sort_role')\n    url = url_remove_param(url,'sort_rating')\n    url = url_remove_param(url,'sort_sale')\n    url = url_remove_param(url,'on_sale')\n    url = url_remove_param(url,'sort_version')\n    url = url_remove_param(url,'sort_referral_status')\n    return url\n  }\n\n  function removeOrderParams(){\n    var url = url_remove_param(location.href,'sort_price')\n    url = url_remove_param(url,'sort_sales')\n    url = url_remove_param(url,'sort_reviews')\n    url = url_remove_param(url,'sort_date')\n    return url\n  }\n\n  // When a product sort filter is toggled\n\t$('.js-sort-selectFilter').on('change', function() {\n\n    var $this = $(this);\n\t\tvar selected = $this.find('option:selected');\n    var type = selected.attr('data-type');\n    var value = selected.val();\n    var url = location.href;\n\n    if (type == 'reset') {\n      url = removeSortParams();\n    } else if ($this.hasClass('js-order-by') ) {\n      url = removeOrderParams();\n      url = url_remove_param(url,'page') //reset to first page whenever a new sort is applied\n      url = url_add_param(url, type, value);\n    } else if (isSearchActive()) {\n      url = removeSortParams();\n      url = url_add_param(url, type, value);\n    } else if (isInbox()) {\n      url = url_add_param(location.href, type, value);\n    } else {\n      url = url_add_param(location.href, type, value);\n    }\n\n\t\tTurbolinks.visit(url);\n\t\treturn false;\n\t});\n\n  /*\n  *\tOn page load, check for any params, highlight active filter dropdowns, and build active labels\n  * @since 1.2.5\n  */\n  var supportedFilters   = [\n                    ['sort_sales', url_get_param('sort_sales')],\n                    ['sort_earnings', url_get_param('sort_earnings')],\n                    ['sort_amount', url_get_param('sort_amount')],\n                    ['sort_items_amount', url_get_param('sort_items_amount')],\n                    ['sort_date', url_get_param('sort_date')],\n                    ['sort_price', url_get_param('sort_price')],\n                    ['sort_range', url_get_param('sort_range')],\n                    ['sort_hearts', url_get_param('sort_hearts')],\n                    ['sort_about', url_get_param('sort_about')],\n                    ['sort_status', url_get_param('sort_status')],\n                    ['sort_paid', url_get_param('sort_paid')],\n                    ['sort_event_name', url_get_param('sort_event_name')],\n                    ['sort_campaign', url_get_param('sort_campaign')],\n                    ['sort_role', url_get_param('sort_role')],\n                    ['sort_license', url_get_param('sort_license')],\n                    ['sort_claimed', url_get_param('sort_claimed')],\n                    ['sort_reviews', url_get_param('sort_reviews')],\n                    ['sort_sale', url_get_param('sort_sale')],\n                    ['on_sale', url_get_param('on_sale')],\n                    ['sale_campaign', url_get_param('sale_campaign')],\n                    ['sort_rating', url_get_param('sort_rating')],\n                    ['sort_version', url_get_param('sort_version')],\n                    ['sort_referral_status', url_get_param('sort_referral_status')]\n\t\t\t\t\t\t\t\t\t]\n\n\t$.each(supportedFilters, function(index, value){\n\n\t\tvar sort_val = value[1]\n\t\t,\t  sort_type = value[0]\n\n    if (sort_val && window.location.search.indexOf(sort_type) > -1) {\n      $('option[data-type=\"'+sort_type+'\"][value=\"'+sort_val+'\"]').prop('selected', true);\n      buildFilterLabel(sort_type);\n    }\n\t});\n\n  // remove a filter tag and param\n  $('div[data-filter-tag] i').click(function(e){\n    e.preventDefault();\n\n    var tag = $(this).closest('div');\n    var type = tag.data('filter-type');\n    var target = tag.data('filter-tag');\n\n    tag.remove();\n    var url = url_remove_param(location.href, target);\n    url = url_remove_param(url,'page'); //reset to first page whenever a filter or sort is removed\n    Turbolinks.visit(url);\n  });\n\n  // Build the label for the active sorting filter\n  function buildFilterLabel(item){\n    if( !$('#js-sort-tag-'+item).length ) {\n      $('#js-sort-tags').append(\n        '<div data-filter-type=\"' + item + '\" data-filter-tag=\"' + item + \n        '\" id=\"js-sort-tag-' + item + '\" class=\"badge badge-products-filter me-2 fw-normal rounded-4\">' + \n        '<i class=\"fas fa-times me-1\" role=\"button\"></i>' + \n        '<span>' + item.split('_')[1] + '</span>'\n      ).addClass('has-filters');\n      buildClearAllFiltersLabel()\n    }\n  }\n\n  function buildClearAllFiltersLabel(){\n    if( !$('.js-sort-reset').length ) {\n      $('#js-sort-tags').prepend('<a href=\"#\" class=\"me-3 js-sort-reset fw-bold text-black\">Clear all Filters</a>')\n    }\n  }\n\n  // Reset\n  $('.js-sort-reset').on('click', function(e){\n    e.preventDefault();\n    var url;\n    url = removeSortParams()\n    Turbolinks.visit(url)\n  })\n\n  $('.js-sort-linkFilter').each(function () {\n    $(this).on('click', function (e) {\n      e.preventDefault();\n      var $this = $(this);\n\n      var type = $this.attr('data-type');\n      var value = $this.attr('data-value');\n\n      if (type === 'sort_range') {\n        var url = url_add_param(location.href, type, [$this.attr('data-value-min'), $this.attr('data-value-max')] );\n      } else if (type === 'sort_hearts' && value === 'reset') {\n        var url = url_remove_param(location.href, type)\n      } else if (type === 'on_sale') {\n        var url;\n        $this.prop('checked') ? url = url_add_param(location.href, type, true) : url= url_remove_param(location.href, type)\n      } else if (type === 'category') {\n        var params = decodeURIComponent(window.location.search.substring(1));\n        var url = $this.attr('href') + '?' + params\n      } else {\n        var url = url_add_param(location.href, type, value);\n      }\n\n      url = url_remove_param(url,'page'); //reset to first page whenever a new filter is applied\n      Turbolinks.visit(url);\n      return false;\n    });\n  });\n});\n","$(document).on('turbolinks:load', function () {\n  var savedGridRowAmount = localStorage.getItem('gridRowAmount')\n  var $gridImgButton = $('.js-grid-img');\n  var $productWrapper = $('.js-product-wrapper');\n\n  // Restore state from localStorage\n  if (savedGridRowAmount) {\n    $gridImgButton.removeClass('active-row-columns-list');\n    $gridImgButton.each(function () {\n      if ($(this).parent().data('row-amount') == savedGridRowAmount) {\n        $(this).addClass('active-row-columns-list');\n      }\n    });\n  }\n  \n  if (savedGridRowAmount == 4) {\n    $productWrapper.each(function () {\n      $(this).removeClass('col-sm-6 col-md-6 col-lg-4').addClass('col-sm-6 col-md-4 col-lg-3');\n    });\n  } else if (savedGridRowAmount == 3) {\n    $productWrapper.each(function () {\n      $(this).removeClass('col-sm-6 col-md-4 col-lg-3').addClass('col-sm-6 col-md-6 col-lg-4');\n    });\n  }\n\n  // Handle click events\n  $('.js-grid-img').on('click', function(e){\n    e.preventDefault()\n    var $productWrapper = $('.js-product-wrapper')\n    var $gridAmount = $(this).parent().data('row-amount');\n\n    $('.js-grid-img').removeClass('active-row-columns-list')\n    $(this).addClass('active-row-columns-list')\n\n    if ($gridAmount == 4){\n      $productWrapper.each(function() {\n        $(this).removeClass('col-sm-6 col-md-6 col-lg-4').addClass('col-sm-6 col-md-4 col-lg-3');\n        localStorage.setItem('gridRowAmount', $gridAmount);\n      });\n    } else if ($gridAmount == 3){\n      $productWrapper.each(function() {\n        $(this).removeClass('col-sm-6 col-md-4 col-lg-3').addClass('col-sm-6 col-md-6 col-lg-4');\n        localStorage.setItem('gridRowAmount', $gridAmount);\n      });\n    }\n  })\n});\n","const initializeAnalytics = () => {\n  const path = window.location.pathname;\n\n  const isTrackedPage = (path) => {\n    const firstPathSegment = path.split(\"/\")[1];\n    return firstPathSegment !== \"admin\";\n  };\n\n  const isTrackingSetUp = () => {\n    return !!window.dataLayer && !!window.gtmId && !!window.gaId;\n  };\n\n  if (isTrackedPage(path) && isTrackingSetUp()) {\n    const logAnalytics = (eventName, eventData, updatedProductViewInfo = {}) => {\n      try {\n        const userId = typeof window.currentUser !== \"undefined\" ? window.currentUser.id : null;\n\n        let gtmData = {\n          user_id: userId,\n          gtm: {\n            pageTitle: eventData.pageTitle,\n            pagePath: eventData.pagePath,\n            eventName: eventName,\n            elementTarget: eventData.elementTarget || \"\",\n            productSlug: eventData.productSlug || \"\",\n            productViewInfo: updatedProductViewInfo,\n          },\n        };\n\n        window.dataLayer.push(gtmData);\n\n        if (typeof window.gtag === \"function\") {\n          gtag(\"event\", eventName, {\n            ...eventData,\n            send_to: window.gaId,\n          });\n        };\n      } catch (error) {\n        console.warn(\"Error logging analytics: \" + error.message);\n      };\n    };\n\n    const updateProductData = () => {\n      if (isTrackedPage(path) && isTrackingSetUp()) {\n        try {\n          return window.productData ? (({ image_data, content, ...rest }) => rest)(window.productData) : {};\n\n        } catch (error) {\n          console.warn(\"Error updating product view info: \" + error.message);\n        };\n      };\n    };\n\n    const getEcommerceStep = (path) => {\n      if (isTrackedPage(path) && isTrackingSetUp()) {\n        try {\n          switch (true) {\n            case /\\/products\\/[^/]+\\/?$/.test(path):\n              return \"view_item\";\n            case /\\/cart\\/checkout\\/?$/.test(path):\n              return \"begin_checkout\";\n            case $(document.body).text().includes(\"Order completed successfully!\"):\n              return \"purchase\";\n            default:\n              return null;\n          };\n\n        } catch (error) {\n          console.warn(\"Error getting ecommerce step: \" + error.message);\n        };\n      };\n    };\n\n    const handleEcommerceClick = (event) => {\n      if (isTrackedPage(path) && isTrackingSetUp()) {\n        try {\n          const clickedElement = $(event.target);\n          const updatedProductViewInfo = updateProductData(window.productData);\n\n          if (clickedElement.hasClass(\"btn-add-to-cart\")) {\n            logAnalytics(\"add_to_cart\", {}, updatedProductViewInfo);\n          } else if (clickedElement.closest(\".card-product\").length) {\n            logAnalytics(\"product_click\", {\n              elementTarget: clickedElement[0].outerHTML,\n            }, updatedProductViewInfo);\n          };\n          \n        } catch (error) {\n          console.warn(\"Error handling ecommerce click: \" + error.message);\n        };\n      };\n    };\n\n    $(document).on(\"click\", handleEcommerceClick);\n\n    try {\n      if (isTrackedPage(path) && isTrackingSetUp()) {\n        const updatedProductViewInfo = updateProductData(window.productData);\n        const pageViewInfo = {\n          pagePath: path,\n          pageTitle: document.title,\n        };\n\n        if ($(\"script[src*='googletagmanager.com/gtag/js']\").length === 0) {\n          const script = $(\"<script>\", {\n            src: `https://www.googletagmanager.com/gtag/js?id=${window.gtmId}`,\n            async: true\n          });\n          $(\"head\").append(script);\n        };\n\n        logAnalytics(\"page_view\", pageViewInfo)\n\n        if (getEcommerceStep(path)) {\n          logAnalytics(getEcommerceStep(path), pageViewInfo, updatedProductViewInfo);\n        };\n      };\n    } catch (error) {\n      console.warn(\"Error initializing analytics: \" + error.message);\n    };\n  };\n};\n\n$(document).on('turbolinks:load', initializeAnalytics);\n","// Instructions:\n//   - Add 'copy-text' id to the value you want written to the clipboard.\n//   - Add the class 'js-copy-text' to any button you want to activate the copyText component.\n//   - Set the 'data-copy-target' attribute on the button to the ID of the element containing the text to copy ie: id=\"copy-text\".\n// \n// Example:\n// <p>\n//     Hello World! Copy this link:\n//     <a href=\"http://blendermarket.com/?ref=<%= @affiliate.id %>\" id=\"copy-text\">http://blendermarket.com/?ref=<%= @affiliate.id %></a>\n\n//     <button class=\"btn btn-primary btn-sm js-copy-text\" data-copy-target=\"copy-text\">\n//         <i class=\"fa fa-solid fa-copy\"></i> Copy\n//     </button>\n// </p>\n// \n\nfunction copyText(event) {\n    event.preventDefault();\n    var $btn = $(event.currentTarget);\n    var textToCopyId = $btn.data('copy-target');\n    var $textToCopyElement = $('#' + textToCopyId);\n    var textToCopy = $textToCopyElement.attr('href') || $textToCopyElement.text() || $textToCopyElement.val();\n\n    navigator.clipboard.writeText(textToCopy).then(function() {\n        $btn.html('<i class=\"\"></i> Copied');\n        $btn.removeClass('btn-primary').addClass('btn-success');\n        $btn.css('cursor', 'not-allowed');\n\n        setTimeout(function() {\n            $btn.html('<i class=\"fa fa-solid fa-copy\"></i> Copy');\n            $btn.removeClass('btn-success').addClass('btn-primary');\n            $btn.css('cursor', 'pointer');\n            $btn.prop('disabled', false);\n        }, 1000);\n    });\n}\n\n$(document).on('turbolinks:load', function() {\n    $('.js-copy-text').on('click', copyText);\n});\n","$(document).on('turbolinks:load', function() {\n  if ($(\".email-subscribe-form\").length) {\n    const $input = $(\".email-subscribe-form input[type='email']\");\n    const element = $input.get(0);\n\n    $(\".email-subscribe-form form\").on(\"submit\", function(event) {\n      const emailFormat = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,63}$/;\n\n      if (!emailFormat.test($input.val())) {\n        event.preventDefault();\n        element.setCustomValidity(\"Please enter a valid email address in the format of user@example.com.\");\n        element.reportValidity();\n      } else {\n        element.setCustomValidity(\"\");\n      }\n    });\n\n    $input.on(\"input\", function() {\n      element.setCustomValidity(\"\");\n      element.reportValidity();\n    });\n  };\n});\n","$(document).on('turbolinks:load', function () {\n\n  if ($('form.edit_user').length) {\n    var $payoutMethodSelect = $('.js-payout-method-select');\n\n    $payoutMethodSelect.on('change', function() {\n      let $selected = $(this).val();\n      let $paypalEmailInput = $('.js-paypal-email-input-wrapper');\n      let $stripeConnect = $('.js-stripe-connect-wrapper');\n\n      if ($selected === 'paypal') {\n        $stripeConnect.removeClass('show');\n        $paypalEmailInput.addClass('show');\n      } else if ($selected === 'stripe') {\n        $paypalEmailInput.removeClass('show');\n        $stripeConnect.addClass('show');\n      } else {\n        $paypalEmailInput.removeClass('show');\n        $stripeConnect.removeClass('show');\n      };\n    });\n  };\n});","$(document).on('turbolinks:load',function(){\n\n  var $couponForm = $('.js-coupon-form');\n  if ($couponForm.length > 0){\n\n    // COUPON FORM SETUP\n\n    var val = $('#coupon_coupon_type').val();\n    toggleCouponType(val);\n  \t$('#coupon_coupon_type').on('change', function(){\n  \t\ttoggleCouponType($(this).val());\n  \t});\n\n    function toggleCouponType(val){\n      if ( val == 'flat' ) {\n        $('.coupon_discount_flat').show();\n        $('.coupon_discount_percent').hide();\n      } else {\n        $('.coupon_discount_flat').hide();\n        $('.coupon_discount_percent').show();\n      }\n    }\n\n    // PRODUCT VARIANT SELECT SETUP\n    // TODO merge with components/input_select/input_product_select.js\n\n    $couponForm.on('cocoon:after-insert', function(){\n      var $productSelects = $('.js-product-select');\n      $.each($productSelects, function(i, el){\n        $(el).attr('data-number', i); // set indexes for updating variant selects\n      });\n      $('.js-select').select2({ width: '100%' }); // re-initialize select2\n    });\n\n    $(document).on('change', '.js-product-select', function(){\n      var $this = $(this);\n      var val = $this.find('option:selected').val();\n      var inputNumber = $this.data('number');\n      $.ajax({\n        type:'GET',\n        url: '/product_variants?product=' + val + '&input_number=' + inputNumber,\n        dataType : 'script'\n      });\n    });\n\n    // INCLUDE ALL PRODUCTS SETUP\n    var $productsToggle = $('.js-coupon-productsToggle');\n    var $productsTarget = $('.js-coupon-productsTarget');\n\n    var updateProductsTarget = function(){\n      if ($productsToggle.prop('checked')) {\n        $productsTarget.hide();\n        // remove any existing products\n        $productsTarget.find('.remove_fields').click();\n      } else {\n        $productsTarget.show();\n      }\n    }\n\n    $productsToggle.on('change', updateProductsTarget);\n    updateProductsTarget();\n\n    // AFFILIATE COUPON SETUP\n    var $affiliateToogle = $('.js-coupon-affiliate-toogle');\n    var $affiliateTarget = $('.js-coupon-affiliate-target');\n    var $affiliateCardHeader = $affiliateTarget.prev('div.card-header');\n\n    var updateAffiliateTarget = function(){\n      if ($affiliateToogle.prop('checked')) {\n        $affiliateTarget.show();\n        $affiliateCardHeader.removeClass('border-bottom-0');\n\n        // cocoon nested creator_affiliate_coupon field\n        var $nestedAffiliateCoupon = $affiliateTarget.find('div.nested-fields');\n        if (!$nestedAffiliateCoupon.length) {\n          // no nested field exists, so we add one\n          $('.js-coupon-add-nested-affiliate-field').trigger('click');\n        } else {\n          // there is an existing one\n          // because this is a has_one association we can't send multiple to the controller\n          // we just have to modify the values of the existing one that may have been marked _destroy: true\n          $nestedAffiliateCoupon.show();\n          var $destroyAffiliateCoupon = $nestedAffiliateCoupon.find('input[id*=\"_destroy\"]');\n\n          if ($destroyAffiliateCoupon.val() === '1') {\n            $destroyAffiliateCoupon.val('false');\n            $nestedAffiliateCoupon.find('select.js-coupon-affiliate-select').val(null).trigger('change');\n          }\n        }\n\n      } else {\n        // remove cocoon nested creator_affiliate_coupon field\n        if ($affiliateTarget.find('div.nested-fields').length) {\n          $('.js-coupon-remove-nested-affiliate-field').trigger('click');\n        }\n        $affiliateTarget.hide();\n        $affiliateCardHeader.addClass('border-bottom-0');\n      }\n    }\n\n    $affiliateToogle.on('change', updateAffiliateTarget);\n    updateAffiliateTarget();\n  }\n\n});\n","$(document).on('turbolinks:load', function(){\n\n  var $adminOrderForm = $('.js-admin-order-form');\n\n  if ($adminOrderForm.length > 0) {\n\n    var $orderSubTotal = $('.js-admin-order-sub-total');\n    var $taxAmount = $('.js-admin-order-tax-amount');\n    var $orderTotal = $('.js-admin-order-total-amount');\n    var $orderItems = $('.js-admin-order-item');\n\n    if ($orderItems.length) {\n      $orderItems.each(function() {\n        fieldsInit(this);\n      });\n    };\n\n    $('.new_order, .edit_order').on('cocoon:after-insert', function(e, insertedItem) {\n      fieldsInit(insertedItem);\n    }).on('cocoon:before-remove', function(e, insertedItem) {\n      var $itemPrice = $(insertedItem).find('.js-admin-order-item-price').val();\n      if ($itemPrice) calcSubTotal($itemPrice);\n    });\n\n    $orderSubTotal.on('change input', function(){\n      (!$(this).val() || $(this).val() <= 0) ? $taxAmount.val(0) : null;\n      calcOrderTotal();\n    });\n\n    $taxAmount.on('input', function(){\n      calcOrderTotal();\n    });\n\n    function calcSubTotal(subtract = 0) {\n      if (subtract) {\n        $orderSubTotal.val(parseInt($orderSubTotal.val()) - parseInt(subtract)).trigger('change');\n      } else {\n      \n        let $nestedItems = $adminOrderForm.find('.nested-fields')\n        let $totalPrice = $.map($nestedItems, function(el){\n          var $price = $(el).find('.js-admin-order-item-price').val();\n          return $price ? parseInt($price) : 0;\n        }).reduce((sum, price) => sum + price);\n\n        $orderSubTotal.val($totalPrice).trigger('change');\n      }\n    };\n\n    function calcOrderTotal(){\n      let subTotal = parseInt($orderSubTotal.val()) || 0;\n      let taxAmount = parseInt($taxAmount.val()) || 0;\n      $orderTotal.val(subTotal + taxAmount);\n    }\n\n    function fieldsInit(element) {\n      let $productSelects = $('.js-product-select');\n      let $variantSelect = $(element).find('.js-product-variant-select');\n      let $itemPrice = $(element).find('.js-admin-order-item-price');\n      let $itemName = $(element).find('.js-admin-order-item-name');\n      let $itemVendorId = $(element).find('.js-admin-order-item-vendor-id');\n      let $itemSaleId = $(element).find('.js-admin-order-item-sale-id');\n\n      $.each($productSelects, function(i, el){\n        $(el).attr('data-number', i); // set indexes for updating variant selects\n      });\n\n      $('.js-select').select2({ width: '100%' }); // re-initialize select2\n\n      $productSelects.on('change', function(){\n        let $this = $(this);\n        let val = $this.find('option:selected').val();\n        let inputNumber = $this.data('number');\n        $itemPrice.prop('disabled', false);\n\n        if (val !== ''){\n          getProductVariants(val, inputNumber);\n          getProductDetails(val, $itemName, $itemPrice, $itemVendorId, $itemSaleId);\n        };\n      });\n\n      $variantSelect.on('change', function(){ \n        let val = $(this).val();\n        if (val) {\n          getVariantPrice(val, $itemPrice);\n        } \n      });\n\n      $itemPrice.on('change input', function(){\n        calcSubTotal();\n      });\n    };\n\n    function getProductDetails(id, $nameField, $priceField, $vendorIdField, $saleIdField) {\n      $.ajax({\n        type: 'GET',\n        url: '/api/v1/products/' + id,\n        dataType: 'json',\n        success: function(response){\n          updateItemDetails($nameField, $priceField, $vendorIdField, $saleIdField, response);\n        }\n      });\n    };\n\n    function getProductVariants(id, inputNumber) {\n      $.ajax({\n        type:'GET',\n        url: '/product_variants?product=' + id + '&input_number=' + inputNumber,\n        dataType: 'script'\n      });\n    };\n\n    function getVariantPrice(id, $priceField) {\n      $.ajax({\n        type: 'GET',\n        url: '/api/v1/product_variants/' + id,\n        dataType: 'json',\n        success: function(response) {\n          $priceField.val(response['price']).trigger('change');\n        }\n      });\n    };\n\n    function updateItemDetails($nameField, $priceField, $vendorIdField, $saleIdField, productObj) {\n      $priceField.val(productObj['price']).trigger('change');\n      $nameField.val(productObj['title']);\n      $vendorIdField.val(productObj['user_id']);\n      $saleIdField.val(productObj['sale_campaign_id']);\n\n      if (productObj['sale_campaign_id']) {\n        $priceField.parent().next('.js-sale-label').text('Item on Sale!');\n      } else {\n        $priceField.parent().next('.js-sale-label').text('');\n      }\n    };\n  };\n});","$(document).on('turbolinks:load', function(){\n  var $payoutsForm = $('.js-payouts-form');\n\n  if ($payoutsForm.length > 0) {\n\n    var $payoutConfirm = $('.js-payouts-process_confirm');\n    var $payoutBtn = $('.js-payouts-process_btn');\n\n    $payoutConfirm.on('change', function() {\n      if (this.checked) {\n        $payoutBtn.prop('disabled', false);\n      } else {\n        $payoutBtn.prop('disabled', true);\n      }\n    });\n\n    var $detailsToggle = $('.js-payouts-details_toggle');\n    var $detailsForm = $('.js-payouts-details_form');\n    var $detailsDisplay = $('.js-payouts-details_display');\n\n    $detailsToggle.click(function(e){\n      e.preventDefault();\n\n      $('.chosen-container').each(function() {\n        $(this).attr('style', 'width: 100%');\n      });\n\n      $detailsDisplay.hide();\n      $detailsToggle.hide();\n      $detailsForm.show();\n    });\n\n\n    var $markAsPaid = $('.js-payouts-markAsPaid');\n    $markAsPaid.click(function(e){\n      e.preventDefault();\n\n      var $this = $(this);\n\n      // hacky way to check if this button should hit the server backend - we still have backend checks\n      // in case of weird behavior or if someone tries to circumvent this\n      if ($this.text() == 'Mark as Paid') {\n        if (confirm($this.data('js-confirm'))) {\n          $this.addClass('disabled');\n          $this.text('Marking ...');\n\n          var postUrl = '/admin/user_payouts/' + $this.data('user-payout-id') + '/mark_as_paid';\n          $.post({\n            url: postUrl,\n            dataType: 'json'\n          }).then(function(response){\n            if (response['success'] == true) {\n              $this.text('Paid');\n              $this.removeClass('btn-warning disabled').addClass('btn-success cursor-default');\n              var $status = $this.closest('tr').find('.js-payout-userPayoutStatus');\n              $status.empty();\n              $status.html('<span class=\"badge bg-success\"><i class=\"fas fa-check\"></i></span> <strong>Paid</strong>');\n            } else {\n              $this.text('Error');\n              $this.removeClass('btn-warning disabled').addClass('btn-danger cursor-default');\n            }\n          });\n        }\n      }\n\n    });\n\n  }\n});\n","$(document).on('turbolinks:load', function () {\n  var $prodFiles = $('.js-productReview-files-flag');\n  var $primaryInfo = $('.js-productReview-primary-info-flag');\n  var $categoriesSoftwareLicense = $('.js-productReview-categories-software-licensing-flag');\n  var $productPage = $('.js-productReview-product-page-flag');\n  var $prodImages = $('.js-productReview-images-flag');\n  var $prodVariations = $('.js-productReview-variations-flag');\n  var $docsFaqs = $('.js-productReview-docs-faq-flag');\n  var $prodReviewSubmitBtn = $('.js-submit-product-review')\n\n  var $flagsAndSubmit = [$prodFiles, $primaryInfo, $categoriesSoftwareLicense, $productPage, $prodImages, $prodVariations, $docsFaqs, $prodReviewSubmitBtn]\n\n  $flagsAndSubmit.map(function(e){\n    e.on('click', function(e){\n      var $flag = $(e.target)\n      var $isFlagged = $flag.attr('data-isflagged')\n      updateFlag($flag, $isFlagged);\n      sendFlag($flag)\n    })\n  })\n})\n\nfunction updateFlag($flag, isFlagged){\n  var $navFlag = findNavFlag($flag)\n\n  if (isFlagged === 'false'){\n    $flag.removeClass('far').addClass('fas flagged')\n    $flag.attr('data-isflagged', true)\n    $navFlag.removeClass('d-none')\n\n  } else if(isFlagged === 'true') {\n    $flag.removeClass('fas flagged').addClass('far')\n    $flag.attr('data-isflagged', false)\n    $navFlag.addClass('d-none')\n  }\n}\n\nfunction sendFlag(flag) {\n  var flagSelectorDataAttr = flag.attr('data-isflagged')\n  var flagChecked = flagSelectorDataAttr === 'true'\n\n  if (flag.hasClass('js-productReview-files-flag')) {\n    $('#product_review_product_files').val(flagSelectorDataAttr)\n    updateReviewMessage(\"Product Files\", flagChecked)\n  }\n  else if (flag.hasClass('js-productReview-primary-info-flag')) {\n    $('#product_review_primary_info').val(flagSelectorDataAttr)\n    updateReviewMessage(\"Primary Info\", flagChecked)\n  } \n  else if (flag.hasClass('js-productReview-categories-software-licensing-flag')) {\n    $('#product_review_categories_software_and_licensing').val(flagSelectorDataAttr)\n    updateReviewMessage(\"Categories, Software &amp; Licensing\", flagChecked)\n  }\n  else if (flag.hasClass('js-productReview-product-page-flag')) {\n    $('#product_review_product_page').val(flagSelectorDataAttr)\n    updateReviewMessage(\"Product Page\", flagChecked)\n  }\n  else if (flag.hasClass('js-productReview-images-flag')) {\n    $('#product_review_image_gallery').val(flagSelectorDataAttr)\n    updateReviewMessage(\"Image Gallery\", flagChecked)\n  }\n  else if (flag.hasClass('js-productReview-variations-flag')) {\n    $('#product_review_product_variations').val(flagSelectorDataAttr)\n    updateReviewMessage(\"Product Variations\", flagChecked)\n  }\n  else if (flag.hasClass('js-productReview-docs-faq-flag')) {\n    $('#product_review_docs_and_faq').val(flagSelectorDataAttr)\n    updateReviewMessage(\"Documentation &amp; FAQ\", flagChecked)\n  }\n}\n\nfunction findNavFlag($flag){\n  // this function splits up the list of class names on a flag, and then appends '-nav' to the found class name\n  $flagClassAry = $flag.attr('class').split(\" \")\n  var findFlag = $flagClassAry.find((className)=> className.startsWith('js-productReview'))\n  var classNav = findFlag + \"-nav\"\n  return $(\".\" + classNav)\n} \n\nfunction updateReviewMessage(header, flagChecked) {\n  if (flagChecked) {\n    addHeaderToReviewMessage(header)\n  } else {\n    removeHeaderFromReviewMessage(header)\n  }\n}\n\nfunction addHeaderToReviewMessage(header){\n  var $reviewMessage = $('.js-productReview-reviewMessage')\n  var text = $reviewMessage.summernote('code')\n\n  // Account for blank/empty form\n  if (text == \"<p><br></p>\") {\n    text = \"\"\n  }\n\n  // Add header if not present\n  if (!text.includes(\"<p><strong>\" + header + \"</strong></p>\")) {\n    text += \"<p><strong>\" + header + \"</strong></p>\"\n    text += \"<p>&nbsp;</p>\"\n  }\n\n  $reviewMessage.summernote('code', text)\n}\n\nfunction removeHeaderFromReviewMessage(header){\n  var $reviewMessage = $('.js-productReview-reviewMessage')\n  var text = $reviewMessage.summernote('code')\n\n  // Build regex based on provided header to remove it\n  // <p><strong>HEADER</strong></p> followed by an optional <p>&nbsp;</p> with possible whitespace in between.\n  const escapedHeader = header.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n  const headerRegex = new RegExp(`<p><strong>${escapedHeader}</strong></p>(?:\\\\s*<p>&nbsp;</p>)?`, 'igm');\n\n  var newText = text.replace(headerRegex, \"\")\n  $reviewMessage.summernote('code', newText)\n}\n","$(document).on('turbolinks:load', function () {\n\n  var $reviewEditProductForm = $('.js-productReview-productForm')\n  var $reviewEditProductSubmit = $('.js-productReview-productForm-submit')\n\n  $reviewEditProductSubmit.on('click', function(e){\n    e.preventDefault()\n    $reviewEditProductForm.trigger('submit')\n  })\n\n  $reviewEditProductForm.on('ajax:success', function(){\n    swal({\n      title: \"Product has been saved\",\n      text: \"Click OK to continue reviewing the product.\",\n      icon: \"success\",\n      buttons: {\n        cancel: {\n          text: \"Cancel\",\n          value: false,\n          visible: false,\n          className: \"\",\n          closeModal: true,\n        },\n        confirm: {\n          text: \"OK\",\n          value: true,\n          visible: true,\n          className: \"\",\n          closeModal: true\n        }\n      }\n    })\n  })\n\n  $reviewEditProductForm.on('ajax:error', function (e, xhr) {\n    var errors = JSON.parse(xhr.responseText).errors.join(', ')\n\n    swal({\n      title: \"Error\",\n      text: `Product update failed: ${errors}`,\n      icon: \"error\",\n      buttons: {\n        confirm: {\n          text: \"OK\",\n          value: true,\n          visible: true,\n          className: \"\",\n          closeModal: true\n        }\n      }\n    })\n  })\n\n})\n","$(document).on('turbolinks:load', function () {\n\n  var $refundForm = $('.js-adminRefund-form');\n\n  if ($refundForm.length > 0) {\n\n    var $checkboxes = $refundForm.find('.js-adminRefund-product');\n    var $status = $refundForm.find('.js-adminRefund-status');\n\n    $status.on('change', function(e){\n      if ($(this).val() == 'refunded') {\n        $checkboxes.prop('checked', 'true');\n      }\n    });\n\n  }\n\n  $refundForm.on('submit', function() {\n    $('body').addClass('loading').prepend('<div class=\"loading-messages\">Processing Refund ...</div>');\n  })\n\n});\n","$(document).on('turbolinks:load', function () {\n\n  var $saleCampaignForm = $('.js-saleCampaign-form');\n\n  if ($saleCampaignForm.length > 0) {\n    var $heroTrigger = $('.js-saleCampaign-heroTrigger');\n    var $heroFields = $('.js-saleCampaign-heroFields');\n\n    var $popularTrigger = $('.js-saleCampaign-popularTrigger');\n    var $popularFields = $('.js-saleCampaign-popularFields');\n\n    $heroTrigger.on('change', function(){\n      if (this.checked) {\n        $heroFields.show();\n      } else {\n        $heroFields.hide();\n      }\n    });\n\n    if (!$heroTrigger[0].checked) {\n      $heroFields.hide();\n    }\n\n    $popularTrigger.on('change', function(){\n      if (this.checked) {\n        $popularFields.show();\n      } else {\n        $popularFields.hide();\n      }\n    });\n\n    if (!$popularTrigger[0].checked) {\n      $popularFields.hide();\n    }\n  }\n\n});\n","$(document).on('turbolinks:load', function(){\n  var $form = $('.js-affiliate-form');\n  if ($form.length > 0) {\n    var $productsToggle = $('.js-affiliate-productsToggle');\n    var $productsTarget = $('.js-affiliate-productsTarget');\n\n    var updateProductsTarget = function(){\n      if ($productsToggle.prop('checked')) {\n        $productsTarget.hide();\n        // remove any existing products\n        $productsTarget.find('.remove_fields').click();\n      } else {\n        $productsTarget.show();\n      }\n    }\n\n    $productsToggle.on('change', updateProductsTarget);\n    updateProductsTarget();\n  }\n});\n","$(document).on('turbolinks:load', function () {\n\n  var $submit = $('.js-creator-emailSendSubmit');\n  var $sendToAllCustomers = $('.js-send-to-all-customers-checkbox');\n  var $hintText = $('.js-send-to-all-hint');\n  var $productNestedFields = $('.js-email-product-nested-fields');\n  var $productSelect = $('.js-email-product-select');\n  var $variantSelect = $('.js-email-product-variant-select');\n\n  if ($submit.length > 0) {\n    var originalEmailSendText = $submit.text();\n    var $sendInput = $('.js-creator-emailSendInput');\n    $('.js-creator-emailSendSwitch').on('change', function(){\n  \t\tif( $(this).is(':checked') ) {\n  \t\t\t$submit.removeClass('btn-primary').addClass('btn-danger').text('Send Email to Customers');\n        $sendInput.val('true');\n  \t\t} else {\n  \t\t\t$submit.removeClass('btn-danger').addClass('btn-primary').text(originalEmailSendText);\n        $sendInput.val('false');\n  \t\t}\n  \t});\n  }\n\n  $sendToAllCustomers.is(':checked') ? hideEmailProductNestedFields() : showEmailProductNestedFields();\n\n  $sendToAllCustomers.on('change', function(){\n    let $this = $(this);\n    $this.is(':checked') ? hideEmailProductNestedFields() : showEmailProductNestedFields();\n  });\n\n  $productSelect.on('change', function(){\n    let $this = $(this);\n    let val = $this.find('option:selected').val();\n\n    if (val !== ''){\n      getProductVariants(val);\n    }\n  });\n\n  function getProductVariants(id) {\n    $.ajax({\n      type:'GET',\n      url: '/api/v1/product_variants?product=' + id,\n      dataType: 'json',\n      success: function(response){\n        setupVariantSelectDropdown(response)\n      }\n    });\n  };\n\n  function setupVariantSelectDropdown(variants) {\n    if (variants.length) {\n      // enable dropdown and preselect 'All Variants' (no variant value)\n      $variantSelect.prop('disabled', false).empty().append(new Option('All Variants', '', true, true));\n\n      variants.forEach(function(variant){\n        $variantSelect.append(new Option(variant.title, variant.id, false, false));\n      });\n    } else {\n      // remove existing variant options and display placeholder\n      $variantSelect.empty().append(new Option('No variations available', '', true, true));\n    }\n  }\n\n  function hideEmailProductNestedFields() {\n    $productNestedFields.removeClass('show');\n    $hintText.text('This email will be sent to your entire customer base.');\n    resetProductSelect();\n  }\n\n  function showEmailProductNestedFields() {\n    $productNestedFields.addClass('show');\n    $hintText.text('Selecting this will send the email to your entire customer base.');\n  }\n\n  function resetProductSelect() {\n    $productSelect.val('').trigger('change');\n    setupVariantSelectDropdown([]);\n  }\n});\n","$(document).on('turbolinks:load', function () {\n\n  // Categories section\n  if($('.js-category-list').length) {\n    // allow selection of 1 main category and up to 3 subcategories\n    // hide sub level categories and display when main/parent is clicked\n\n    var $categories = $('.js-category-input');\n    var mainCategoryCount = 0;\n    var maxMainCategory = 1;\n\n    $categories.each(function() {\n\n      var $this = $(this);\n      var $subcategories = $this.closest('li').find('.js-subcategory-input');\n      var subcategoryCount = 0;\n      var maxSubcategory = 3;\n\n      if($this.is(':checked')) {\n        $this.closest('li').find('ul').addClass('show');\n        disableUnselectedCheckboxes($categories);\n        mainCategoryCount += 1;\n      }\n\n      $this.on('change',function(){\n\n        if($this.is(':checked')) {\n          $this.closest('li').find('ul').addClass('show');\n          disableUnselectedCheckboxes($categories);\n          mainCategoryCount += 1;\n        } else {\n          $this.closest('li').find('ul').removeClass('show');\n          mainCategoryCount -= 1;\n          $subcategories.each(function(){ $(this).prop({ 'checked': false, 'disabled': false }) });\n          subcategoryCount = 0;\n          // some existing products may already have more than the max allowed main category\n          if (mainCategoryCount < maxMainCategory) {\n            enableCheckboxes($categories);\n          } else {\n            $this.prop('disabled', true);\n          }\n        }\n      });\n\n      // Subcategories\n      $subcategories.each(function(){\n\n        var $this = $(this);\n\n        if($this.is(':checked')) {\n          subcategoryCount += 1;\n          if(subcategoryCount >= maxSubcategory) {\n            disableUnselectedCheckboxes($subcategories);\n          }\n        }\n\n        $this.on('change',function(){\n          if($this.is(':checked') ) {\n            subcategoryCount += 1;\n            if(subcategoryCount >= maxSubcategory) {\n              disableUnselectedCheckboxes($subcategories);\n            }\n          } else {\n            // some existing products might already have more than the max allowed subcategories\n            if(subcategoryCount === maxSubcategory) {\n              enableCheckboxes($subcategories);\n            } else if (subcategoryCount > maxSubcategory) {\n              $this.prop('disabled', true);\n            }\n            subcategoryCount -= 1;\n          }\n        });\n      });\n    });\n  }\n});\n\nfunction disableUnselectedCheckboxes(checkboxList) {\n  $(checkboxList).each(function() {\n    var $this = $(this);\n    if(!$this.is(':checked')) {\n      $this.prop('disabled', true);\n    }\n  });\n};\n\nfunction enableCheckboxes(checkboxList) {\n  $(checkboxList).each(function() {\n    var $this = $(this);\n    if($this.prop('disabled')) {\n      $this.prop('disabled', false);\n    }\n  });\n};\n","$(document).on('turbolinks:load', function () {\n\n  var $form = $('.edit_product');\n  if ($form.length > 0) {\n    // Initialize commission rate variables\n    var max_rate \t\t\t\t\t= $('#commission-rate').data('commission-rate')\n    , \tdev_fund \t\t\t\t\t= $('#dev-fund-rate').data('dev-fund')\n    , \tmax_rate_dollars \t= $('#commission-rate').data('commission-amount')\n    , \tdev_fund_dollars \t= $('#dev-fund-rate').data('dev-fund-amount')\n    , \trate \t\t\t\t\t\t\t= 0\n    ,\t\ttotal_rate \t\t\t\t= max_rate - rate - dev_fund\n    ,\t\ttotal_dollars \t\t= max_rate_dollars - dev_fund_dollars;\n\n    // Check if the product has more than 100% being distributed to collaborators\n    $('.js-collaborator-slider').each(function(){\n    \trate += parseInt($(this).val());\n    });\n    if ( rate > max_rate ) {\n      alert('Re-adjust your commission rates!')\n    }\n\n    // Update data box stuff\n    $('#commission-left').text(total_rate);\n    $('#total-per-product').text('$' + total_dollars);\n\n    // calculate total of sub vendors commissions\n    var commissionTotal = 0;\n    $('.sub-vendor-commissions').each(function(){\n      commission_value = Math.round($(this).find('#commission-value').data('commission-value'));\n      commissionTotal += commission_value;\n      var product_price = $('#product_price').attr('data-price') > 0 ? $('#product_price').attr('data-price') : 0\n      ,\t\tsetPrice \t\t\t= ( ($('.data-box').attr('data-box-processing-fees') * commission_value) / 100).toFixed(2)\n      ,   totalPrice    = (setPrice / 100).toFixed(2)\n\n      if (totalPrice) {\n        $(this).find('.amount').text('$'+totalPrice);\n      }\n    });\n    $('#total-vendor-commissions').text(commissionTotal);\n\n    // in admin, remove duplicates from commission vendor dropdown filter\n    $('select[data-type=\"vendor\"]').find('option').each(function(index, value){\n  \t\tif ($('option[value=\"' + $(this).val() + '\"]').size() > 1) {\n      \t$(this).remove();\n      }\n    });\n\n    // Update collaborator amounts when slider is dragged\n    $form.on('input', '.js-collaborator-slider', function(e){\n      calculateCollaboratorAmounts(this);\n    });\n\n    // Ensure we display amounts correctly after adding a new collaborator\n    $('.js-collaborators-wrap').on('cocoon:after-insert', function(e, insertedItem) {\n      calculateCollaboratorAmounts($(insertedItem).find('.js-collaborator-slider'));\n    });\n  }\n\n});\n\nfunction calculateCollaboratorAmounts(el){\n  var $el = $(el);\n  var value = $el.val();\n\n  var setPrice = $('.data-box').attr('data-box-processing-fees');\n  var totalPrice = (setPrice / 100) * (value / 100);\n  var totalPriceRounded = totalPrice.toFixed(2);\n\n  var $wrap = $el.closest('.js-collaborator-wrap');\n  $wrap.find('.js-collaborator-percentText').text(value);\n  $wrap.find('.js-collaborator-amountText').text(\"$\" + totalPriceRounded);\n  // TODO update data box line item for this collaborator\n}\n","$(document).on('turbolinks:load', function () {\n\n\tvar product_price = $('#product_price').attr('data-price') > 0 ? $('#product_price').attr('data-price') : 0\n\t,\t\tdev_fund \t\t\t= ( $('#product_info_attributes_dev_fund').val() / 100 ).toFixed(2)\n\t,\t\tsetPrice \t\t\t= ( ($('.data-box').attr('data-box-processing-fees') * dev_fund) / 100).toFixed(2)\n\n\t$('#dev_fund_total .amount').text(setPrice);\n\n  var $devFundSlider = $('.js-devFund-slider');\n  if ($devFundSlider.length > 0 ){\n    var $percentText = $('.js-devFund-percentText');\n    var $amountText = $('.js-devFund-amountText');\n    var $dataBoxText = $('.js-dataBox-devFundText');\n\n    $devFundSlider.on('input', function(e){\n      var value = $(this).val();\n\n      var setPrice = $('.data-box').attr('data-box-processing-fees');\n      var totalPrice = (setPrice / 100) * (value / 100);\n      var totalPriceRounded = totalPrice.toFixed(2);\n\n      $percentText.text(value);\n      $amountText.text(totalPriceRounded);\n      $dataBoxText.text(\"$\" + totalPriceRounded);\n      // TODO recalculate data box because we updated the dev fund slider\n    });\n  }\n\n});\n","import { text_to_slug } from '../../../util/methods';\n\n$(document).on('turbolinks:load', function () {\n\n  // Download files destroy capability\n  $(document).on('click', '.js-reset-download', function(){\n    var $this = $(this)\n    ,   $parent = $this.closest('.js-download-wrapper');\n    $parent.hide();\n    $parent.find('.js-download-destroy-target').val($parent.data('product-download'));\n  });\n\n  /* Datepicker */\n\t$('.js-product-published_at').flatpickr({\n\t\tenableTime: true,\n\t\tminuteIncrement: 30,\n\t\tonChange: function(selectedDates, dateStr, instance){\n\t\t\t$('#product_published_at').val($('#published_at').val())\n\t\t}\n  })\n\n\t$('.flatpickr-minute').val('00')\n\t$('#product_published_at').val($('#published_at').val())\n})\n\nfunction toggle_conditional_field(type, action) {\n\n\tif ('hide' == action) {\n\t\t$('div[data-conditional-hide=\"'+type+'\"]').hide();\n\t} else {\n\t\t$('div[data-conditional-hide=\"'+type+'\"]').show();\n\t}\n}\n\nfunction loadingMessages() {\n\n\tvar type = $('body').attr('class')\n\n\tif ('layout-products-edit' == type) {\n\t\tvar text = 'Updating product'\n\t} else if ('layout-products-create' == type || 'layout-products-new' == type) {\n\t\tvar text = 'Creating product'\n\t} else if ('layout-vendor_emails-new' == type) {\n\t\tvar text = 'Creating email'\n\t} else if ('layout-vendor_emails-edit' == type) {\n\t\tvar text = 'Updating email'\n\t} else {\n\t\tvar text = 'Saving'\n\t}\n\n\t$('body').addClass('loading').prepend('<div class=\"loading-messages\">'+text+'...</div>');\n}\n\nfunction isNumberKey(evt){\n   var charCode = (evt.which) ? evt.which : event.keyCode\n   if (charCode > 31 && (charCode < 48 || (charCode > 57 && charCode != 190 && charCode != 110 ) ) && charCode != 46)\n      return false;\n\n   return true;\n}\n\n// sluggify product title\n$(document).on('keyup', '#product_title', function(){\n\n  if(window.location.pathname === '/creator/products/new')\n\t  $('#product_slug').val( text_to_slug($(this).val()) )\n\n}).on('keypress', '#product_slug, #user_info_attributes_shop_slug', function(e) {\n\n  if (e.which==32 || (e.which < 48 && e.which !== 45 ) || (e.which > 57 && e.which < 65) || (e.which > 90 && e.which < 97) || e.which > 122 )\n    return false;\n\n}).off('click', 'a[data-save-clone]').on('click', 'a[data-save-clone]', function(e){\n\te.preventDefault();\n\n\tvar action_id = $(this).closest('.js-form-wrap').find('.simple_form').attr('ID');\n\t$('#error_explanation').remove();\n\tloadingMessages();\n\tsetTimeout(function(){\n\t\t$('#'+action_id)[0].submit();\n\t},100);\n\n}).on('change', '#ready_for_review', function(){\n\n\tvar $box = $('.data-box, .sticky-box');\n\tvar trusted = $box.attr('data-box-trusted');\n\tvar submit = $('a[data-save-clone]');\n\tvar val = 'true' == trusted ? 'Schedule & Publish' : 'Submit for Review';\n\n\tif( $(this).is(':checked') ) {\n\t\tsubmit.removeClass('btn-primary').addClass('btn-danger').text(val);\n\t\t$('.simple_form').find('#submit_for_review').val('true');\n\t} else {\n\t\tsubmit.removeClass('btn-danger').addClass('btn-primary').text('Save Draft');\n\t\t$('.simple_form').find('#submit_for_review').val('');\n\t}\n\n}).on('change', '.product_category_models', function(){\n\n\tif( $(this).is(':checked') ) {\n\t\ttoggle_conditional_field('misc-data', 'show')\n\t} else {\n\t\ttoggle_conditional_field('misc-data', 'hide')\n\t}\n\n}).on('change','.product_category_surfacing', function(){\n\n\tif( $(this).is(':checked') ) {\n\t\ttoggle_conditional_field('render-engine', 'show')\n\t} else {\n\t\ttoggle_conditional_field('render-engine', 'hide')\n\t}\n\n}).on('change', '.product_category_render-setups', function(){\n\n\tif( $(this).is(':checked') ) {\n\t\t$('.radio_buttons.product_info_license').find('label').not('label[for=\"product_info_attributes_license_gpl\"]').hide()\n\t} else {\n\t\t$('.radio_buttons.product_info_license').find('label').not('label[for=\"product_info_attributes_license_gpl\"]').show()\n\t}\n\n}).on('change', '.price-in-dollars', function(){\n\n  var val = $(this).val().replace(/\\,/g,\"\");\n  var newVal = val * 100.00;\n\n  $(this).closest('.price-form-group').find('.price-in-cents').val(newVal).attr('data-price', newVal);\n});\n","$(document).on('turbolinks:load', function () {\n\n  var trusted = $('.data-box').attr('data-box-trusted');\n\n\t// ready for review\n\t$('.data-box #ready_for_review').on('change', function(){\n\t\tif( $(this).is(':checked') ) {\n\t\t\treview_modal();\n\t\t}\n\t});\n\n  function review_modal() {\n    swal({\n\t\t  title: ('true' == trusted ? 'Product Publish' : 'Product Review Information'),\n      text: review_text(),\n\t\t  icon: \"info\",\n      buttons: {\n        cancel: {\n          text: \"Continue Editing\",\n          value: false,\n          visible: true,\n          className: \"\",\n          closeModal: true,\n        },\n        confirm: {\n          text: ('true' == trusted ? 'Schedule & Publish' : 'Submit for Review'),\n          value: true,\n          visible: true,\n          className: \"\",\n          closeModal: true\n        }\n      }\n    })\n    .then((isConfirm) => {\n      if (isConfirm) {\n\t\t \t\t$('a[data-save-clone]').trigger('click');\n\t\t \t} else {\n\t\t \t\t$('#ready_for_review').trigger('click');\n\t\t \t}\n    });\n  }\n\n  function review_text(){\n\n    if ('true' == trusted) {\n      return \"As a Trusted Creator your product does not need to be reviewed. Upon confirmation, your product will be scheduled and published.\"\n    } else {\n      return \"Product reviews typically take between 3-5 days, depending on the current queue. After submitting for review, you will no longer be able to edit your product until it's published or sent back for changes. Please take this time to ensure your product is ready for public display!\"\n    }\n\n  }\n\n});\n","import Sortable from 'sortablejs';\n\n$(document).on('turbolinks:load', function () {\n\n  var $variantContainer = $('#js-sortable-variants');\n\n  if ($variantContainer.length){\n    var sortable = new Sortable($variantContainer[0], {\n      draggable: '.js-variant-nested-field',\n      handle: '.draggable-handle',\n      onSort: function(e) {\n        updatePositions($('.js-variant-nested-field'));\n      }\n    });\n\n    $variantContainer.on('cocoon:after-insert', function(e, $insertedItem){\n      if ($insertedItem.hasClass('js-variant-nested-field')) {\n        setUpCollapsibleForm($insertedItem)\n        updatePositions($('.js-variant-nested-field'));\n        $('.price-in-dollars').maskMoney({ allowZero: true }); // MaskMoney initialization\n      };\n    }).on('cocoon:after-remove', function(e, $removedItem){\n      if ($removedItem.hasClass('js-variant-nested-field')) {\n        updatePositions($('.js-variant-nested-field'));\n      };\n    });\n  };\n\n});\n\nfunction setUpCollapsibleForm($insertedItem) {\n  var $collapsible = $insertedItem.find('.js-variant-collapse');\n  var $collapseToggler = $insertedItem.find('.js-collapse-toggler');\n  var $id = $insertedItem.find('input.js-productVariant-title').attr('id').replace('title', 'collapse');\n  $collapsible.attr('id', $id).addClass('show');\n  $collapseToggler.attr({ href: `#${$id}`, 'aria-expanded': true })\n};\n\nfunction updatePositions($object) {\n  $object.each(function(index, el){\n    var $el = $(el);\n    var $positionInput = $el.find(\"input[name*='position']\");\n    $positionInput.val(index + 1);\n  });\n};\n","// This file is responsible for sorting files and folders in the Product Version form's Product Files modal\n// We are making folders sortable/draggable within the .js-download-folders-container div\n// We are also making downloads/files sortable inside the .js-download-items-container divs (with the ability to drag from one container to another)\n// Sorting functionality is disabled by default\n// Once sorting is enabled, we are making use of javascript's MutationObserver to detect and subscribe newly added folder and file nodes to sorting functionality\n\nimport Sortable from 'sortablejs';\nimport { displayFlashMessage, showLoadingMessage, hideLoadingMessage } from '../../../util/methods';\n\n$(document).on('turbolinks:load', function() {\n\n  var $downloadsMainContainer = $('#js-downloads-container');\n\n  if ($downloadsMainContainer.length) {\n    var $sortFilesBtn = $('#js-sort-files-btn');\n    var $saveSortedFilesBtn = $('#js-save-sorted-files');\n    var observerConfig = { childList: true }; // for MutationObserver\n    var sortableFolderClassName = '.js-sortable-folder';\n    var sortableDownloadClassName = '.js-sortable-download-item';\n    var sortableHandleClassName = '.sortable-handle';\n    var sortingActive = false;\n    var newFolderObserver;\n    var newDownloadObserver;\n\n    $sortFilesBtn.on('click', function(e) {\n      e.preventDefault();\n      enableSorting();\n      sortingActive = true;\n    });\n\n    $saveSortedFilesBtn.on('click', function(e) {\n      // save sort positions and disable sorting\n\n      e.preventDefault();\n      var $folders = $downloadsMainContainer.find(sortableFolderClassName);\n      var $noFolderDownloads = $('#no-folder-downloads').find(sortableDownloadClassName);\n      showLoadingMessage('Saving sorted files');\n\n      // set data\n      var data = {\n        download_folders_attributes: [],\n        downloads_attributes: []\n      };\n\n      $folders.each(function(index, el) {\n        var $this = $(el);\n        var $downloads = $this.find(sortableDownloadClassName);\n        var folderAttributes = {\n          id: $this.attr('data-folder-id'),\n          position: index\n        };\n        data.download_folders_attributes.push(folderAttributes);\n\n        $downloads.each(function(index, el) {\n          var $this = $(el);\n          var downloadAttributes = {\n            id: $this.attr('data-download-id'),\n            position: index,\n            download_folder_id: $this.attr('data-folder-id')\n          };\n          data.downloads_attributes.push(downloadAttributes);\n        });\n      });\n\n      $noFolderDownloads.each(function(index, el) {\n        var $this = $(el);\n        var downloadAttributes = {\n          id: $this.attr('data-download-id'),\n          position: index,\n          download_folder_id: null\n        };\n        data.downloads_attributes.push(downloadAttributes);\n      });\n\n      $.ajax({\n        url: $(e.target).attr('href'),\n        method: 'post',\n        dataType: 'json',\n        data: {\n          _method: 'patch',\n          product: data\n        },\n        success: function(response) {\n          hideLoadingMessage();\n          if (response['success']) {\n            disableSorting();\n            displayFlashMessage('success', 'Successfully saved sorted files!');\n            sortingActive = false;\n          } else {\n            displayFlashMessage('danger', 'Failed to save sorted files!');\n          }\n        }\n      });\n    });\n\n    // this gets run when user navigates away from the form\n    // we need to remove sorting-related javascript before caching\n    $(document).one('turbolinks:before-cache', function() {\n      if (sortingActive) {\n        disableSorting();\n      }\n    })\n\n    function enableSorting() {\n      var $sortableFoldersContainer = $('.js-download-folders-container');\n      var $sortableDownloadsContainers = $('.js-download-items-container');\n\n      // make folders sortable\n      var sortableFolders = createSortable($sortableFoldersContainer[0], sortableFolderClassName, sortableHandleClassName);\n\n      // create an observer for newly appended folder, to subscribe them to sorting\n      newFolderObserver = createAppendObserver(sortableFolders);\n      newFolderObserver.observe($sortableFoldersContainer[0], observerConfig);\n\n      // make downloads in and out of folders sortable\n      $sortableDownloadsContainers.each(function() {\n        var $this = $(this);\n        if ($this.attr('id') === 'no-folder-downloads') {\n          // add sortability to downloads that do not belong to a folder\n          var noFolderSortableDownloads = createSortable($this[0], sortableDownloadClassName, sortableHandleClassName, 'download-items');\n\n          // create an observer for newly appended download/file element to '#no-folder-downloads' container, to subscribe them to sorting\n          newDownloadObserver = createAppendObserver(noFolderSortableDownloads);\n          newDownloadObserver.observe($this[0], observerConfig);\n        } else {\n          // add sortability to downloads in folders\n          createSortable($this[0], sortableDownloadClassName, sortableHandleClassName, 'download-items');\n        }\n      });\n\n      // show draggable icons\n      $(sortableHandleClassName).each(function() {\n        $(this).show();\n      });\n\n      // disable delete buttons\n      $('.js-delete-btn').each(function() {\n        $(this).hide();\n      });\n\n      // toggle buttons\n      $sortFilesBtn.hide();\n      $saveSortedFilesBtn.show();\n    }\n\n    function disableSorting() {\n      // disable sorting\n      destroySortable($('.js-download-folders-container')[0]);\n      $('.js-download-items-container').each(function() {\n        destroySortable(this);\n      });\n\n      //disconnect observers\n      newFolderObserver = newFolderObserver.disconnect(); // disconnect() returns undefined\n      newDownloadObserver = newDownloadObserver.disconnect();\n\n      $(sortableHandleClassName).each(function() {\n        $(this).hide();\n      });\n\n      $('.js-delete-btn').each(function() {\n        $(this).show();\n      })\n\n      $saveSortedFilesBtn.hide();\n      $sortFilesBtn.show();\n    }\n  }\n});\n\nfunction createAppendObserver(sortable) {\n  // creates an observer that will subscribe newly appended folder or file nodes to sorting functionality\n  return new MutationObserver(function(mutationsList, observer) {\n    for (const mutation of mutationsList) {\n      if (mutation.type === 'childList') {\n        var $addedElement = $(mutation.addedNodes);\n        var $sortableHandle = $addedElement.find('.sortable-handle');\n        var $deleteBtn = $addedElement.find('.js-delete-btn');\n        $sortableHandle.show();\n        $deleteBtn.hide();\n        // if added node is a folder, initialize file container sortable\n        if ($addedElement.hasClass('js-sortable-folder')) {\n          var $sortableDownloadsContainer = $addedElement.find('.js-download-items-container');\n          createSortable($sortableDownloadsContainer[0], '.js-sortable-download-item', '.sortable-handle', 'download-items');\n        }\n        sortable.option('refresh');\n      }\n    }\n  });\n}\n\nfunction createSortable(sortableContainer, draggableElementClassName, sortableHandleClassName, groupName) {\n  // enables sortability of specified elements within a given container node\n  return Sortable.create(sortableContainer, {\n    draggable: draggableElementClassName,\n    handle: sortableHandleClassName,\n    chosenClass: 'chosen-draggable',\n    ghostClass: 'ghost-draggable',\n    group: groupName,\n    onEnd: function(evt) {\n      var $draggedItem = $(evt.item);  // dragged HTMLElement\n      // if dragged from a different container (item is a download), update folder id\n      if (evt.to !== evt.from) {\n        var newFolderID = $(evt.to).parent().attr('data-folder-id') || '';\n        $draggedItem.attr('data-folder-id', newFolderID);\n      }\n    }\n  });\n}\n\nfunction destroySortable(sortableContainer) {\n  var sortable = Sortable.get(sortableContainer);\n  if (sortable) sortable.destroy();\n}\n","$(document).on('turbolinks:load', function () {\n  \n  var $checkBoxWrapper = $('.js-download-url-check-box');\n  var $checkBox = $('#product_endpoint_responds_with_download_url');\n  var $info = $('.js-download-url-info');\n\n  $checkBoxWrapper.on('change', function () {\n    if ($checkBox.is(':checked')) {\n      $info.show();\n    } else {\n      $info.hide();\n    };\n  });\n\n});","$(document).on('turbolinks:load', function () {\n\n  var $resend_form = $('.resend');\n  \n  if ($resend_form.length) {\n    $resend_form.on('submit', function() {\n      var text = 'Sending webhook';\n      $('body').addClass('loading').prepend('<div class=\"loading-messages\">' + text + '...</div>');\n    });\n  };\n\n});","import { isTouchDevice } from '../../util/touchDevice';\n\n$(document).on('turbolinks:load', function () {\n  var $mainMenuDropdownBtn = $('.js-header-main-menu-dropdown-btn');\n  var $mainMenuToggle = $mainMenuDropdownBtn.find('.js-main-menu-toggle');\n  var $offCanvasElement = $('.offcanvas');\n  var hideDropdownTimeout;\n\n  function setupMainMenuDropdownMouseEvents() {\n    $mainMenuDropdownBtn.on('mouseover', function(){\n      clearTimeout(hideDropdownTimeout);\n      $mainMenuToggle.dropdown('show')\n    });\n    $mainMenuDropdownBtn.on('mouseleave', function(e){\n      hideDropdownTimeout = setTimeout(function(){\n        var relatedTarget = e.relatedTarget;\n\n        if (!relatedTarget || (!$(relatedTarget).closest($mainMenuToggle).length)) {\n          $mainMenuToggle.dropdown('hide');\n        }\n      }, 150);\n    })\n  }\n\n  function removeMainMenuHoverEvents() {\n    $mainMenuDropdownBtn.off('mouseover mouseleave');\n  }\n  \n  function updatePageResponsiveness() {\n    var smallPageWidth = 768;\n\n    if ($(window).width() > smallPageWidth && !isTouchDevice()) {\n      closeCollapsableDrawer();\n      removeMainMenuHoverEvents();  \n      setupMainMenuDropdownMouseEvents();\n    } else {\n      openCollapsableDrawer();\n      removeMainMenuHoverEvents();  \n    }\n  }\n\n  function getOffCanvasBackdrop() {\n    var $offCanvasBackdrop = $('.offcanvas-backdrop');\n    \n    // If it doesn't exist, create it and return the newly created element\n    if ($offCanvasElement.hasClass('show') && $offCanvasBackdrop.length === 0) {\n      $('body').append('<div class=\"offcanvas-backdrop fade\"></div>');\n      $offCanvasBackdrop = $('.offcanvas-backdrop');\n    }\n    return $offCanvasBackdrop;\n  }\n  \n  function openCollapsableDrawer() {\n    // Switch to offcanvas\n    $('.js-dropdown-main-menu').removeClass('show')\n    $offCanvasElement.show(); \n    getOffCanvasBackdrop().addClass('show');\n    $mainMenuToggle.attr('data-bs-toggle', 'offcanvas');\n    $mainMenuToggle.attr('data-bs-target', '#explore-marketplace-offcanvas');\n  }\n\n  function closeCollapsableDrawer() {\n    // Switch back to dropdown\n    $offCanvasElement.hide();\n    getOffCanvasBackdrop().removeClass(\"show\");\n    $mainMenuToggle.attr('data-bs-toggle', 'dropdown');\n    $mainMenuToggle.removeAttr('data-bs-target');\n  }\n\n  function checkCanvasElement() {\n    if(!$offCanvasElement.hasClass('show')){\n      $(\".offcanvas-backdrop\").remove();\n    }\n  }\n  \n  $(window).on('resize', function() {\n    updatePageResponsiveness();\n    checkCanvasElement();\n  });\n\n  updatePageResponsiveness();\n});\n","import { url_add_param, get_sale_campaign_params } from '../../util/methods';\n\n$(document).on('turbolinks:load', function () {\n\n  // The following code will add existing sale and/or sale_campaign filters when sending a product search\n  $('form.header-category-search-form').on('submit', function(e){\n    var $this = $(this);\n    var sale_campaign_params = get_sale_campaign_params();\n\n    if (sale_campaign_params['on_sale'] === 'true') {\n      e.preventDefault();\n\n      // Get the current action URL of the form \n      var actionURL = $this.attr('action');\n\n      // Serialize the form data \n      var formData = $this.serialize();\n\n      // Combine the serialized form data with the action URL\n      var fullURL = actionURL + '?' + formData; \n      \n      // Add sale-related params to URL\n      for (const param in sale_campaign_params) {\n        if (sale_campaign_params[param]) {\n          var fullURL = url_add_param(fullURL, param, sale_campaign_params[param]);\n        }\n      }\n\n      // Navigate to the full URL \n      location.href = fullURL;\n    }\n  })\n  \n});","import { isTouchDevice } from '../../util/touchDevice';\n\n$(document).on('turbolinks:load', function () {\n  var $userDropdownToggle = $('.js-user-dropdown-toggle')\n  var $userDropdownMenu = $('.user-dropdown-menu')\n  var hideDropdownTimeout;\n\n  function setupUserDropdownMouseEvents() {\n    $userDropdownToggle.on('mouseover', function(){\n      clearTimeout(hideDropdownTimeout);\n      $userDropdownMenu.dropdown('show')\n    });\n\n    $userDropdownToggle.on('mouseleave', function(e){\n      hideDropdownTimeout = setTimeout(function(){\n        var relatedTarget = e.relatedTarget;\n  \n        if (!relatedTarget || (!$(relatedTarget).closest($userDropdownToggle).length)) {\n          $userDropdownMenu.dropdown('hide');\n        }\n      }, 150);\n    })\n  }\n\n  if (!isTouchDevice() && \n  !window.location.pathname.includes('/admin') &&\n  !window.location.pathname.includes('/creator')){\n    setupUserDropdownMouseEvents();\n  }\n\n  $userDropdownMenu.on('click', function(){ \n    $userDropdownMenu.dropdown('hide');\n  })\n});\n","import { isTouchDevice } from '../../util/touchDevice';\n\n$(document).on('turbolinks:load', function () {\n  var $creatorDropdownToggle= $('.js-creator-dropdown-toggle')\n  var $creatorDropdownMenu = $('.creator-dropdown-menu')\n  var hideDropdownTimeout;\n\n  function setupCreatorDropdownMouseEvents() {\n    $creatorDropdownToggle.on('mouseover', function(){\n      clearTimeout(hideDropdownTimeout);\n      $creatorDropdownMenu.dropdown('show')\n    });\n\n    $creatorDropdownToggle.on('mouseleave', function(e){\n      hideDropdownTimeout = setTimeout(function(){\n        var relatedTarget = e.relatedTarget;\n\n        if (!relatedTarget || (!$(relatedTarget).closest($creatorDropdownToggle).length)) {\n          $creatorDropdownMenu.dropdown('hide');\n        }\n      }, 150);\n    })\n  }\n  \n  if (!isTouchDevice() && \n  !window.location.pathname.includes('/admin') &&\n  !window.location.pathname.includes('/creator')){\n    setupCreatorDropdownMouseEvents();\n  }\n\n  $creatorDropdownMenu.on('click', function(){ \n    $creatorDropdownMenu.dropdown('hide');\n  })\n});\n","$(document).on('turbolinks:load', function () {\n\n  var $readAllSwitch = $('#js-read-all-switch'),\n      sortAboutVal = $readAllSwitch.data('sort-about');\n\n  $readAllSwitch.on('click', function(){\n    var $this = $(this);\n    if ($this.is(':checked')) {\n      swal({\n        title: `Are you sure you want to mark all ${sortAboutVal} messages as read?`,\n        text: \"\",\n        icon: \"warning\",\n        buttons: {\n          cancel: {\n            text: \"Cancel\",\n            value: false,\n            visible: true,\n            className: \"btn btn-dark\",\n            closeModal: true,\n          },\n          confirm: {\n            text: \"Yes. Mark all as read!\",\n            value: true,\n            visible: true,\n            className: \"btn btn-primary\",\n            closeModal: true\n          }\n        }\n      })\n      .then((value) => {\n        if (value) {\n          $('body').addClass('loading').prepend('<div class=\"loading-messages\">' + `Marking all ${sortAboutVal} messages as read...` + '</div>');\n          location.href = '/inbox/read_all/?q=' + sortAboutVal;\n        } else {\n          $this.prop('checked', false);\n        }\n      });\n    };\n  });\n});\n\n","$(document).on('turbolinks:load', function () {\n  var $loginForm = $('.js-login-form');\n  if ($loginForm.length > 0) {\n\n    $loginForm.on('submit', function(e){\n      // validate the captcha is filled\n      var googleResponse = $('#g-recaptcha-response').val();\n      if (!googleResponse) {\n        return false;\n      }\n      return true;\n    });\n\n  }\n});\n","import { displayFlashMessage, showLoadingMessage, hideLoadingMessage } from '../../util/methods';\n\n$(document).on('turbolinks:load', function () {\n\n  var $versionSelects = $('.js-version-select');\n\n  if ($versionSelects.length) {\n\n    $versionSelects.each(function() {\n      let $this = $(this);\n\n      $this.select2({\n        width: '100%',\n        minimumResultsForSearch: Infinity, // this is to hide the search bar\n      });\n      \n      $this.on('change', function(){\n        let $this = $(this);\n        let version_id = $this.val();\n        let $downLoadsList = $this.closest('.order-pickup-files').find('.js-downloads-list');\n        \n        showLoadingMessage('Fetching version downloads');\n        \n        $.ajax({\n          url: $this.data('url'),\n          method: 'get',\n          dataType: 'json',\n          data: { version_id: version_id },\n          success: function(data) {\n            hideLoadingMessage();\n            $downLoadsList.html(data['html']);\n          },\n          error: function(xhr, status, error) {\n            hideLoadingMessage();\n            displayFlashMessage('danger', 'Failed to fetch version downloads');\n            $downLoadsList.html('<small class=\"text-danger d-block font-italic\">Failed to fetch version downloads</small>');\n            console.log(\"Error: \", error);\n          }\n        });\n      }); \n    });\n\n    $(document).one('turbolinks:before-cache', function() {\n      // destroy select2 dropdowns to prevent duplication on reload\n      $versionSelects.each(function() {\n        let $this = $(this);\n        $this.select2('destroy');\n      });\n    });\n  }\n\n});\n","$(document).on('turbolinks:load',function(){\n\n  // Checkbox Consents\n\t$('.js-consent-toggle').each(function(){\n\n\t\t$(this).on('change',function(e){\n\n\t\t\te.preventDefault();\n\n      formData = JSON.stringify($(this).closest('.checkbox-item-wrap').html().trim())\n\n\t\t  if( $(this).is(':checked') ){\n\n\t\t \t  data = {consent: {policy_id: $(this).data('policy-id'), form: formData }}\n\n\t\t    $.ajax({\n\t\t\t    type:'POST',\n\t\t\t   \turl: '/account/privacy-center/consents',\n\t\t\t   \tdata: data,\n\t\t\t   \tdataType : 'script'\n\t\t\t  });\n\n\t\t  } else {\n\n\t\t    $.ajax({\n\t\t\t    method:'PATCH',\n\t\t\t   \turl: '/account/privacy-center/consents/'+$(this).attr('id'),\n          data:{consent:{accepted:[false], form: formData }},\n\t\t\t   \tdataType : 'script'\n\t\t\t  });\n\n\t\t  }\n\n\t\t});\n\n\t});\n\n  // User Data Export\n  $('#js-user-data-export').on('click', function(){\n    $.ajax({\n      method:'PATCH',\n      url: '/account/privacy-center/data/'+$(this).data('export-id'),\n      dataType : 'script'\n    });\n  });\n\n});\n","!function (t, e) {\n  \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = e() : \"function\" == typeof define && define.amd ? define(e) : (t = t || self).Tagify = e();\n}(this, function () {\n  \"use strict\";\n\n  function t(e) {\n    return (t = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (t) {\n      return typeof t;\n    } : function (t) {\n      return t && \"function\" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? \"symbol\" : typeof t;\n    })(e);\n  }\n  function e(t, e, i) {\n    return e in t ? Object.defineProperty(t, e, {\n      value: i,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }) : t[e] = i, t;\n  }\n  function i(t) {\n    return function (t) {\n      if (Array.isArray(t)) {\n        for (var e = 0, i = new Array(t.length); e < t.length; e++) i[e] = t[e];\n        return i;\n      }\n    }(t) || function (t) {\n      if (Symbol.iterator in Object(t) || \"[object Arguments]\" === Object.prototype.toString.call(t)) return Array.from(t);\n    }(t) || function () {\n      throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n    }();\n  }\n  var s = function (t, e, i, s) {\n    return t = \"\" + t, e = \"\" + e, s && (t = t.trim(), e = e.trim()), i ? t == e : t.toLowerCase() == e.toLowerCase();\n  };\n  function a(t) {\n    var e = document.createElement(\"div\");\n    return t.replace(/\\&#?[0-9a-z]+;/gi, function (t) {\n      return e.innerHTML = t, e.innerText;\n    });\n  }\n  function n(t, e) {\n    for (e = e || \"previous\"; t = t[e + \"Sibling\"];) if (3 == t.nodeType) return t;\n  }\n  function o(t) {\n    return t.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/`|'/g, \"&#039;\");\n  }\n  function r(t) {\n    return t instanceof Array;\n  }\n  function l(t) {\n    var e = Object.prototype.toString.call(t).split(\" \")[1].slice(0, -1);\n    return t === Object(t) && \"Array\" != e && \"Function\" != e && \"RegExp\" != e && \"HTMLUnknownElement\" != e;\n  }\n  function d(t, e, i) {\n    function s(t, e) {\n      for (var i in e) if (e.hasOwnProperty(i)) {\n        if (l(e[i])) {\n          l(t[i]) ? s(t[i], e[i]) : t[i] = Object.assign({}, e[i]);\n          continue;\n        }\n        if (r(e[i])) {\n          t[i] = Object.assign([], e[i]);\n          continue;\n        }\n        t[i] = e[i];\n      }\n    }\n    return t instanceof Object || (t = {}), s(t, e), i && s(t, i), t;\n  }\n  function c(t) {\n    return String.prototype.normalize ? \"string\" == typeof t ? t.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\") : void 0 : t;\n  }\n  var h = /(?=.*chrome)(?=.*android)/i.test(navigator.userAgent),\n    g = {\n      init: function () {\n        this.DOM.dropdown = this.parseTemplate(\"dropdown\", [this.settings]), this.DOM.dropdown.content = this.DOM.dropdown.querySelector(\".\" + this.settings.classNames.dropdownWrapper);\n      },\n      show: function (t) {\n        var e,\n          i,\n          a,\n          n = this,\n          o = this.settings,\n          r = window.getSelection(),\n          d = \"mix\" == o.mode && !o.enforceWhitelist,\n          c = !o.whitelist || !o.whitelist.length,\n          h = \"manual\" == o.dropdown.position;\n        if (t = void 0 === t ? this.state.inputText : t, (!c || d || o.templates.dropdownItemNoMatch) && !1 !== o.dropdown.enable && !this.state.isLoading) {\n          if (clearTimeout(this.dropdownHide__bindEventsTimeout), this.suggestedListItems = this.dropdown.filterListItems.call(this, t), t && !this.suggestedListItems.length && (this.trigger(\"dropdown:noMatch\", t), o.templates.dropdownItemNoMatch && (a = o.templates.dropdownItemNoMatch.call(this, {\n            value: t\n          }))), !a) {\n            if (this.suggestedListItems.length) t && d && !this.state.editing.scope && !s(this.suggestedListItems[0].value, t) && this.suggestedListItems.unshift({\n              value: t\n            });else {\n              if (!t || !d || this.state.editing.scope) return this.input.autocomplete.suggest.call(this), void this.dropdown.hide.call(this);\n              this.suggestedListItems = [{\n                value: t\n              }];\n            }\n            i = \"\" + (l(e = this.suggestedListItems[0]) ? e.value : e), o.autoComplete && i && 0 == i.indexOf(t) && this.input.autocomplete.suggest.call(this, e);\n          }\n          this.dropdown.fill.call(this, a), o.dropdown.highlightFirst && this.dropdown.highlightOption.call(this, this.DOM.dropdown.content.children[0]), this.state.dropdown.visible || setTimeout(this.dropdown.events.binding.bind(this)), this.state.dropdown.visible = t || !0, this.state.dropdown.query = t, this.state.selection = {\n            anchorOffset: r.anchorOffset,\n            anchorNode: r.anchorNode\n          }, h || setTimeout(function () {\n            n.dropdown.position.call(n), n.dropdown.render.call(n);\n          }), setTimeout(function () {\n            n.trigger(\"dropdown:show\", n.DOM.dropdown);\n          });\n        }\n      },\n      hide: function (t) {\n        var e = this,\n          i = this.DOM,\n          s = i.scope,\n          a = i.dropdown,\n          n = \"manual\" == this.settings.dropdown.position && !t;\n        if (a && document.body.contains(a) && !n) return window.removeEventListener(\"resize\", this.dropdown.position), this.dropdown.events.binding.call(this, !1), s.setAttribute(\"aria-expanded\", !1), a.parentNode.removeChild(a), setTimeout(function () {\n          e.state.dropdown.visible = !1;\n        }, 100), this.state.dropdown.query = this.state.ddItemData = this.state.ddItemElm = this.state.selection = null, this.state.tag && this.state.tag.value.length && (this.state.flaggedTags[this.state.tag.baseOffset] = this.state.tag), this.trigger(\"dropdown:hide\", a), this;\n      },\n      render: function () {\n        var t,\n          e,\n          i,\n          s = this,\n          a = (t = this.DOM.dropdown, (i = t.cloneNode(!0)).style.cssText = \"position:fixed; top:-9999px; opacity:0\", document.body.appendChild(i), e = i.clientHeight, i.parentNode.removeChild(i), e),\n          n = this.settings;\n        return this.DOM.scope.setAttribute(\"aria-expanded\", !0), document.body.contains(this.DOM.dropdown) || (this.DOM.dropdown.classList.add(n.classNames.dropdownInital), this.dropdown.position.call(this, a), n.dropdown.appendTarget.appendChild(this.DOM.dropdown), setTimeout(function () {\n          return s.DOM.dropdown.classList.remove(n.classNames.dropdownInital);\n        })), this;\n      },\n      fill: function (t) {\n        var e;\n        t = \"string\" == typeof t ? t : this.dropdown.createListHTML.call(this, t || this.suggestedListItems), this.DOM.dropdown.content.innerHTML = (e = t) ? e.replace(/\\>[\\r\\n ]+\\</g, \"><\").replace(/(<.*?>)|\\s+/g, function (t, e) {\n          return e || \" \";\n        }) : \"\";\n      },\n      refilter: function (t) {\n        t = t || this.state.dropdown.query || \"\", this.suggestedListItems = this.dropdown.filterListItems.call(this, t), this.suggestedListItems.length ? this.dropdown.fill.call(this) : this.dropdown.hide.call(this), this.trigger(\"dropdown:updated\", this.DOM.dropdown);\n      },\n      position: function (t) {\n        if (\"manual\" != this.settings.dropdown.position) {\n          var e,\n            i,\n            s,\n            a,\n            n,\n            o,\n            r,\n            l = this.DOM.dropdown,\n            d = document.documentElement.clientHeight,\n            c = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0) > 480 ? this.settings.dropdown.position : \"all\",\n            h = this.DOM[\"input\" == c ? \"input\" : \"scope\"];\n          t = t || l.clientHeight, this.state.dropdown.visible && (\"text\" == c ? (a = (i = this.getCaretGlobalPosition()).bottom, s = i.top, n = i.left, o = \"auto\") : (r = function (t) {\n            for (var e = 0, i = 0; t;) e += t.offsetLeft || 0, i += t.offsetTop || 0, t = t.parentNode;\n            return {\n              left: e,\n              top: i\n            };\n          }(this.settings.dropdown.appendTarget), s = (i = h.getBoundingClientRect()).top + 2 - r.top, a = i.bottom - 1 - r.top, n = i.left - r.left, o = i.width + \"px\"), s = Math.floor(s), a = Math.ceil(a), e = d - i.bottom < t, l.style.cssText = \"left:\" + (n + window.pageXOffset) + \"px; width:\" + o + \";\" + (e ? \"top: \" + (s + window.pageYOffset) + \"px\" : \"top: \" + (a + window.pageYOffset) + \"px\"), l.setAttribute(\"placement\", e ? \"top\" : \"bottom\"), l.setAttribute(\"position\", c));\n        }\n      },\n      events: {\n        binding: function () {\n          var t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0],\n            e = this.dropdown.events.callbacks,\n            i = this.listeners.dropdown = this.listeners.dropdown || {\n              position: this.dropdown.position.bind(this),\n              onKeyDown: e.onKeyDown.bind(this),\n              onMouseOver: e.onMouseOver.bind(this),\n              onMouseLeave: e.onMouseLeave.bind(this),\n              onClick: e.onClick.bind(this),\n              onScroll: e.onScroll.bind(this)\n            },\n            s = t ? \"addEventListener\" : \"removeEventListener\";\n          \"manual\" != this.settings.dropdown.position && (window[s](\"resize\", i.position), window[s](\"keydown\", i.onKeyDown)), this.DOM.dropdown[s](\"mouseover\", i.onMouseOver), this.DOM.dropdown[s](\"mouseleave\", i.onMouseLeave), this.DOM.dropdown[s](\"mousedown\", i.onClick), this.DOM.dropdown.content[s](\"scroll\", i.onScroll);\n        },\n        callbacks: {\n          onKeyDown: function (t) {\n            var e = this.DOM.dropdown.querySelector(\".\" + this.settings.classNames.dropdownItemActive),\n              i = e;\n            switch (t.key) {\n              case \"ArrowDown\":\n              case \"ArrowUp\":\n              case \"Down\":\n              case \"Up\":\n                var s;\n                t.preventDefault(), i && (i = i[(\"ArrowUp\" == t.key || \"Up\" == t.key ? \"previous\" : \"next\") + \"ElementSibling\"]), i || (i = (s = this.DOM.dropdown.content.children)[\"ArrowUp\" == t.key || \"Up\" == t.key ? s.length - 1 : 0]), this.dropdown.highlightOption.call(this, i, !0);\n                break;\n              case \"Escape\":\n              case \"Esc\":\n                this.dropdown.hide.call(this);\n                break;\n              case \"ArrowRight\":\n                if (this.state.actions.ArrowLeft) return;\n              case \"Tab\":\n                if (\"mix\" != this.settings.mode && i && !this.settings.autoComplete.rightKey && !this.state.editing) {\n                  t.preventDefault();\n                  var a = i.getAttribute(\"tagifySuggestionIdx\"),\n                    n = a ? this.suggestedListItems[+a] : \"\";\n                  return this.input.autocomplete.set.call(this, n.value || n), !1;\n                }\n                return !0;\n              case \"Enter\":\n                t.preventDefault(), this.dropdown.selectOption.call(this, e);\n                break;\n              case \"Backspace\":\n                if (\"mix\" == this.settings.mode || this.state.editing.scope) return;\n                var o = this.state.inputText.trim();\n                \"\" != o && 8203 != o.charCodeAt(0) || (!0 === this.settings.backspace ? this.removeTags() : \"edit\" == this.settings.backspace && setTimeout(this.editTag.bind(this), 0));\n            }\n          },\n          onMouseOver: function (t) {\n            var e = t.target.closest(\".\" + this.settings.classNames.dropdownItem);\n            e && this.dropdown.highlightOption.call(this, e);\n          },\n          onMouseLeave: function (t) {\n            this.dropdown.highlightOption.call(this);\n          },\n          onClick: function (t) {\n            var e = this;\n            if (0 == t.button && t.target != this.DOM.dropdown) {\n              var i = t.target.closest(\".\" + this.settings.classNames.dropdownItem);\n              this.state.actions.selectOption = !0, setTimeout(function () {\n                return e.state.actions.selectOption = !1;\n              }, 50), this.settings.hooks.suggestionClick(t, {\n                tagify: this,\n                suggestionElm: i\n              }).then(function () {\n                i ? e.dropdown.selectOption.call(e, i) : e.dropdown.hide.call(e);\n              }).catch(function (t) {\n                return t;\n              });\n            }\n          },\n          onScroll: function (t) {\n            var e = t.target,\n              i = e.scrollTop / (e.scrollHeight - e.parentNode.clientHeight) * 100;\n            this.trigger(\"dropdown:scroll\", {\n              percentage: Math.round(i)\n            });\n          }\n        }\n      },\n      highlightOption: function (t, e) {\n        var i,\n          s = this.settings.classNames.dropdownItemActive;\n        if (this.state.ddItemElm && (this.state.ddItemElm.classList.remove(s), this.state.ddItemElm.removeAttribute(\"aria-selected\")), !t) return this.state.ddItemData = null, this.state.ddItemElm = null, void this.input.autocomplete.suggest.call(this);\n        i = this.suggestedListItems[this.getNodeIndex(t)], this.state.ddItemData = i, this.state.ddItemElm = t, t.classList.add(s), t.setAttribute(\"aria-selected\", !0), e && (t.parentNode.scrollTop = t.clientHeight + t.offsetTop - t.parentNode.clientHeight), this.settings.autoComplete && (this.input.autocomplete.suggest.call(this, i), this.dropdown.position.call(this));\n      },\n      selectOption: function (t) {\n        var e = this,\n          i = this.settings.dropdown,\n          s = i.clearOnSelect,\n          a = i.closeOnSelect;\n        if (!t) return this.addTags(this.state.inputText, !0), void (a && this.dropdown.hide.call(this));\n        var n = t.getAttribute(\"tagifySuggestionIdx\"),\n          o = this.suggestedListItems[+n];\n        if (this.trigger(\"dropdown:select\", {\n          data: o,\n          elm: t\n        }), n && o) {\n          if (this.state.editing ? this.onEditTagDone(null, d({\n            __isValid: !0\n          }, o)) : this[\"mix\" == this.settings.mode ? \"addMixTags\" : \"addTags\"]([o], s), setTimeout(function () {\n            e.DOM.input.focus(), e.toggleFocusClass(!0);\n          }), a) return this.dropdown.hide.call(this);\n          this.dropdown.refilter.call(this);\n        } else this.dropdown.hide.call(this);\n      },\n      selectAll: function () {\n        return this.suggestedListItems.length = 0, this.dropdown.hide.call(this), this.addTags(this.dropdown.filterListItems.call(this, \"\"), !0), this;\n      },\n      filterListItems: function (t, e) {\n        var i,\n          s,\n          a,\n          n,\n          o,\n          r = this,\n          d = this.settings,\n          h = d.dropdown,\n          g = (e = e || {}, []),\n          u = d.whitelist,\n          p = h.maxItems || 1 / 0,\n          f = h.searchKeys,\n          m = 0;\n        if (!t || !f.length) return (d.duplicates ? u : u.filter(function (t) {\n          return !r.isTagDuplicate(l(t) ? t.value : t);\n        })).slice(0, p);\n        function v(t, e) {\n          return e.toLowerCase().split(\" \").every(function (e) {\n            return t.includes(e.toLowerCase());\n          });\n        }\n        for (o = h.caseSensitive ? \"\" + t : (\"\" + t).toLowerCase(); m < u.length && (i = u[m] instanceof Object ? u[m] : {\n          value: u[m]\n        }, h.fuzzySearch && !e.exact ? (a = f.reduce(function (t, e) {\n          return t + \" \" + (i[e] || \"\");\n        }, \"\").toLowerCase(), h.accentedSearch && (a = c(a), o = c(o)), s = v(a, o)) : s = f.some(function (t) {\n          var s = \"\" + (i[t] || \"\");\n          return h.accentedSearch && (s = c(s), o = c(o)), h.caseSensitive || (s = s.toLowerCase()), e.exact ? s == o : 0 == s.indexOf(o);\n        }), n = !d.duplicates && this.isTagDuplicate(l(i) ? i.value : i), s && !n && p-- && g.push(i), 0 != p); m++);\n        return g;\n      },\n      createListHTML: function (t) {\n        var e = this;\n        return d([], t).map(function (t, i) {\n          \"string\" != typeof t && \"number\" != typeof t || (t = {\n            value: t\n          });\n          var s = e.settings.dropdown.mapValueTo,\n            a = s ? \"function\" == typeof s ? s(t) : t[s] || t.value : t.value;\n          t.value = a && \"string\" == typeof a ? o(a) : a;\n          var n = e.settings.templates.dropdownItem.call(e, t);\n          return n = n.replace(/\\s*tagifySuggestionIdx=([\"'])(.*?)\\1/gim, \"\").replace(\">\", ' tagifySuggestionIdx=\"'.concat(i, '\">'));\n        }).join(\"\");\n      }\n    },\n    u = {\n      delimiters: \",\",\n      pattern: null,\n      tagTextProp: \"value\",\n      maxTags: 1 / 0,\n      callbacks: {},\n      addTagOnBlur: !0,\n      duplicates: !1,\n      whitelist: [],\n      blacklist: [],\n      enforceWhitelist: !1,\n      keepInvalidTags: !1,\n      mixTagsAllowedAfter: /,|\\.|\\:|\\s/,\n      mixTagsInterpolator: [\"[[\", \"]]\"],\n      backspace: !0,\n      skipInvalid: !1,\n      editTags: {\n        clicks: 2,\n        keepInvalid: !0\n      },\n      transformTag: function () {},\n      trim: !0,\n      mixMode: {\n        insertAfterTag: \" \"\n      },\n      autoComplete: {\n        enabled: !0,\n        rightKey: !1\n      },\n      classNames: {\n        namespace: \"tagify\",\n        mixMode: \"tagify--mix\",\n        selectMode: \"tagify--select\",\n        input: \"tagify__input\",\n        focus: \"tagify--focus\",\n        tag: \"tagify__tag\",\n        tagNoAnimation: \"tagify--noAnim\",\n        tagInvalid: \"tagify--invalid\",\n        tagNotAllowed: \"tagify--notAllowed\",\n        inputInvalid: \"tagify__input--invalid\",\n        tagX: \"tagify__tag__removeBtn\",\n        tagText: \"tagify__tag-text\",\n        dropdown: \"tagify__dropdown\",\n        dropdownWrapper: \"tagify__dropdown__wrapper\",\n        dropdownItem: \"tagify__dropdown__item\",\n        dropdownItemActive: \"tagify__dropdown__item--active\",\n        dropdownInital: \"tagify__dropdown--initial\",\n        scopeLoading: \"tagify--loading\",\n        tagLoading: \"tagify__tag--loading\",\n        tagEditing: \"tagify__tag--editable\",\n        tagFlash: \"tagify__tag--flash\",\n        tagHide: \"tagify__tag--hide\",\n        hasMaxTags: \"tagify--hasMaxTags\",\n        hasNoTags: \"tagify--noTags\",\n        empty: \"tagify--empty\"\n      },\n      dropdown: {\n        classname: \"\",\n        enabled: 2,\n        maxItems: 10,\n        searchKeys: [\"value\", \"searchBy\"],\n        fuzzySearch: !0,\n        caseSensitive: !1,\n        accentedSearch: !0,\n        highlightFirst: !1,\n        closeOnSelect: !0,\n        clearOnSelect: !0,\n        position: \"all\",\n        appendTarget: null\n      },\n      hooks: {\n        beforeRemoveTag: function () {\n          return Promise.resolve();\n        },\n        suggestionClick: function () {\n          return Promise.resolve();\n        }\n      }\n    };\n  var p = {\n    customBinding: function () {\n      var t = this;\n      this.customEventsList.forEach(function (e) {\n        t.on(e, t.settings.callbacks[e]);\n      });\n    },\n    binding: function () {\n      var t,\n        e = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0],\n        i = this.events.callbacks,\n        s = e ? \"addEventListener\" : \"removeEventListener\";\n      if (!this.state.mainEvents || !e) for (var a in this.state.mainEvents = e, e && !this.listeners.main && (this.DOM.input.addEventListener(this.isIE ? \"keydown\" : \"input\", i[this.isIE ? \"onInputIE\" : \"onInput\"].bind(this)), this.settings.isJQueryPlugin && jQuery(this.DOM.originalInput).on(\"tagify.removeAllTags\", this.removeAllTags.bind(this))), t = this.listeners.main = this.listeners.main || {\n        focus: [\"input\", i.onFocusBlur.bind(this)],\n        blur: [\"input\", i.onFocusBlur.bind(this)],\n        keydown: [\"input\", i.onKeydown.bind(this)],\n        click: [\"scope\", i.onClickScope.bind(this)],\n        dblclick: [\"scope\", i.onDoubleClickScope.bind(this)],\n        paste: [\"input\", i.onPaste.bind(this)]\n      }) (\"blur\" != a || e) && this.DOM[t[a][0]][s](a, t[a][1]);\n    },\n    callbacks: {\n      onFocusBlur: function (t) {\n        var e = t.target ? this.trim(t.target.textContent) : \"\",\n          i = this.settings,\n          s = t.type,\n          a = i.dropdown.enabled >= 0,\n          n = {\n            relatedTarget: t.relatedTarget\n          },\n          o = this.state.actions.selectOption && (a || !i.dropdown.closeOnSelect),\n          r = this.state.actions.addNew && a;\n        if (\"blur\" == s) {\n          if (t.relatedTarget === this.DOM.scope) return this.dropdown.hide.call(this), void this.DOM.input.focus();\n          this.postUpdate(), this.triggerChangeEvent();\n        }\n        if (!o && !r) if (this.state.hasFocus = \"focus\" == s && +new Date(), this.toggleFocusClass(this.state.hasFocus), \"mix\" != i.mode) {\n          if (\"focus\" == s) return this.trigger(\"focus\", n), void (0 === i.dropdown.enabled && this.dropdown.show.call(this));\n          \"blur\" == s && (this.trigger(\"blur\", n), this.loading(!1), (\"select\" == this.settings.mode ? !this.value.length || this.value[0].value != e : e && !this.state.actions.selectOption && i.addTagOnBlur) && this.addTags(e, !0)), this.DOM.input.removeAttribute(\"style\"), this.dropdown.hide.call(this);\n        } else \"focus\" == s ? this.trigger(\"focus\", n) : \"blur\" == t.type && (this.trigger(\"blur\", n), this.loading(!1), this.dropdown.hide.call(this), this.state.dropdown.visible = void 0, this.setStateSelection());\n      },\n      onKeydown: function (t) {\n        var e = this,\n          i = this.trim(t.target.textContent);\n        if (this.trigger(\"keydown\", {\n          originalEvent: this.cloneEvent(t)\n        }), \"mix\" == this.settings.mode) {\n          switch (t.key) {\n            case \"Left\":\n            case \"ArrowLeft\":\n              this.state.actions.ArrowLeft = !0;\n              break;\n            case \"Delete\":\n            case \"Backspace\":\n              if (this.state.editing) return;\n              var s,\n                o,\n                r = document.getSelection(),\n                l = \"Delete\" == t.key && r.anchorOffset == (r.anchorNode.length || 0),\n                d = 1 == r.anchorNode.nodeType || !r.anchorOffset && r.anchorNode.previousElementSibling,\n                c = a(this.DOM.input.innerHTML),\n                g = this.getTagElms();\n              if (h && d) return o = n(d), d.hasAttribute(\"readonly\") || d.remove(), this.DOM.input.focus(), void setTimeout(function () {\n                e.placeCaretAfterNode(o), e.DOM.input.click();\n              });\n              if (\"BR\" == r.anchorNode.nodeName) return;\n              if ((l || d) && 1 == r.anchorNode.nodeType ? s = 0 == r.anchorOffset ? l ? g[0] : null : g[r.anchorOffset - 1] : l ? s = r.anchorNode.nextElementSibling : d && (s = d), 3 == r.anchorNode.nodeType && !r.anchorNode.nodeValue && r.anchorNode.previousElementSibling && t.preventDefault(), (d || l) && !this.settings.backspace) return void t.preventDefault();\n              if (\"Range\" != r.type && !r.anchorOffset && r.anchorNode == this.DOM.input && \"Delete\" != t.key) return void t.preventDefault();\n              if (\"Range\" != r.type && s && s.hasAttribute(\"readonly\")) return void this.placeCaretAfterNode(n(s));\n              this.isFirefox && 1 == r.anchorNode.nodeType && 0 != r.anchorOffset && (this.removeTags(), this.placeCaretAfterNode(this.setRangeAtStartEnd())), setTimeout(function () {\n                var t = document.getSelection(),\n                  i = a(e.DOM.input.innerHTML),\n                  s = t.anchorNode.previousElementSibling;\n                if (!h && i.length >= c.length && s && !s.hasAttribute(\"readonly\") && (e.removeTags(s), e.fixFirefoxLastTagNoCaret(), 2 == e.DOM.input.children.length && \"BR\" == e.DOM.input.children[1].tagName)) return e.DOM.input.innerHTML = \"\", e.value.length = 0, !0;\n                e.value = [].map.call(g, function (t, i) {\n                  var s = e.tagData(t);\n                  if (t.parentNode || s.readonly) return s;\n                  e.trigger(\"remove\", {\n                    tag: t,\n                    index: i,\n                    data: s\n                  });\n                }).filter(function (t) {\n                  return t;\n                });\n              }, 50);\n          }\n          return !0;\n        }\n        switch (t.key) {\n          case \"Backspace\":\n            this.state.dropdown.visible && \"manual\" != this.settings.dropdown.position || \"\" != i && 8203 != i.charCodeAt(0) || (!0 === this.settings.backspace ? this.removeTags() : \"edit\" == this.settings.backspace && setTimeout(this.editTag.bind(this), 0));\n            break;\n          case \"Esc\":\n          case \"Escape\":\n            if (this.state.dropdown.visible) return;\n            t.target.blur();\n            break;\n          case \"Down\":\n          case \"ArrowDown\":\n            this.state.dropdown.visible || this.dropdown.show.call(this);\n            break;\n          case \"ArrowRight\":\n            var u = this.state.inputSuggestion || this.state.ddItemData;\n            if (u && this.settings.autoComplete.rightKey) return void this.addTags([u], !0);\n            break;\n          case \"Tab\":\n            var p = \"select\" == this.settings.mode;\n            if (!i || p) return !0;\n            t.preventDefault();\n          case \"Enter\":\n            if (this.state.dropdown.visible || 229 == t.keyCode) return;\n            t.preventDefault(), setTimeout(function () {\n              e.state.actions.selectOption || e.addTags(i, !0);\n            });\n        }\n      },\n      onInput: function (t) {\n        if (\"mix\" == this.settings.mode) return this.events.callbacks.onMixTagsInput.call(this, t);\n        var e = this.input.normalize.call(this),\n          i = e.length >= this.settings.dropdown.enabled,\n          s = {\n            value: e,\n            inputElm: this.DOM.input\n          };\n        s.isValid = this.validateTag({\n          value: e\n        }), this.trigger(\"input\", s), this.state.inputText != e && (this.input.set.call(this, e, !1), -1 != e.search(this.settings.delimiters) ? this.addTags(e) && this.input.set.call(this) : this.settings.dropdown.enabled >= 0 && this.dropdown[i ? \"show\" : \"hide\"].call(this, e));\n      },\n      onMixTagsInput: function (t) {\n        var e,\n          i,\n          s,\n          a,\n          n,\n          o,\n          r,\n          l,\n          c = this,\n          g = this.settings,\n          u = this.value.length,\n          p = this.getTagElms(),\n          f = document.createDocumentFragment(),\n          m = window.getSelection().getRangeAt(0),\n          v = [].map.call(p, function (t) {\n            return c.tagData(t).value;\n          });\n        if (\"deleteContentBackward\" == t.inputType && h && this.events.callbacks.onKeydown.call(this, {\n          target: t.target,\n          key: \"Backspace\"\n        }), this.value.slice().forEach(function (t) {\n          t.readonly && !v.includes(t.value) && f.appendChild(c.createTagElem(t));\n        }), f.childNodes.length && (m.insertNode(f), this.setRangeAtStartEnd(!1, f.lastChild)), p.length != u) return this.value = [].map.call(this.getTagElms(), function (t) {\n          return c.tagData(t);\n        }), void this.update({\n          withoutChangeEvent: !0\n        });\n        if (this.hasMaxTags()) return !0;\n        if (window.getSelection && (o = window.getSelection()).rangeCount > 0 && 3 == o.anchorNode.nodeType) {\n          if ((m = o.getRangeAt(0).cloneRange()).collapse(!0), m.setStart(o.focusNode, 0), s = (e = m.toString().slice(0, m.endOffset)).split(g.pattern).length - 1, (i = e.match(g.pattern)) && (a = e.slice(e.lastIndexOf(i[i.length - 1]))), a) {\n            if (this.state.actions.ArrowLeft = !1, this.state.tag = {\n              prefix: a.match(g.pattern)[0],\n              value: a.replace(g.pattern, \"\")\n            }, this.state.tag.baseOffset = o.baseOffset - this.state.tag.value.length, l = this.state.tag.value.match(g.delimiters)) return this.state.tag.value = this.state.tag.value.replace(g.delimiters, \"\"), this.state.tag.delimiters = l[0], this.addTags(this.state.tag.value, g.dropdown.clearOnSelect), void this.dropdown.hide.call(this);\n            n = this.state.tag.value.length >= g.dropdown.enabled;\n            try {\n              r = (r = this.state.flaggedTags[this.state.tag.baseOffset]).prefix == this.state.tag.prefix && r.value[0] == this.state.tag.value[0], this.state.flaggedTags[this.state.tag.baseOffset] && !this.state.tag.value && delete this.state.flaggedTags[this.state.tag.baseOffset];\n            } catch (t) {}\n            (r || s < this.state.mixMode.matchedPatternCount) && (n = !1);\n          } else this.state.flaggedTags = {};\n          this.state.mixMode.matchedPatternCount = s;\n        }\n        setTimeout(function () {\n          c.update({\n            withoutChangeEvent: !0\n          }), c.trigger(\"input\", d({}, c.state.tag, {\n            textContent: c.DOM.input.textContent\n          })), c.state.tag && c.dropdown[n ? \"show\" : \"hide\"].call(c, c.state.tag.value);\n        }, 10);\n      },\n      onInputIE: function (t) {\n        var e = this;\n        setTimeout(function () {\n          e.events.callbacks.onInput.call(e, t);\n        });\n      },\n      onClickScope: function (t) {\n        var e = this.settings,\n          i = t.target.closest(\".\" + e.classNames.tag),\n          s = +new Date() - this.state.hasFocus;\n        if (t.target != this.DOM.scope) {\n          if (!t.target.classList.contains(e.classNames.tagX)) return i ? (this.trigger(\"click\", {\n            tag: i,\n            index: this.getNodeIndex(i),\n            data: this.tagData(i),\n            originalEvent: this.cloneEvent(t)\n          }), void (1 !== e.editTags && 1 !== e.editTags.clicks || this.events.callbacks.onDoubleClickScope.call(this, t))) : void (t.target == this.DOM.input && (\"mix\" == e.mode && this.fixFirefoxLastTagNoCaret(), s > 500) ? this.state.dropdown.visible ? this.dropdown.hide.call(this) : 0 === e.dropdown.enabled && \"mix\" != e.mode && this.dropdown.show.call(this) : \"select\" == e.mode && !this.state.dropdown.visible && this.dropdown.show.call(this));\n          this.removeTags(t.target.parentNode);\n        } else this.state.hasFocus || this.DOM.input.focus();\n      },\n      onPaste: function (t) {\n        var e;\n        t.preventDefault(), this.settings.readonly || (e = (t.clipboardData || window.clipboardData).getData(\"Text\"), this.injectAtCaret(e, window.getSelection().getRangeAt(0)), \"mix\" != this.settings.mode && this.addTags(this.DOM.input.textContent, !0));\n      },\n      onEditTagInput: function (t, i) {\n        var s = t.closest(\".\" + this.settings.classNames.tag),\n          a = this.getNodeIndex(s),\n          n = this.tagData(s),\n          o = this.input.normalize.call(this, t),\n          r = s.innerHTML != s.__tagifyTagData.__originalHTML,\n          l = this.validateTag(e({}, this.settings.tagTextProp, o));\n        r || !0 !== t.originalIsValid || (l = !0), s.classList.toggle(this.settings.classNames.tagInvalid, !0 !== l), n.__isValid = l, s.title = !0 === l ? n.title || n.value : l, o.length >= this.settings.dropdown.enabled && (this.state.editing && (this.state.editing.value = o), this.dropdown.show.call(this, o)), this.trigger(\"edit:input\", {\n          tag: s,\n          index: a,\n          data: d({}, this.value[a], {\n            newValue: o\n          }),\n          originalEvent: this.cloneEvent(i)\n        });\n      },\n      onEditTagFocus: function (t) {\n        this.state.editing = {\n          scope: t,\n          input: t.querySelector(\"[contenteditable]\")\n        };\n      },\n      onEditTagBlur: function (t) {\n        var i;\n        if (this.state.hasFocus || this.toggleFocusClass(), this.DOM.scope.contains(t)) {\n          var s,\n            a = this.settings,\n            n = t.closest(\".\" + a.classNames.tag),\n            o = this.input.normalize.call(this, t),\n            r = this.tagData(n).__originalData,\n            l = n.innerHTML != n.__tagifyTagData.__originalHTML,\n            d = this.validateTag(e({}, a.tagTextProp, o));\n          if (o) {\n            if (l) {\n              if (s = this.getWhitelistItem(o) || (e(i = {}, a.tagTextProp, o), e(i, \"value\", o), i), a.transformTag.call(this, s, r), !0 !== (d = this.validateTag(e({}, a.tagTextProp, s[a.tagTextProp])))) {\n                if (this.trigger(\"invalid\", {\n                  data: s,\n                  tag: n,\n                  message: d\n                }), a.editTags.keepInvalid) return;\n                a.keepInvalidTags ? s.__isValid = d : s = r;\n              }\n              this.onEditTagDone(n, s);\n            } else this.onEditTagDone(n, r);\n          } else this.onEditTagDone(n);\n        }\n      },\n      onEditTagkeydown: function (t, e) {\n        switch (this.trigger(\"edit:keydown\", {\n          originalEvent: this.cloneEvent(t)\n        }), t.key) {\n          case \"Esc\":\n          case \"Escape\":\n            e.innerHTML = e.__tagifyTagData.__originalHTML;\n          case \"Enter\":\n          case \"Tab\":\n            t.preventDefault(), t.target.blur();\n        }\n      },\n      onDoubleClickScope: function (t) {\n        var e,\n          i,\n          s = t.target.closest(\".\" + this.settings.classNames.tag),\n          a = this.settings;\n        s && (e = s.classList.contains(this.settings.classNames.tagEditing), i = s.hasAttribute(\"readonly\"), \"select\" == a.mode || a.readonly || e || i || !this.settings.editTags || this.editTag(s), this.toggleFocusClass(!0), this.trigger(\"dblclick\", {\n          tag: s,\n          index: this.getNodeIndex(s),\n          data: this.tagData(s)\n        }));\n      }\n    }\n  };\n  function f(e, i) {\n    return e ? e.previousElementSibling && e.previousElementSibling.classList.contains(\"tagify\") ? (console.warn(\"Tagify: \", \"input element is already Tagified\", e), this) : (d(this, function (e) {\n      var i = document.createTextNode(\"\");\n      function s(t, e, s) {\n        s && e.split(/\\s+/g).forEach(function (e) {\n          return i[t + \"EventListener\"].call(i, e, s);\n        });\n      }\n      return {\n        off: function (t, e) {\n          return s(\"remove\", t, e), this;\n        },\n        on: function (t, e) {\n          return e && \"function\" == typeof e && s(\"add\", t, e), this;\n        },\n        trigger: function (s, a) {\n          var n;\n          if (s) if (e.settings.isJQueryPlugin) \"remove\" == s && (s = \"removeTag\"), jQuery(e.DOM.originalInput).triggerHandler(s, [a]);else {\n            try {\n              var o = d({}, \"object\" === t(a) ? a : {\n                value: a\n              });\n              if (o.tagify = this, a instanceof Object) for (var r in a) a[r] instanceof HTMLElement && (o[r] = a[r]);\n              n = new CustomEvent(s, {\n                detail: o\n              });\n            } catch (t) {\n              console.warn(t);\n            }\n            i.dispatchEvent(n);\n          }\n        }\n      };\n    }(this)), this.isFirefox = \"undefined\" != typeof InstallTrigger, this.isIE = window.document.documentMode, this.applySettings(e, i || {}), this.state = {\n      inputText: \"\",\n      editing: !1,\n      actions: {},\n      mixMode: {},\n      dropdown: {},\n      flaggedTags: {}\n    }, this.value = [], this.listeners = {}, this.DOM = {}, this.build(e), this.getCSSVars(), this.loadOriginalValues(), this.events.customBinding.call(this), this.events.binding.call(this), void (e.autofocus && this.DOM.input.focus())) : (console.warn(\"Tagify: \", \"input element not found\", e), this);\n  }\n  return f.prototype = {\n    dropdown: g,\n    TEXTS: {\n      empty: \"empty\",\n      exceed: \"number of tags exceeded\",\n      pattern: \"pattern mismatch\",\n      duplicate: \"already exists\",\n      notAllowed: \"not allowed\"\n    },\n    customEventsList: [\"change\", \"add\", \"remove\", \"invalid\", \"input\", \"click\", \"keydown\", \"focus\", \"blur\", \"edit:input\", \"edit:updated\", \"edit:start\", \"edit:keydown\", \"dropdown:show\", \"dropdown:hide\", \"dropdown:select\", \"dropdown:updated\", \"dropdown:noMatch\"],\n    trim: function (t) {\n      return this.settings.trim && t && \"string\" == typeof t ? t.trim() : t;\n    },\n    parseHTML: function (t) {\n      return new DOMParser().parseFromString(t.trim(), \"text/html\").body.firstElementChild;\n    },\n    templates: {\n      wrapper: function (t, e) {\n        return '<tags class=\"'.concat(e.classNames.namespace, \" \").concat(e.mode ? \"\".concat(e.classNames[e.mode + \"Mode\"]) : \"\", \" \").concat(t.className, '\"\\n                    ').concat(e.readonly ? \"readonly\" : \"\", \"\\n                    \").concat(e.required ? \"required\" : \"\", '\\n                    tabIndex=\"-1\">\\n            <span ').concat(e.readonly && \"mix\" == e.mode ? \"\" : \"contenteditable\", ' data-placeholder=\"').concat(e.placeholder || \"&#8203;\", '\" aria-placeholder=\"').concat(e.placeholder || \"\", '\"\\n                class=\"').concat(e.classNames.input, '\"\\n                role=\"textbox\"\\n                aria-autocomplete=\"both\"\\n                aria-multiline=\"').concat(\"mix\" == e.mode, '\"></span>\\n        </tags>');\n      },\n      tag: function (t) {\n        return '<tag title=\"'.concat(t.title || t.value, \"\\\"\\n                    contenteditable='false'\\n                    spellcheck='false'\\n                    tabIndex=\\\"-1\\\"\\n                    class=\\\"\").concat(this.settings.classNames.tag, \" \").concat(t.class ? t.class : \"\", '\"\\n                    ').concat(this.getAttributes(t), \">\\n            <x title='' class=\\\"\").concat(this.settings.classNames.tagX, \"\\\" role='button' aria-label='remove tag'></x>\\n            <div>\\n                <span class=\\\"\").concat(this.settings.classNames.tagText, '\">').concat(t[this.settings.tagTextProp] || t.value, \"</span>\\n            </div>\\n        </tag>\");\n      },\n      dropdown: function (t) {\n        var e = t.dropdown,\n          i = \"manual\" == e.position,\n          s = \"\".concat(t.classNames.dropdown);\n        return '<div class=\"'.concat(i ? \"\" : s, \" \").concat(e.classname, '\" role=\"listbox\" aria-labelledby=\"dropdown\">\\n                    <div class=\"').concat(t.classNames.dropdownWrapper, '\"></div>\\n                </div>');\n      },\n      dropdownItem: function (t) {\n        return \"<div \".concat(this.getAttributes(t), \"\\n                    class='\").concat(this.settings.classNames.dropdownItem, \" \").concat(t.class ? t.class : \"\", '\\'\\n                    tabindex=\"0\"\\n                    role=\"option\">').concat(t.value, \"</div>\");\n      },\n      dropdownItemNoMatch: null\n    },\n    parseTemplate: function (t, e) {\n      return t = this.settings.templates[t] || t, this.parseHTML(t.apply(this, e));\n    },\n    applySettings: function (t, e) {\n      u.templates = this.templates;\n      var i = this.settings = d({}, u, e);\n      if (i.readonly = t.hasAttribute(\"readonly\"), i.placeholder = t.getAttribute(\"placeholder\") || i.placeholder || \"\", i.required = t.hasAttribute(\"required\"), this.isIE && (i.autoComplete = !1), [\"whitelist\", \"blacklist\"].forEach(function (e) {\n        var s = t.getAttribute(\"data-\" + e);\n        s && (s = s.split(i.delimiters)) instanceof Array && (i[e] = s);\n      }), \"autoComplete\" in e && !l(e.autoComplete) && (i.autoComplete = u.autoComplete, i.autoComplete.enabled = e.autoComplete), \"mix\" == i.mode && (i.autoComplete.rightKey = !0, i.delimiters = e.delimiters || null, i.tagTextProp && !i.dropdown.searchKeys.includes(i.tagTextProp) && i.dropdown.searchKeys.push(i.tagTextProp)), t.pattern) try {\n        i.pattern = new RegExp(t.pattern);\n      } catch (t) {}\n      if (this.settings.delimiters) try {\n        i.delimiters = new RegExp(this.settings.delimiters, \"g\");\n      } catch (t) {}\n      \"select\" == i.mode && (i.dropdown.enabled = 0), i.dropdown.appendTarget = e.dropdown && e.dropdown.appendTarget ? e.dropdown.appendTarget : document.body;\n    },\n    getAttributes: function (t) {\n      if (\"[object Object]\" != Object.prototype.toString.call(t)) return \"\";\n      var e,\n        i,\n        s = Object.keys(t),\n        a = \"\";\n      for (i = s.length; i--;) \"class\" != (e = s[i]) && t.hasOwnProperty(e) && void 0 !== t[e] && (a += \" \" + e + (void 0 !== t[e] ? '=\"'.concat(t[e], '\"') : \"\"));\n      return a;\n    },\n    setStateSelection: function () {\n      var t = window.getSelection(),\n        e = {\n          anchorOffset: t.anchorOffset,\n          anchorNode: t.anchorNode,\n          range: t.getRangeAt && t.rangeCount && t.getRangeAt(0)\n        };\n      return this.state.selection = e, e;\n    },\n    getCaretGlobalPosition: function () {\n      var t = document.getSelection();\n      if (t.rangeCount) {\n        var e,\n          i,\n          s = t.getRangeAt(0),\n          a = s.startContainer,\n          n = s.startOffset;\n        if (n > 0) return (i = document.createRange()).setStart(a, n - 1), i.setEnd(a, n), {\n          left: (e = i.getBoundingClientRect()).right,\n          top: e.top,\n          bottom: e.bottom\n        };\n        if (a.getBoundingClientRect) return a.getBoundingClientRect();\n      }\n      return {\n        left: -9999,\n        top: -9999\n      };\n    },\n    getCSSVars: function () {\n      var t,\n        e = getComputedStyle(this.DOM.scope, null);\n      this.CSSVars = {\n        tagHideTransition: function (t) {\n          var e = t.value;\n          return \"s\" == t.unit ? 1e3 * e : e;\n        }(function (t) {\n          if (!t) return {};\n          var e = (t = t.trim().split(\" \")[0]).split(/\\d+/g).filter(function (t) {\n            return t;\n          }).pop().trim();\n          return {\n            value: +t.split(e).filter(function (t) {\n              return t;\n            })[0].trim(),\n            unit: e\n          };\n        }((t = \"tag-hide-transition\", e.getPropertyValue(\"--\" + t))))\n      };\n    },\n    build: function (t) {\n      var e = this.DOM;\n      this.settings.mixMode.integrated ? (e.originalInput = null, e.scope = t, e.input = t) : (e.originalInput = t, e.scope = this.parseTemplate(\"wrapper\", [t, this.settings]), e.input = e.scope.querySelector(\".\" + this.settings.classNames.input), t.parentNode.insertBefore(e.scope, t)), this.settings.dropdown.enabled >= 0 && this.dropdown.init.call(this);\n    },\n    destroy: function () {\n      this.DOM.scope.parentNode.removeChild(this.DOM.scope), this.dropdown.hide.call(this, !0), clearTimeout(this.dropdownHide__bindEventsTimeout);\n    },\n    loadOriginalValues: function (t) {\n      var e,\n        i = this.settings;\n      if (t = t || (i.mixMode.integrated ? this.DOM.input.textContent : this.DOM.originalInput.value)) {\n        if (this.removeAllTags(), \"mix\" == i.mode) this.parseMixTags(t.trim()), (e = this.DOM.input.lastChild) && \"BR\" == e.tagName || this.DOM.input.insertAdjacentHTML(\"beforeend\", \"<br>\");else {\n          try {\n            JSON.parse(t) instanceof Array && (t = JSON.parse(t));\n          } catch (t) {}\n          this.addTags(t).forEach(function (t) {\n            return t && t.classList.add(i.classNames.tagNoAnimation);\n          });\n        }\n      } else this.postUpdate();\n      this.state.lastOriginalValueReported = i.mixMode.integrated ? \"\" : this.DOM.originalInput.value, this.state.loadedOriginalValues = !0;\n    },\n    cloneEvent: function (t) {\n      var e = {};\n      for (var i in t) e[i] = t[i];\n      return e;\n    },\n    loading: function (t) {\n      return this.state.isLoading = t, this.DOM.scope.classList[t ? \"add\" : \"remove\"](this.settings.classNames.scopeLoading), this;\n    },\n    tagLoading: function (t, e) {\n      return t && t.classList[e ? \"add\" : \"remove\"](this.settings.classNames.tagLoading), this;\n    },\n    toggleClass: function (t, e) {\n      \"string\" == typeof t && this.DOM.scope.classList.toggle(t, e);\n    },\n    toggleFocusClass: function (t) {\n      this.toggleClass(this.settings.classNames.focus, !!t);\n    },\n    triggerChangeEvent: function () {\n      if (!this.settings.mixMode.integrated) {\n        var t = this.DOM.originalInput,\n          e = this.state.lastOriginalValueReported !== t.value,\n          i = new CustomEvent(\"change\", {\n            bubbles: !0\n          });\n        e && (this.state.lastOriginalValueReported = t.value, i.simulated = !0, t._valueTracker && t._valueTracker.setValue(Math.random()), t.dispatchEvent(i), this.trigger(\"change\", this.state.lastOriginalValueReported), t.value = this.state.lastOriginalValueReported);\n      }\n    },\n    events: p,\n    fixFirefoxLastTagNoCaret: function () {},\n    placeCaretAfterNode: function (t) {\n      if (t && t.parentNode) {\n        var e = t.nextSibling,\n          i = window.getSelection(),\n          s = i.getRangeAt(0);\n        i.rangeCount && (s.setStartBefore(e || t), s.setEndBefore(e || t), i.removeAllRanges(), i.addRange(s));\n      }\n    },\n    insertAfterTag: function (t, e) {\n      if (e = e || this.settings.mixMode.insertAfterTag, t && t.parentNode && e) return e = \"string\" == typeof e ? document.createTextNode(e) : e, t.parentNode.insertBefore(e, t.nextSibling), e;\n    },\n    editTag: function (t, e) {\n      var i = this;\n      t = t || this.getLastTag(), e = e || {}, this.dropdown.hide.call(this);\n      var s = this.settings;\n      function a() {\n        return t.querySelector(\".\" + s.classNames.tagText);\n      }\n      var n = a(),\n        o = this.getNodeIndex(t),\n        r = this.tagData(t),\n        l = this.events.callbacks,\n        c = this,\n        h = !0;\n      if (n) {\n        if (!(r instanceof Object && \"editable\" in r) || r.editable) return n.setAttribute(\"contenteditable\", !0), t.classList.add(s.classNames.tagEditing), this.tagData(t, {\n          __originalData: d({}, r),\n          __originalHTML: t.innerHTML\n        }), n.addEventListener(\"focus\", l.onEditTagFocus.bind(this, t)), n.addEventListener(\"blur\", function () {\n          setTimeout(function () {\n            return l.onEditTagBlur.call(c, a());\n          });\n        }), n.addEventListener(\"input\", l.onEditTagInput.bind(this, n)), n.addEventListener(\"keydown\", function (e) {\n          return l.onEditTagkeydown.call(i, e, t);\n        }), n.focus(), this.setRangeAtStartEnd(!1, n), e.skipValidation || (h = this.editTagToggleValidity(t, r.value)), n.originalIsValid = h, this.trigger(\"edit:start\", {\n          tag: t,\n          index: o,\n          data: r,\n          isValid: h\n        }), this;\n      } else console.warn(\"Cannot find element in Tag template: .\", s.classNames.tagText);\n    },\n    editTagToggleValidity: function (t, e) {\n      var i,\n        s = this.tagData(t);\n      if (s) return i = !(!s.__isValid || 1 == s.__isValid), t.classList.toggle(this.settings.classNames.tagInvalid, i), s.__isValid;\n      console.warn(\"tag has no data: \", t, s);\n    },\n    onEditTagDone: function (t, e) {\n      e = e || {};\n      var i = {\n        tag: t = t || this.state.editing.scope,\n        index: this.getNodeIndex(t),\n        previousData: this.tagData(t),\n        data: e\n      };\n      this.trigger(\"edit:beforeUpdate\", i), this.state.editing = !1, delete e.__originalData, delete e.__originalHTML, t && e[this.settings.tagTextProp] ? (this.editTagToggleValidity(t), this.replaceTag(t, e)) : t && this.removeTags(t), this.trigger(\"edit:updated\", i), this.dropdown.hide.call(this), this.settings.keepInvalidTags && this.reCheckInvalidTags();\n    },\n    replaceTag: function (t, e) {\n      e && e.value || (e = t.__tagifyTagData), e.__isValid && 1 != e.__isValid && d(e, this.getInvalidTagAttrs(e, e.__isValid));\n      var i = this.createTagElem(e);\n      t.parentNode.replaceChild(i, t), this.updateValueByDOMTags();\n    },\n    updateValueByDOMTags: function () {\n      var t = this;\n      this.value.length = 0, [].forEach.call(this.getTagElms(), function (e) {\n        e.classList.contains(t.settings.classNames.tagNotAllowed) || t.value.push(t.tagData(e));\n      }), this.update();\n    },\n    setRangeAtStartEnd: function (t, e) {\n      t = \"number\" == typeof t ? t : !!t, e = (e = e || this.DOM.input).lastChild || e;\n      var i = document.getSelection();\n      try {\n        i.rangeCount >= 1 && [\"Start\", \"End\"].forEach(function (s) {\n          return i.getRangeAt(0)[\"set\" + s](e, t || e.length);\n        });\n      } catch (t) {\n        console.warn(\"Tagify: \", t);\n      }\n    },\n    injectAtCaret: function (t, e) {\n      if (e = e || this.state.selection.range) return \"string\" == typeof t && (t = document.createTextNode(t)), e.deleteContents(), e.insertNode(t), this.setRangeAtStartEnd(!1, t), this.updateValueByDOMTags(), this.update(), this;\n    },\n    input: {\n      set: function () {\n        var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\",\n          e = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1],\n          i = this.settings.dropdown.closeOnSelect;\n        this.state.inputText = t, e && (this.DOM.input.innerHTML = t), !t && i && this.dropdown.hide.bind(this), this.input.autocomplete.suggest.call(this), this.input.validate.call(this);\n      },\n      validate: function () {\n        var t = !this.state.inputText || !0 === this.validateTag({\n          value: this.state.inputText\n        });\n        return this.DOM.input.classList.toggle(this.settings.classNames.inputInvalid, !t), t;\n      },\n      normalize: function (t) {\n        var e = t || this.DOM.input,\n          i = [];\n        e.childNodes.forEach(function (t) {\n          return 3 == t.nodeType && i.push(t.nodeValue);\n        }), i = i.join(\"\\n\");\n        try {\n          i = i.replace(/(?:\\r\\n|\\r|\\n)/g, this.settings.delimiters.source.charAt(0));\n        } catch (t) {}\n        return i = i.replace(/\\s/g, \" \"), this.settings.trim && (i = i.replace(/^\\s+/, \"\")), i;\n      },\n      autocomplete: {\n        suggest: function (t) {\n          if (this.settings.autoComplete.enabled) {\n            \"string\" == typeof (t = t || {}) && (t = {\n              value: t\n            });\n            var e = t.value ? \"\" + t.value : \"\",\n              i = e.substr(0, this.state.inputText.length).toLowerCase(),\n              s = e.substring(this.state.inputText.length);\n            e && this.state.inputText && i == this.state.inputText.toLowerCase() ? (this.DOM.input.setAttribute(\"data-suggest\", s), this.state.inputSuggestion = t) : (this.DOM.input.removeAttribute(\"data-suggest\"), delete this.state.inputSuggestion);\n          }\n        },\n        set: function (t) {\n          var e = this.DOM.input.getAttribute(\"data-suggest\"),\n            i = t || (e ? this.state.inputText + e : null);\n          return !!i && (\"mix\" == this.settings.mode ? this.replaceTextWithNode(document.createTextNode(this.state.tag.prefix + i)) : (this.input.set.call(this, i), this.setRangeAtStartEnd()), this.input.autocomplete.suggest.call(this), this.dropdown.hide.call(this), !0);\n        }\n      }\n    },\n    getTagIdx: function (t) {\n      return this.value.findIndex(function (e) {\n        return e.value == t.value;\n      });\n    },\n    getNodeIndex: function (t) {\n      var e = 0;\n      if (t) for (; t = t.previousElementSibling;) e++;\n      return e;\n    },\n    getTagElms: function () {\n      for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) e[i] = arguments[i];\n      var s = [\".\" + this.settings.classNames.tag].concat(e).join(\".\");\n      return [].slice.call(this.DOM.scope.querySelectorAll(s));\n    },\n    getLastTag: function () {\n      var t = this.DOM.scope.querySelectorAll(\".\".concat(this.settings.classNames.tag, \":not(.\").concat(this.settings.classNames.tagHide, \"):not([readonly])\"));\n      return t[t.length - 1];\n    },\n    tagData: function (t, e, i) {\n      return t ? (e && (t.__tagifyTagData = i ? e : d({}, t.__tagifyTagData || {}, e)), t.__tagifyTagData) : (console.warn(\"tag elment doesn't exist\", t, e), e);\n    },\n    isTagDuplicate: function (t, e) {\n      var i = this,\n        a = this.settings;\n      return \"select\" != a.mode && this.value.reduce(function (n, o) {\n        return s(i.trim(\"\" + t), o.value, e || a.dropdown.caseSensitive) ? n + 1 : n;\n      }, 0);\n    },\n    getTagIndexByValue: function (t) {\n      var e = this,\n        i = [];\n      return this.getTagElms().forEach(function (a, n) {\n        s(e.trim(a.textContent), t, e.settings.dropdown.caseSensitive) && i.push(n);\n      }), i;\n    },\n    getTagElmByValue: function (t) {\n      var e = this.getTagIndexByValue(t)[0];\n      return this.getTagElms()[e];\n    },\n    flashTag: function (t) {\n      var e = this;\n      t && (t.classList.add(this.settings.classNames.tagFlash), setTimeout(function () {\n        t.classList.remove(e.settings.classNames.tagFlash);\n      }, 100));\n    },\n    isTagBlacklisted: function (t) {\n      return t = this.trim(t.toLowerCase()), this.settings.blacklist.filter(function (e) {\n        return (\"\" + e).toLowerCase() == t;\n      }).length;\n    },\n    isTagWhitelisted: function (t) {\n      return !!this.getWhitelistItem(t);\n    },\n    getWhitelistItem: function (t, e, i) {\n      e = e || \"value\";\n      var a,\n        n = this.settings;\n      return (i = i || n.whitelist).some(function (i) {\n        var o = \"string\" == typeof i ? i : i[e] || i.value;\n        if (s(o, t, n.dropdown.caseSensitive, n.trim)) return a = \"string\" == typeof i ? {\n          value: i\n        } : i, !0;\n      }), a || \"value\" != e || \"value\" == n.tagTextProp || (a = this.getWhitelistItem(t, n.tagTextProp, i)), a;\n    },\n    validateTag: function (t) {\n      var e = this.settings,\n        i = \"value\" in t ? \"value\" : e.tagTextProp,\n        s = this.trim(t[i] + \"\");\n      return (t[i] + \"\").trim() ? e.pattern && e.pattern instanceof RegExp && !e.pattern.test(s) ? this.TEXTS.pattern : !e.duplicates && this.isTagDuplicate(s, this.state.editing) ? this.TEXTS.duplicate : this.isTagBlacklisted(s) || e.enforceWhitelist && !this.isTagWhitelisted(s) ? this.TEXTS.notAllowed : !e.validate || e.validate(t) : this.TEXTS.empty;\n    },\n    getInvalidTagAttrs: function (t, e) {\n      return {\n        \"aria-invalid\": !0,\n        class: \"\".concat(t.class || \"\", \" \").concat(this.settings.classNames.tagNotAllowed).trim(),\n        title: e\n      };\n    },\n    hasMaxTags: function () {\n      return this.value.length >= this.settings.maxTags && this.TEXTS.exceed;\n    },\n    setReadonly: function (t) {\n      var e = this.settings;\n      document.activeElement.blur(), e.readonly = t, this.DOM.scope[(t ? \"set\" : \"remove\") + \"Attribute\"](\"readonly\", !0), \"mix\" == e.mode && (this.DOM.input.contentEditable = !t);\n    },\n    normalizeTags: function (t) {\n      var s = this,\n        a = this.settings,\n        n = a.whitelist,\n        o = a.delimiters,\n        r = a.mode,\n        l = a.tagTextProp,\n        d = a.enforceWhitelist,\n        c = [],\n        h = !!n && n[0] instanceof Object,\n        g = t instanceof Array,\n        u = function (t) {\n          return (t + \"\").split(o).filter(function (t) {\n            return t;\n          }).map(function (t) {\n            var i;\n            return e(i = {}, l, s.trim(t)), e(i, \"value\", s.trim(t)), i;\n          });\n        };\n      if (\"number\" == typeof t && (t = t.toString()), \"string\" == typeof t) {\n        if (!t.trim()) return [];\n        t = u(t);\n      } else if (g) {\n        var p;\n        t = (p = []).concat.apply(p, i(t.map(function (t) {\n          return t.value ? t : u(t);\n        })));\n      }\n      return h && (t.forEach(function (t) {\n        var e = c.map(function (t) {\n            return t.value;\n          }),\n          i = s.dropdown.filterListItems.call(s, t[l], {\n            exact: !0\n          }).filter(function (t) {\n            return !e.includes(t.value);\n          }),\n          a = i.length > 1 ? s.getWhitelistItem(t[l], l, i) : i[0];\n        a && a instanceof Object ? c.push(a) : \"mix\" == r || d || (null == t.value && (t.value = t[l]), c.push(t));\n      }), t = c), t;\n    },\n    parseMixTags: function (t) {\n      var e = this,\n        i = this.settings,\n        s = i.mixTagsInterpolator,\n        a = i.duplicates,\n        n = i.transformTag,\n        o = i.enforceWhitelist,\n        r = i.maxTags,\n        l = i.tagTextProp,\n        d = [];\n      return t = t.split(s[0]).map(function (t, i) {\n        var c,\n          h,\n          g,\n          u = t.split(s[1]),\n          p = u[0],\n          f = d.length == r;\n        try {\n          if (p == +p) throw Error;\n          h = JSON.parse(p);\n        } catch (t) {\n          h = e.normalizeTags(p)[0] || {\n            value: p\n          };\n        }\n        if (f || !(u.length > 1) || o && !e.isTagWhitelisted(h.value) || !a && e.isTagDuplicate(h.value)) {\n          if (t) return i ? s[0] + t : t;\n        } else n.call(e, h), h[c = h[l] ? l : \"value\"] = e.trim(h[c]), g = e.createTagElem(h), d.push(h), g.classList.add(e.settings.classNames.tagNoAnimation), u[0] = g.outerHTML, e.value.push(h);\n        return u.join(\"\");\n      }).join(\"\"), this.DOM.input.innerHTML = t, this.DOM.input.appendChild(document.createTextNode(\"\")), this.DOM.input.normalize(), this.getTagElms().forEach(function (t, i) {\n        return e.tagData(t, d[i]);\n      }), this.update({\n        withoutChangeEvent: !0\n      }), t;\n    },\n    replaceTextWithNode: function (t, e) {\n      if (this.state.tag || e) {\n        e = e || this.state.tag.prefix + this.state.tag.value;\n        var i,\n          s,\n          a = window.getSelection(),\n          n = a.anchorNode,\n          o = this.state.tag.delimiters ? this.state.tag.delimiters.length : 0;\n        return n.splitText(a.anchorOffset - o), i = n.nodeValue.lastIndexOf(e), s = n.splitText(i), t && n.parentNode.replaceChild(t, s), !0;\n      }\n    },\n    selectTag: function (t, e) {\n      if (!this.settings.enforceWhitelist || this.isTagWhitelisted(e.value)) return this.input.set.call(this, e.value, !0), this.state.actions.selectOption && setTimeout(this.setRangeAtStartEnd.bind(this)), this.getLastTag() ? this.replaceTag(this.getLastTag(), e) : this.appendTag(t), this.value[0] = e, this.trigger(\"add\", {\n        tag: t,\n        data: e\n      }), this.update(), [t];\n    },\n    addEmptyTag: function (t) {\n      var e = d({\n          value: \"\"\n        }, t || {}),\n        i = this.createTagElem(e);\n      this.tagData(i, e), this.appendTag(i), this.editTag(i, {\n        skipValidation: !0\n      });\n    },\n    addTags: function (t, e) {\n      var i = this,\n        s = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : this.settings.skipInvalid,\n        a = [],\n        n = this.settings;\n      return t && 0 != t.length ? (t = this.normalizeTags(t), \"mix\" == n.mode ? this.addMixTags(t) : (\"select\" == n.mode && (e = !1), this.DOM.input.removeAttribute(\"style\"), t.forEach(function (t) {\n        var e,\n          o = {},\n          r = Object.assign({}, t, {\n            value: t.value + \"\"\n          });\n        if ((t = Object.assign({}, r)).__isValid = i.hasMaxTags() || i.validateTag(t), n.transformTag.call(i, t), !0 !== t.__isValid) {\n          if (s) return;\n          d(o, i.getInvalidTagAttrs(t, t.__isValid), {\n            __preInvalidData: r\n          }), t.__isValid == i.TEXTS.duplicate && i.flashTag(i.getTagElmByValue(t.value));\n        }\n        if (t.readonly && (o[\"aria-readonly\"] = !0), e = i.createTagElem(d({}, t, o)), a.push(e), \"select\" == n.mode) return i.selectTag(e, t);\n        i.appendTag(e), t.__isValid && !0 === t.__isValid ? (i.value.push(t), i.update(), i.trigger(\"add\", {\n          tag: e,\n          index: i.value.length - 1,\n          data: t\n        })) : (i.trigger(\"invalid\", {\n          data: t,\n          index: i.value.length,\n          tag: e,\n          message: t.__isValid\n        }), n.keepInvalidTags || setTimeout(function () {\n          return i.removeTags(e, !0);\n        }, 1e3)), i.dropdown.position.call(i);\n      }), t.length && e && this.input.set.call(this), this.dropdown.refilter.call(this), a)) : (\"select\" == n.mode && this.removeAllTags(), a);\n    },\n    addMixTags: function (t) {\n      var e = this;\n      if (t[0].prefix || this.state.tag) this.prefixedTextToTag(t[0]);else {\n        \"string\" == typeof t && (t = [{\n          value: t\n        }]);\n        var i = !!this.state.selection,\n          s = document.createDocumentFragment();\n        t.forEach(function (t) {\n          var i = e.createTagElem(t);\n          s.appendChild(i), e.insertAfterTag(i);\n        }), i ? this.injectAtCaret(s) : (this.DOM.input.focus(), (i = this.setStateSelection()).range.setStart(this.DOM.input, i.range.endOffset), i.range.setEnd(this.DOM.input, i.range.endOffset), this.DOM.input.appendChild(s), this.updateValueByDOMTags(), this.update());\n      }\n    },\n    prefixedTextToTag: function (t) {\n      var e,\n        i = this,\n        s = this.settings,\n        a = this.state.tag.delimiters;\n      if (s.transformTag.call(this, t), t.prefix = t.prefix || this.state.tag ? this.state.tag.prefix : (s.pattern.source || s.pattern)[0], e = this.createTagElem(t), this.replaceTextWithNode(e) || this.DOM.input.appendChild(e), setTimeout(function () {\n        return e.classList.add(i.settings.classNames.tagNoAnimation);\n      }, 300), this.value.push(t), this.update(), !a) {\n        var n = this.insertAfterTag(e) || e;\n        this.placeCaretAfterNode(n);\n      }\n      return this.state.tag = null, this.trigger(\"add\", d({}, {\n        tag: e\n      }, {\n        data: t\n      })), e;\n    },\n    appendTag: function (t) {\n      var e = this.DOM.scope.lastElementChild;\n      e === this.DOM.input ? this.DOM.scope.insertBefore(t, e) : this.DOM.scope.appendChild(t);\n    },\n    createTagElem: function (t) {\n      var e,\n        i = d({}, t, {\n          value: o(t.value + \"\")\n        });\n      return function (t) {\n        for (var e, i = document.createNodeIterator(t, NodeFilter.SHOW_TEXT, null, !1); e = i.nextNode();) e.textContent.trim() || e.parentNode.removeChild(e);\n      }(e = this.parseTemplate(\"tag\", [i])), this.tagData(e, t), e;\n    },\n    reCheckInvalidTags: function () {\n      var t = this,\n        e = this.settings,\n        i = \".\".concat(e.classNames.tag, \".\").concat(e.classNames.tagNotAllowed),\n        s = this.DOM.scope.querySelectorAll(i);\n      [].forEach.call(s, function (e) {\n        var i = t.tagData(e),\n          s = e.getAttribute(\"title\") == t.TEXTS.duplicate,\n          a = !0 === t.validateTag(i);\n        s && a && (i = i.__preInvalidData ? i.__preInvalidData : {\n          value: i.value\n        }, t.replaceTag(e, i));\n      });\n    },\n    removeTags: function (t, e, i) {\n      var s,\n        a = this;\n      t = t && t instanceof HTMLElement ? [t] : t instanceof Array ? t : t ? [t] : [this.getLastTag()], s = t.reduce(function (t, e) {\n        return e && \"string\" == typeof e && (e = a.getTagElmByValue(e)), e && t.push({\n          node: e,\n          idx: a.getTagIdx(a.tagData(e)),\n          data: a.tagData(e, {\n            __removed: !0\n          })\n        }), t;\n      }, []), i = \"number\" == typeof i ? i : this.CSSVars.tagHideTransition, \"select\" == this.settings.mode && (i = 0, this.input.set.call(this)), 1 == s.length && s[0].node.classList.contains(this.settings.classNames.tagNotAllowed) && (e = !0), s.length && this.settings.hooks.beforeRemoveTag(s, {\n        tagify: this\n      }).then(function () {\n        function t(t) {\n          t.node.parentNode && (t.node.parentNode.removeChild(t.node), e ? this.settings.keepInvalidTags && this.trigger(\"remove\", {\n            tag: t.node,\n            index: t.idx\n          }) : (this.trigger(\"remove\", {\n            tag: t.node,\n            index: t.idx,\n            data: t.data\n          }), this.dropdown.refilter.call(this), this.dropdown.position.call(this), this.DOM.input.normalize(), this.settings.keepInvalidTags && this.reCheckInvalidTags()));\n        }\n        i && i > 10 && 1 == s.length ? function (e) {\n          e.node.style.width = parseFloat(window.getComputedStyle(e.node).width) + \"px\", document.body.clientTop, e.node.classList.add(this.settings.classNames.tagHide), setTimeout(t.bind(this), i, e);\n        }.call(a, s[0]) : s.forEach(t.bind(a)), e || (s.forEach(function (t) {\n          var e = Object.assign({}, t.data);\n          delete e.__removed;\n          var i = a.getTagIdx(e);\n          i > -1 && a.value.splice(i, 1);\n        }), a.update());\n      }).catch(function (t) {});\n    },\n    removeAllTags: function () {\n      this.value = [], \"mix\" == this.settings.mode ? this.DOM.input.innerHTML = \"\" : Array.prototype.slice.call(this.getTagElms()).forEach(function (t) {\n        return t.parentNode.removeChild(t);\n      }), this.dropdown.position.call(this), \"select\" == this.settings.mode && this.input.set.call(this), this.update();\n    },\n    postUpdate: function () {\n      var t = this.settings.classNames,\n        e = \"mix\" == this.settings.mode ? this.settings.mixMode.integrated ? this.DOM.input.textContent : this.DOM.originalInput.value : this.value.length;\n      this.toggleClass(t.hasMaxTags, this.value.length >= this.settings.maxTags), this.toggleClass(t.hasNoTags, !this.value.length), this.toggleClass(t.empty, !e);\n    },\n    update: function (t) {\n      var e,\n        i,\n        s = this.DOM.originalInput,\n        a = (t || {}).withoutChangeEvent,\n        n = (e = this.value, i = [\"__isValid\", \"__removed\"], e.map(function (t) {\n          var e = {};\n          for (var s in t) i.indexOf(s) < 0 && (e[s] = t[s]);\n          return e;\n        }));\n      this.settings.mixMode.integrated || (s.value = \"mix\" == this.settings.mode ? this.getMixedTagsAsString(n) : n.length ? this.settings.originalInputValueFormat ? this.settings.originalInputValueFormat(n) : JSON.stringify(n) : \"\"), this.postUpdate(), !a && this.state.loadedOriginalValues && this.triggerChangeEvent();\n    },\n    getMixedTagsAsString: function () {\n      var t = \"\",\n        e = this,\n        i = this.settings.mixTagsInterpolator;\n      return function s(a) {\n        a.childNodes.forEach(function (a) {\n          if (1 == a.nodeType) {\n            if (a.classList.contains(e.settings.classNames.tag) && e.tagData(a)) {\n              if (e.tagData(a).__removed) return;\n              return void (t += i[0] + JSON.stringify(a.__tagifyTagData) + i[1]);\n            }\n            \"BR\" != a.tagName || a.parentNode != e.DOM.input && 1 != a.parentNode.childNodes.length ? \"DIV\" != a.tagName && \"P\" != a.tagName || (t += \"\\r\\n\", s(a)) : t += \"\\r\\n\";\n          } else t += a.textContent;\n        });\n      }(this.DOM.input), t;\n    }\n  }, f.prototype.removeTag = f.prototype.removeTags, f;\n});","var makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n  if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n  if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n  return defineProperty.f(target, name, descriptor);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n  return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n  if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n    name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\)/, '$1') + ']';\n  }\n  if (options && options.getter) name = 'get ' + name;\n  if (options && options.setter) name = 'set ' + name;\n  if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n    if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n    else value.name = name;\n  }\n  if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n    defineProperty(value, 'length', { value: options.arity });\n  }\n  try {\n    if (options && hasOwn(options, 'constructor') && options.constructor) {\n      if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n    // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n    } else if (value.prototype) value.prototype = undefined;\n  } catch (error) { /* empty */ }\n  var state = enforceInternalState(value);\n  if (!hasOwn(state, 'source')) {\n    state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n  } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","var documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n  all: documentAll,\n  IS_HTMLDDA: IS_HTMLDDA\n};\n","var 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 $TypeError(\"Can't call method on \" + it);\n  return it;\n};\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","var NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar global = require('../internals/global');\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 = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  /* 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 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 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","var 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","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","var 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","var 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","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\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","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol();\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\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","var $String = String;\n\nmodule.exports = function (argument) {\n  try {\n    return $String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.29.1',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\n  license: 'https://github.com/zloirock/core-js/blob/v3.29.1/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n  if (!options) options = {};\n  var simple = options.enumerable;\n  var name = options.name !== undefined ? options.name : key;\n  if (isCallable(value)) makeBuiltIn(value, name, options);\n  if (options.global) {\n    if (simple) O[key] = value;\n    else defineGlobalProperty(key, value);\n  } else {\n    try {\n      if (!options.unsafe) delete O[key];\n      else if (O[key]) simple = true;\n    } catch (error) { /* empty */ }\n    if (simple) O[key] = value;\n    else definePropertyModule.f(O, key, {\n      value: value,\n      enumerable: false,\n      configurable: !options.nonConfigurable,\n      writable: !options.nonWritable\n    });\n  } return O;\n};\n","var 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","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target         - name of the target object\n  options.global         - target is the global object\n  options.stat           - export as static methods of target\n  options.proto          - export as prototype methods of target\n  options.real           - real prototype method for the `pure` version\n  options.forced         - export even if the native feature is available\n  options.bind           - bind methods to the target, required for the `pure` version\n  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe         - use the simple assignment of property instead of delete + defineProperty\n  options.sham           - add a flag to not completely full polyfills\n  options.enumerable     - export as enumerable property\n  options.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 FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || defineGlobalProperty(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.dontCallGetSet) {\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    defineBuiltIn(target, key, sourceProperty, options);\n  }\n};\n","var 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","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar $location, defer, channel, port;\n\nfails(function () {\n  // Deno throws a ReferenceError on `location` access without `--location` flag\n  $location = global.location;\n});\n\nvar run = function (id) {\n  if (hasOwn(queue, id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar eventListener = function (event) {\n  run(event.data);\n};\n\nvar globalPostMessageDefer = function (id) {\n  // old engines have not location.origin\n  global.postMessage(String(id), $location.protocol + '//' + $location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(handler) {\n    validateArgumentsLength(arguments.length, 1);\n    var fn = isCallable(handler) ? handler : Function(handler);\n    var args = arraySlice(arguments, 1);\n    queue[++counter] = function () {\n      apply(fn, undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (IS_NODE) {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = eventListener;\n    defer = bind(port.postMessage, port);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    global.addEventListener &&\n    isCallable(global.postMessage) &&\n    !global.importScripts &&\n    $location && $location.protocol !== 'file:' &&\n    !fails(globalPostMessageDefer)\n  ) {\n    defer = globalPostMessageDefer;\n    global.addEventListener('message', eventListener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n","var 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-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n  if (passed < required) throw $TypeError('Not enough arguments');\n  return passed;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\nfunction defaultSetTimout() {\n  throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n  throw new Error('clearTimeout has not been defined');\n}\n(function () {\n  try {\n    if (typeof setTimeout === 'function') {\n      cachedSetTimeout = setTimeout;\n    } else {\n      cachedSetTimeout = defaultSetTimout;\n    }\n  } catch (e) {\n    cachedSetTimeout = defaultSetTimout;\n  }\n  try {\n    if (typeof clearTimeout === 'function') {\n      cachedClearTimeout = clearTimeout;\n    } else {\n      cachedClearTimeout = defaultClearTimeout;\n    }\n  } catch (e) {\n    cachedClearTimeout = defaultClearTimeout;\n  }\n})();\nfunction runTimeout(fun) {\n  if (cachedSetTimeout === setTimeout) {\n    //normal enviroments in sane situations\n    return setTimeout(fun, 0);\n  }\n  // if setTimeout wasn't available but was latter defined\n  if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n    cachedSetTimeout = setTimeout;\n    return setTimeout(fun, 0);\n  }\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedSetTimeout(fun, 0);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n      return cachedSetTimeout.call(null, fun, 0);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n      return cachedSetTimeout.call(this, fun, 0);\n    }\n  }\n}\nfunction runClearTimeout(marker) {\n  if (cachedClearTimeout === clearTimeout) {\n    //normal enviroments in sane situations\n    return clearTimeout(marker);\n  }\n  // if clearTimeout wasn't available but was latter defined\n  if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n    cachedClearTimeout = clearTimeout;\n    return clearTimeout(marker);\n  }\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedClearTimeout(marker);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n      return cachedClearTimeout.call(null, marker);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n      // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n      return cachedClearTimeout.call(this, marker);\n    }\n  }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\nfunction cleanUpNextTick() {\n  if (!draining || !currentQueue) {\n    return;\n  }\n  draining = false;\n  if (currentQueue.length) {\n    queue = currentQueue.concat(queue);\n  } else {\n    queueIndex = -1;\n  }\n  if (queue.length) {\n    drainQueue();\n  }\n}\nfunction drainQueue() {\n  if (draining) {\n    return;\n  }\n  var timeout = runTimeout(cleanUpNextTick);\n  draining = true;\n  var len = queue.length;\n  while (len) {\n    currentQueue = queue;\n    queue = [];\n    while (++queueIndex < len) {\n      if (currentQueue) {\n        currentQueue[queueIndex].run();\n      }\n    }\n    queueIndex = -1;\n    len = queue.length;\n  }\n  currentQueue = null;\n  draining = false;\n  runClearTimeout(timeout);\n}\nprocess.nextTick = function (fun) {\n  var args = new Array(arguments.length - 1);\n  if (arguments.length > 1) {\n    for (var i = 1; i < arguments.length; i++) {\n      args[i - 1] = arguments[i];\n    }\n  }\n  queue.push(new Item(fun, args));\n  if (queue.length === 1 && !draining) {\n    runTimeout(drainQueue);\n  }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n  this.fun = fun;\n  this.array = array;\n}\nItem.prototype.run = function () {\n  this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\nfunction noop() {}\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\nprocess.listeners = function (name) {\n  return [];\n};\nprocess.binding = function (name) {\n  throw new Error('process.binding is not supported');\n};\nprocess.cwd = function () {\n  return '/';\n};\nprocess.chdir = function (dir) {\n  throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n  return 0;\n};","var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function () {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function () {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\nTimeout.prototype.close = function () {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function (item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\nexports.unenroll = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\nexports._unrefActive = exports.active = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout) item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;","/* eslint no-console:0 */\n// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n//\n// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate\n// layout file, like app/views/layouts/application.html.erb\n\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('../images', true)\n// const imagePath = (name) => images(name, true)\n\nimport 'core-js/stable';\nimport 'regenerator-runtime/runtime';\n\n// Turbolinks\nvar Turbolinks = require(\"turbolinks\");\nTurbolinks.start();\n\n// JS dependencies (npm/yarn)\nimport $ from 'jquery';\nimport \"./jquery\";\nimport 'jquery-ujs';\nimport 'popper.js';\nimport 'bootstrap/dist/js/bootstrap.bundle.min';\nimport 'bootstrap-switch-button';\nimport 'summernote/dist/summernote-lite.min.js';\nimport 'cocoon-js';\nimport 'flatpickr';\nimport 'select2';\nimport 'select2/dist/css/select2.css';\nimport Tagify from '@yaireo/tagify';\nimport 'sweetalert';\n\n// JS dependencies (other external)\n\nimport '../libraries/detect-swipe';\nimport '../libraries/featherlight';\nimport '../libraries/featherlight-gallery';\nimport '../libraries/jquery-bar-rating';\n\n// Load SCSS\nimport '../stylesheets/application';\n\n// Our Code\nimport './util/staging_placeholder';\n\nimport './components/backend_menu/backend_menu';\nimport './components/backend_search/backend_search';\nimport './components/chart/chartkick';\nimport './components/chart/highcharts';\nimport './components/checkout/checkout';\nimport './components/input_date/input_date';\nimport './components/input_file/input_file';\nimport './components/input_password/show_password';\nimport './components/input_select/input_select';\nimport './components/input_select/input_user_select';\nimport './components/input_select/input_variant_file_select';\nimport './components/input_slug/input_slug';\nimport './components/input_text/input_text';\nimport './components/input_text/counted';\nimport './components/modal/modal_cart_login';\nimport './components/modal/modal_support';\nimport './components/modal/modal_youtube';\nimport './components/product/bar_rating';\nimport './components/product/product_page';\nimport './components/product/product_rating_form';\nimport './components/product/product_ratings_pagination';\nimport './components/product/product_content';\nimport './components/product/product_sidebar';\nimport './components/product/variant_pricing';\nimport './components/sort/sort';\nimport './components/sort/product_grid';\nimport './components/swiper_init/swiper';\nimport './components/analytics/google_analytics';\nimport './components/copy/copy_text';\nimport './components/mailchimp/mailchimp_subscribe_form';\n\nimport './views/account/account';\nimport './views/admin/coupons/coupons';\nimport './views/admin/orders/orders';\nimport './views/admin/payouts/payouts';\nimport './views/admin/product_review/flags';\nimport './views/admin/product_review/product_edit';\nimport './views/admin/refunds/refunds';\nimport './views/admin/sale_campaigns/sale_campaigns';\n\nimport './views/creator/affiliates/creator_affiliates';\nimport './views/creator/emails/emails';\nimport './views/creator/products/categories';\nimport './views/creator/products/commission';\nimport './views/creator/products/dev_fund';\nimport './views/creator/products/edit_product';\nimport './views/creator/products/form_sections';\nimport './views/creator/products/submit_review';\nimport './views/creator/products/variants_sortable';\nimport './views/creator/products/version_downloads_sortable';\nimport './views/creator/products/version_form';\nimport './views/creator/products/webhook_form';\nimport './views/creator/products/webhook_resend_form';\n\nimport './views/header/main_menu';\nimport './views/header/search';\nimport './views/header/user_dropdown';\nimport './views/header/creator_dropdown';\nimport './views/inbox/read_all_switch';\nimport './views/login/login';\nimport './views/order/pickup';\nimport './views/privacy/privacy';\n\n$(document).on('turbolinks:load', function(){\n\n  // Boootsrap initialization\n  $('.alert').alert();\n  $('[data-bs-toggle=\"tooltip\"]').tooltip();\n  $('.toast').toast('show');\n\n  // Tagify initialization\n  var $tagInputs = $('.js-tags');\n  if ($tagInputs.length > 0){\n    $tagInputs.each(function(index, el){\n      var $el = $(el);\n      var taglist = $el.data('taglist') || [];\n\n      var tagify = new Tagify(el, {\n        placeholder: 'Tags ...',\n        whitelist: taglist,\n        delimiters: ','\n      });\n    });\n  }\n\n  // Tagify initialization for Webhook resend form\n  var $orderItemIdInputs = $('.js-order-item-ids');\n  if ($orderItemIdInputs.length > 0) {\n    $orderItemIdInputs.each(function(index, el){\n      new Tagify(el, {\n        placeholder: 'Order item IDs ...',\n        pattern: /^[0-9]*$/,\n        delimiters: ','\n      });\n    });\n  };\n\n  // Featherlight initialization\n  $('.js-product-gallery .swiper-slide a').featherlightGallery({\n\t\tpreviousIcon: '<',\n\t\tnextIcon: '>',\n\t\tgalleryFadeIn: 300,\n\t\topenSpeed: 300\n\t});\n\n  // Bootstrap switch button initialization\n  $('input[data-bs-toggle=\"switchbutton\"]').each(function(index, el){\n    el.switchButton();\n  });\n\n  // currency input formatter\n  $('.price-in-dollars').on('input', function() {\n    let value = $(this).val();\n    value = value.replace(/[^0-9.]/g, '');\n    if (value.indexOf('.') !== -1) {\n      value = value.split('.').slice(0, 2).join('.');\n      value = value.replace(/(\\..*)\\./g, '$1');\n    }\n    $(this).val(value);\n  });\n\n  // disable turbolinks on anchor tags in the Cookiebot Dialog Box\n  const observer = new MutationObserver(function(mutations) {\n    mutations.forEach(function(mutation) {\n      mutation.addedNodes.forEach(function(node) {\n        if ($(node).is('#CybotCookiebotDialog')) {\n          $('#CybotCookiebotDialogDetailBodyContentCookieContainerTypes').attr('data-turbolinks', 'false');\n        };\n      });\n    });\n  });\n\n  const targetNode = document.body;\n  const config = { childList: true, subtree: true };\n\n  observer.observe(targetNode, config);\n\n});\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = global.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n  var INDICES_SUPPORT = true;\n  try {\n    RegExp('.', 'd');\n  } catch (error) {\n    INDICES_SUPPORT = false;\n  }\n\n  var O = {};\n  // modern V8 bug\n  var calls = '';\n  var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n  var addGetter = function (key, chr) {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty(O, key, { get: function () {\n      calls += chr;\n      return true;\n    } });\n  };\n\n  var pairs = {\n    dotAll: 's',\n    global: 'g',\n    ignoreCase: 'i',\n    multiline: 'm',\n    sticky: 'y'\n  };\n\n  if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n  for (var key in pairs) addGetter(key, pairs[key]);\n\n  // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n  var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n  return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n  configurable: true,\n  get: regExpFlags\n});\n","var 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","var 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","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","var 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","var 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 $TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.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","var 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","var 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 $TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = false;\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.hasIndices) result += 'd';\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.unicodeSets) result += 'v';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toIndexedObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () {\n  // eslint-disable-next-line es/no-typed-arrays -- required for testing\n  var array = new Uint8ClampedArray(2);\n  call($set, array, { length: 1, 0: 3 }, 1);\n  return array[1] !== 3;\n});\n\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\n  var array = new Int8Array(2);\n  array.set(1);\n  array.set('2', 1);\n  return array[0] !== 0 || array[1] !== 2;\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 src = toIndexedObject(arrayLike);\n  if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\n  var length = this.length;\n  var len = lengthOfArrayLike(src);\n  var index = 0;\n  if (len + offset > length) throw RangeError('Wrong length');\n  while (index < len) this[offset + index] = src[index++];\n}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\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 TypeError = global.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';\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_REQUIRED = false;\nvar NAME, Constructor, Prototype;\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    || hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar getTypedArrayConstructor = function (it) {\n  var proto = getPrototypeOf(it);\n  if (!isObject(proto)) return;\n  var state = getInternalState(proto);\n  return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\n};\n\nvar isTypedArray = function (it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return hasOwn(TypedArrayConstructorsList, klass)\n    || hasOwn(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 (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n  throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n      delete TypedArrayConstructor.prototype[KEY];\n    } catch (error) {\n      // old WebKit bug - some methods are non-configurable\n      try {\n        TypedArrayConstructor.prototype[KEY] = property;\n      } catch (error2) { /* empty */ }\n    }\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\n      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\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 && hasOwn(TypedArrayConstructor, KEY)) try {\n        delete TypedArrayConstructor[KEY];\n      } catch (error) { /* empty */ }\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[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      defineBuiltIn(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n  Constructor = global[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n  else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n  Constructor = global[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || 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 && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQUIRED = true;\n  defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {\n    configurable: true,\n    get: function () {\n      return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n    }\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_REQUIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  getTypedArrayConstructor: getTypedArrayConstructor,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n","// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","var 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","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var 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","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    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    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","var 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","var isCallable = require('../internals/is-callable');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (typeof argument == 'object' || isCallable(argument)) return argument;\n  throw $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","var 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  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var 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","var toPositiveInteger = require('../internals/to-positive-integer');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it, BYTES) {\n  var offset = toPositiveInteger(it);\n  if (offset % BYTES) throw $RangeError('Wrong offset');\n  return offset;\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n  var result = toIntegerOrInfinity(it);\n  if (result < 0) throw $RangeError(\"The argument can't be less than 0\");\n  return result;\n};\n","// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/web.clear-immediate');\nrequire('../modules/web.set-immediate');\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar clearImmediate = require('../internals/task').clear;\n\n// `clearImmediate` method\n// http://w3c.github.io/setImmediate/#si-clearImmediate\n$({ global: true, bind: true, enumerable: true, forced: global.clearImmediate !== clearImmediate }, {\n  clearImmediate: clearImmediate\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","var 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","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\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 (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n      defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n    }\n  }\n};\n","var 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","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","var 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","var 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    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","var 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","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var 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","var 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","var 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","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line redos/no-vulnerable -- safe\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\n\nmodule.exports = typeof process != 'undefined' && classof(process) == 'process';\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar setTask = require('../internals/task').set;\nvar schedulersFix = require('../internals/schedulers-fix');\n\n// https://github.com/oven-sh/bun/issues/1633\nvar setImmediate = global.setImmediate ? schedulersFix(setTask, false) : setTask;\n\n// `setImmediate` method\n// http://w3c.github.io/setImmediate/#si-setImmediate\n$({ global: true, bind: true, enumerable: true, forced: global.setImmediate !== setImmediate }, {\n  setImmediate: setImmediate\n});\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar isCallable = require('../internals/is-callable');\nvar ENGINE_IS_BUN = require('../internals/engine-is-bun');\nvar USER_AGENT = require('../internals/engine-user-agent');\nvar arraySlice = require('../internals/array-slice');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar Function = global.Function;\n// dirty IE9- and Bun 0.3.0- checks\nvar WRAP = /MSIE .\\./.test(USER_AGENT) || ENGINE_IS_BUN && (function () {\n  var version = global.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","/* global Bun -- Deno case */\nmodule.exports = typeof Bun == 'function' && Bun && typeof Bun.version == 'string';\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n  defineProperty(\n    GeneratorFunctionPrototype,\n    \"constructor\",\n    { value: GeneratorFunction, configurable: true }\n  );\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    defineProperty(this, \"_invoke\", { value: enqueue });\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  });\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var methodName = context.method;\n    var method = delegate.iterator[methodName];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method, or a missing .next mehtod, always terminate the\n      // yield* loop.\n      context.delegate = null;\n\n      // Note: [\"return\"] must be used for ES3 parsing compatibility.\n      if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n        // If the delegate iterator has a return method, give it a\n        // chance to clean up.\n        context.method = \"return\";\n        context.arg = undefined;\n        maybeInvokeDelegate(delegate, context);\n\n        if (context.method === \"throw\") {\n          // If maybeInvokeDelegate(context) changed context.method from\n          // \"return\" to \"throw\", let that override the TypeError below.\n          return ContinueSentinel;\n        }\n      }\n      if (methodName !== \"return\") {\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a '\" + methodName + \"' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  define(Gp, iteratorSymbol, function() {\n    return this;\n  });\n\n  define(Gp, \"toString\", function() {\n    return \"[object Generator]\";\n  });\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(val) {\n    var object = Object(val);\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, in modern engines\n  // we can explicitly access globalThis. In older engines we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n","/*\nTurbolinks 5.2.0\nCopyright © 2018 Basecamp, LLC\n */\n(function () {\n  var t = this;\n  (function () {\n    (function () {\n      this.Turbolinks = {\n        supported: function () {\n          return null != window.history.pushState && null != window.requestAnimationFrame && null != window.addEventListener;\n        }(),\n        visit: function (t, r) {\n          return e.controller.visit(t, r);\n        },\n        clearCache: function () {\n          return e.controller.clearCache();\n        },\n        setProgressBarDelay: function (t) {\n          return e.controller.setProgressBarDelay(t);\n        }\n      };\n    }).call(this);\n  }).call(t);\n  var e = t.Turbolinks;\n  (function () {\n    (function () {\n      var t,\n        r,\n        n,\n        o = [].slice;\n      e.copyObject = function (t) {\n        var e, r, n;\n        r = {};\n        for (e in t) n = t[e], r[e] = n;\n        return r;\n      }, e.closest = function (e, r) {\n        return t.call(e, r);\n      }, t = function () {\n        var t, e;\n        return t = document.documentElement, null != (e = t.closest) ? e : function (t) {\n          var e;\n          for (e = this; e;) {\n            if (e.nodeType === Node.ELEMENT_NODE && r.call(e, t)) return e;\n            e = e.parentNode;\n          }\n        };\n      }(), e.defer = function (t) {\n        return setTimeout(t, 1);\n      }, e.throttle = function (t) {\n        var e;\n        return e = null, function () {\n          var r;\n          return r = 1 <= arguments.length ? o.call(arguments, 0) : [], null != e ? e : e = requestAnimationFrame(function (n) {\n            return function () {\n              return e = null, t.apply(n, r);\n            };\n          }(this));\n        };\n      }, e.dispatch = function (t, e) {\n        var r, o, i, s, a, u;\n        return a = null != e ? e : {}, u = a.target, r = a.cancelable, o = a.data, i = document.createEvent(\"Events\"), i.initEvent(t, !0, r === !0), i.data = null != o ? o : {}, i.cancelable && !n && (s = i.preventDefault, i.preventDefault = function () {\n          return this.defaultPrevented || Object.defineProperty(this, \"defaultPrevented\", {\n            get: function () {\n              return !0;\n            }\n          }), s.call(this);\n        }), (null != u ? u : document).dispatchEvent(i), i;\n      }, n = function () {\n        var t;\n        return t = document.createEvent(\"Events\"), t.initEvent(\"test\", !0, !0), t.preventDefault(), t.defaultPrevented;\n      }(), e.match = function (t, e) {\n        return r.call(t, e);\n      }, r = function () {\n        var t, e, r, n;\n        return t = document.documentElement, null != (e = null != (r = null != (n = t.matchesSelector) ? n : t.webkitMatchesSelector) ? r : t.msMatchesSelector) ? e : t.mozMatchesSelector;\n      }(), e.uuid = function () {\n        var t, e, r;\n        for (r = \"\", t = e = 1; 36 >= e; t = ++e) r += 9 === t || 14 === t || 19 === t || 24 === t ? \"-\" : 15 === t ? \"4\" : 20 === t ? (Math.floor(4 * Math.random()) + 8).toString(16) : Math.floor(15 * Math.random()).toString(16);\n        return r;\n      };\n    }).call(this), function () {\n      e.Location = function () {\n        function t(t) {\n          var e, r;\n          null == t && (t = \"\"), r = document.createElement(\"a\"), r.href = t.toString(), this.absoluteURL = r.href, e = r.hash.length, 2 > e ? this.requestURL = this.absoluteURL : (this.requestURL = this.absoluteURL.slice(0, -e), this.anchor = r.hash.slice(1));\n        }\n        var e, r, n, o;\n        return t.wrap = function (t) {\n          return t instanceof this ? t : new this(t);\n        }, t.prototype.getOrigin = function () {\n          return this.absoluteURL.split(\"/\", 3).join(\"/\");\n        }, t.prototype.getPath = function () {\n          var t, e;\n          return null != (t = null != (e = this.requestURL.match(/\\/\\/[^\\/]*(\\/[^?;]*)/)) ? e[1] : void 0) ? t : \"/\";\n        }, t.prototype.getPathComponents = function () {\n          return this.getPath().split(\"/\").slice(1);\n        }, t.prototype.getLastPathComponent = function () {\n          return this.getPathComponents().slice(-1)[0];\n        }, t.prototype.getExtension = function () {\n          var t, e;\n          return null != (t = null != (e = this.getLastPathComponent().match(/\\.[^.]*$/)) ? e[0] : void 0) ? t : \"\";\n        }, t.prototype.isHTML = function () {\n          return this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/);\n        }, t.prototype.isPrefixedBy = function (t) {\n          var e;\n          return e = r(t), this.isEqualTo(t) || o(this.absoluteURL, e);\n        }, t.prototype.isEqualTo = function (t) {\n          return this.absoluteURL === (null != t ? t.absoluteURL : void 0);\n        }, t.prototype.toCacheKey = function () {\n          return this.requestURL;\n        }, t.prototype.toJSON = function () {\n          return this.absoluteURL;\n        }, t.prototype.toString = function () {\n          return this.absoluteURL;\n        }, t.prototype.valueOf = function () {\n          return this.absoluteURL;\n        }, r = function (t) {\n          return e(t.getOrigin() + t.getPath());\n        }, e = function (t) {\n          return n(t, \"/\") ? t : t + \"/\";\n        }, o = function (t, e) {\n          return t.slice(0, e.length) === e;\n        }, n = function (t, e) {\n          return t.slice(-e.length) === e;\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      };\n      e.HttpRequest = function () {\n        function r(r, n, o) {\n          this.delegate = r, this.requestCanceled = t(this.requestCanceled, this), this.requestTimedOut = t(this.requestTimedOut, this), this.requestFailed = t(this.requestFailed, this), this.requestLoaded = t(this.requestLoaded, this), this.requestProgressed = t(this.requestProgressed, this), this.url = e.Location.wrap(n).requestURL, this.referrer = e.Location.wrap(o).absoluteURL, this.createXHR();\n        }\n        return r.NETWORK_FAILURE = 0, r.TIMEOUT_FAILURE = -1, r.timeout = 60, r.prototype.send = function () {\n          var t;\n          return this.xhr && !this.sent ? (this.notifyApplicationBeforeRequestStart(), this.setProgress(0), this.xhr.send(), this.sent = !0, \"function\" == typeof (t = this.delegate).requestStarted ? t.requestStarted() : void 0) : void 0;\n        }, r.prototype.cancel = function () {\n          return this.xhr && this.sent ? this.xhr.abort() : void 0;\n        }, r.prototype.requestProgressed = function (t) {\n          return t.lengthComputable ? this.setProgress(t.loaded / t.total) : void 0;\n        }, r.prototype.requestLoaded = function () {\n          return this.endRequest(function (t) {\n            return function () {\n              var e;\n              return 200 <= (e = t.xhr.status) && 300 > e ? t.delegate.requestCompletedWithResponse(t.xhr.responseText, t.xhr.getResponseHeader(\"Turbolinks-Location\")) : (t.failed = !0, t.delegate.requestFailedWithStatusCode(t.xhr.status, t.xhr.responseText));\n            };\n          }(this));\n        }, r.prototype.requestFailed = function () {\n          return this.endRequest(function (t) {\n            return function () {\n              return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.NETWORK_FAILURE);\n            };\n          }(this));\n        }, r.prototype.requestTimedOut = function () {\n          return this.endRequest(function (t) {\n            return function () {\n              return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.TIMEOUT_FAILURE);\n            };\n          }(this));\n        }, r.prototype.requestCanceled = function () {\n          return this.endRequest();\n        }, r.prototype.notifyApplicationBeforeRequestStart = function () {\n          return e.dispatch(\"turbolinks:request-start\", {\n            data: {\n              url: this.url,\n              xhr: this.xhr\n            }\n          });\n        }, r.prototype.notifyApplicationAfterRequestEnd = function () {\n          return e.dispatch(\"turbolinks:request-end\", {\n            data: {\n              url: this.url,\n              xhr: this.xhr\n            }\n          });\n        }, r.prototype.createXHR = function () {\n          return this.xhr = new XMLHttpRequest(), this.xhr.open(\"GET\", this.url, !0), this.xhr.timeout = 1e3 * this.constructor.timeout, this.xhr.setRequestHeader(\"Accept\", \"text/html, application/xhtml+xml\"), this.xhr.setRequestHeader(\"Turbolinks-Referrer\", this.referrer), this.xhr.onprogress = this.requestProgressed, this.xhr.onload = this.requestLoaded, this.xhr.onerror = this.requestFailed, this.xhr.ontimeout = this.requestTimedOut, this.xhr.onabort = this.requestCanceled;\n        }, r.prototype.endRequest = function (t) {\n          return this.xhr ? (this.notifyApplicationAfterRequestEnd(), null != t && t.call(this), this.destroy()) : void 0;\n        }, r.prototype.setProgress = function (t) {\n          var e;\n          return this.progress = t, \"function\" == typeof (e = this.delegate).requestProgressed ? e.requestProgressed(this.progress) : void 0;\n        }, r.prototype.destroy = function () {\n          var t;\n          return this.setProgress(1), \"function\" == typeof (t = this.delegate).requestFinished && t.requestFinished(), this.delegate = null, this.xhr = null;\n        }, r;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      };\n      e.ProgressBar = function () {\n        function e() {\n          this.trickle = t(this.trickle, this), this.stylesheetElement = this.createStylesheetElement(), this.progressElement = this.createProgressElement();\n        }\n        var r;\n        return r = 300, e.defaultCSS = \".turbolinks-progress-bar {\\n  position: fixed;\\n  display: block;\\n  top: 0;\\n  left: 0;\\n  height: 3px;\\n  background: #0076ff;\\n  z-index: 9999;\\n  transition: width \" + r + \"ms ease-out, opacity \" + r / 2 + \"ms \" + r / 2 + \"ms ease-in;\\n  transform: translate3d(0, 0, 0);\\n}\", e.prototype.show = function () {\n          return this.visible ? void 0 : (this.visible = !0, this.installStylesheetElement(), this.installProgressElement(), this.startTrickling());\n        }, e.prototype.hide = function () {\n          return this.visible && !this.hiding ? (this.hiding = !0, this.fadeProgressElement(function (t) {\n            return function () {\n              return t.uninstallProgressElement(), t.stopTrickling(), t.visible = !1, t.hiding = !1;\n            };\n          }(this))) : void 0;\n        }, e.prototype.setValue = function (t) {\n          return this.value = t, this.refresh();\n        }, e.prototype.installStylesheetElement = function () {\n          return document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n        }, e.prototype.installProgressElement = function () {\n          return this.progressElement.style.width = 0, this.progressElement.style.opacity = 1, document.documentElement.insertBefore(this.progressElement, document.body), this.refresh();\n        }, e.prototype.fadeProgressElement = function (t) {\n          return this.progressElement.style.opacity = 0, setTimeout(t, 1.5 * r);\n        }, e.prototype.uninstallProgressElement = function () {\n          return this.progressElement.parentNode ? document.documentElement.removeChild(this.progressElement) : void 0;\n        }, e.prototype.startTrickling = function () {\n          return null != this.trickleInterval ? this.trickleInterval : this.trickleInterval = setInterval(this.trickle, r);\n        }, e.prototype.stopTrickling = function () {\n          return clearInterval(this.trickleInterval), this.trickleInterval = null;\n        }, e.prototype.trickle = function () {\n          return this.setValue(this.value + Math.random() / 100);\n        }, e.prototype.refresh = function () {\n          return requestAnimationFrame(function (t) {\n            return function () {\n              return t.progressElement.style.width = 10 + 90 * t.value + \"%\";\n            };\n          }(this));\n        }, e.prototype.createStylesheetElement = function () {\n          var t;\n          return t = document.createElement(\"style\"), t.type = \"text/css\", t.textContent = this.constructor.defaultCSS, t;\n        }, e.prototype.createProgressElement = function () {\n          var t;\n          return t = document.createElement(\"div\"), t.className = \"turbolinks-progress-bar\", t;\n        }, e;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      };\n      e.BrowserAdapter = function () {\n        function r(r) {\n          this.controller = r, this.showProgressBar = t(this.showProgressBar, this), this.progressBar = new e.ProgressBar();\n        }\n        var n, o, i;\n        return i = e.HttpRequest, n = i.NETWORK_FAILURE, o = i.TIMEOUT_FAILURE, r.prototype.visitProposedToLocationWithAction = function (t, e) {\n          return this.controller.startVisitToLocationWithAction(t, e);\n        }, r.prototype.visitStarted = function (t) {\n          return t.issueRequest(), t.changeHistory(), t.loadCachedSnapshot();\n        }, r.prototype.visitRequestStarted = function (t) {\n          return this.progressBar.setValue(0), t.hasCachedSnapshot() || \"restore\" !== t.action ? this.showProgressBarAfterDelay() : this.showProgressBar();\n        }, r.prototype.visitRequestProgressed = function (t) {\n          return this.progressBar.setValue(t.progress);\n        }, r.prototype.visitRequestCompleted = function (t) {\n          return t.loadResponse();\n        }, r.prototype.visitRequestFailedWithStatusCode = function (t, e) {\n          switch (e) {\n            case n:\n            case o:\n              return this.reload();\n            default:\n              return t.loadResponse();\n          }\n        }, r.prototype.visitRequestFinished = function (t) {\n          return this.hideProgressBar();\n        }, r.prototype.visitCompleted = function (t) {\n          return t.followRedirect();\n        }, r.prototype.pageInvalidated = function () {\n          return this.reload();\n        }, r.prototype.showProgressBarAfterDelay = function () {\n          return this.progressBarTimeout = setTimeout(this.showProgressBar, this.controller.progressBarDelay);\n        }, r.prototype.showProgressBar = function () {\n          return this.progressBar.show();\n        }, r.prototype.hideProgressBar = function () {\n          return this.progressBar.hide(), clearTimeout(this.progressBarTimeout);\n        }, r.prototype.reload = function () {\n          return window.location.reload();\n        }, r;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      };\n      e.History = function () {\n        function r(e) {\n          this.delegate = e, this.onPageLoad = t(this.onPageLoad, this), this.onPopState = t(this.onPopState, this);\n        }\n        return r.prototype.start = function () {\n          return this.started ? void 0 : (addEventListener(\"popstate\", this.onPopState, !1), addEventListener(\"load\", this.onPageLoad, !1), this.started = !0);\n        }, r.prototype.stop = function () {\n          return this.started ? (removeEventListener(\"popstate\", this.onPopState, !1), removeEventListener(\"load\", this.onPageLoad, !1), this.started = !1) : void 0;\n        }, r.prototype.push = function (t, r) {\n          return t = e.Location.wrap(t), this.update(\"push\", t, r);\n        }, r.prototype.replace = function (t, r) {\n          return t = e.Location.wrap(t), this.update(\"replace\", t, r);\n        }, r.prototype.onPopState = function (t) {\n          var r, n, o, i;\n          return this.shouldHandlePopState() && (i = null != (n = t.state) ? n.turbolinks : void 0) ? (r = e.Location.wrap(window.location), o = i.restorationIdentifier, this.delegate.historyPoppedToLocationWithRestorationIdentifier(r, o)) : void 0;\n        }, r.prototype.onPageLoad = function (t) {\n          return e.defer(function (t) {\n            return function () {\n              return t.pageLoaded = !0;\n            };\n          }(this));\n        }, r.prototype.shouldHandlePopState = function () {\n          return this.pageIsLoaded();\n        }, r.prototype.pageIsLoaded = function () {\n          return this.pageLoaded || \"complete\" === document.readyState;\n        }, r.prototype.update = function (t, e, r) {\n          var n;\n          return n = {\n            turbolinks: {\n              restorationIdentifier: r\n            }\n          }, history[t + \"State\"](n, null, e);\n        }, r;\n      }();\n    }.call(this), function () {\n      e.HeadDetails = function () {\n        function t(t) {\n          var e, r, n, s, a, u;\n          for (this.elements = {}, n = 0, a = t.length; a > n; n++) u = t[n], u.nodeType === Node.ELEMENT_NODE && (s = u.outerHTML, r = null != (e = this.elements)[s] ? e[s] : e[s] = {\n            type: i(u),\n            tracked: o(u),\n            elements: []\n          }, r.elements.push(u));\n        }\n        var e, r, n, o, i;\n        return t.fromHeadElement = function (t) {\n          var e;\n          return new this(null != (e = null != t ? t.childNodes : void 0) ? e : []);\n        }, t.prototype.hasElementWithKey = function (t) {\n          return t in this.elements;\n        }, t.prototype.getTrackedElementSignature = function () {\n          var t, e;\n          return function () {\n            var r, n;\n            r = this.elements, n = [];\n            for (t in r) e = r[t].tracked, e && n.push(t);\n            return n;\n          }.call(this).join(\"\");\n        }, t.prototype.getScriptElementsNotInDetails = function (t) {\n          return this.getElementsMatchingTypeNotInDetails(\"script\", t);\n        }, t.prototype.getStylesheetElementsNotInDetails = function (t) {\n          return this.getElementsMatchingTypeNotInDetails(\"stylesheet\", t);\n        }, t.prototype.getElementsMatchingTypeNotInDetails = function (t, e) {\n          var r, n, o, i, s, a;\n          o = this.elements, s = [];\n          for (n in o) i = o[n], a = i.type, r = i.elements, a !== t || e.hasElementWithKey(n) || s.push(r[0]);\n          return s;\n        }, t.prototype.getProvisionalElements = function () {\n          var t, e, r, n, o, i, s;\n          r = [], n = this.elements;\n          for (e in n) o = n[e], s = o.type, i = o.tracked, t = o.elements, null != s || i ? t.length > 1 && r.push.apply(r, t.slice(1)) : r.push.apply(r, t);\n          return r;\n        }, t.prototype.getMetaValue = function (t) {\n          var e;\n          return null != (e = this.findMetaElementByName(t)) ? e.getAttribute(\"content\") : void 0;\n        }, t.prototype.findMetaElementByName = function (t) {\n          var r, n, o, i;\n          r = void 0, i = this.elements;\n          for (o in i) n = i[o].elements, e(n[0], t) && (r = n[0]);\n          return r;\n        }, i = function (t) {\n          return r(t) ? \"script\" : n(t) ? \"stylesheet\" : void 0;\n        }, o = function (t) {\n          return \"reload\" === t.getAttribute(\"data-turbolinks-track\");\n        }, r = function (t) {\n          var e;\n          return e = t.tagName.toLowerCase(), \"script\" === e;\n        }, n = function (t) {\n          var e;\n          return e = t.tagName.toLowerCase(), \"style\" === e || \"link\" === e && \"stylesheet\" === t.getAttribute(\"rel\");\n        }, e = function (t, e) {\n          var r;\n          return r = t.tagName.toLowerCase(), \"meta\" === r && t.getAttribute(\"name\") === e;\n        }, t;\n      }();\n    }.call(this), function () {\n      e.Snapshot = function () {\n        function t(t, e) {\n          this.headDetails = t, this.bodyElement = e;\n        }\n        return t.wrap = function (t) {\n          return t instanceof this ? t : \"string\" == typeof t ? this.fromHTMLString(t) : this.fromHTMLElement(t);\n        }, t.fromHTMLString = function (t) {\n          var e;\n          return e = document.createElement(\"html\"), e.innerHTML = t, this.fromHTMLElement(e);\n        }, t.fromHTMLElement = function (t) {\n          var r, n, o, i;\n          return o = t.querySelector(\"head\"), r = null != (i = t.querySelector(\"body\")) ? i : document.createElement(\"body\"), n = e.HeadDetails.fromHeadElement(o), new this(n, r);\n        }, t.prototype.clone = function () {\n          return new this.constructor(this.headDetails, this.bodyElement.cloneNode(!0));\n        }, t.prototype.getRootLocation = function () {\n          var t, r;\n          return r = null != (t = this.getSetting(\"root\")) ? t : \"/\", new e.Location(r);\n        }, t.prototype.getCacheControlValue = function () {\n          return this.getSetting(\"cache-control\");\n        }, t.prototype.getElementForAnchor = function (t) {\n          try {\n            return this.bodyElement.querySelector(\"[id='\" + t + \"'], a[name='\" + t + \"']\");\n          } catch (e) {}\n        }, t.prototype.getPermanentElements = function () {\n          return this.bodyElement.querySelectorAll(\"[id][data-turbolinks-permanent]\");\n        }, t.prototype.getPermanentElementById = function (t) {\n          return this.bodyElement.querySelector(\"#\" + t + \"[data-turbolinks-permanent]\");\n        }, t.prototype.getPermanentElementsPresentInSnapshot = function (t) {\n          var e, r, n, o, i;\n          for (o = this.getPermanentElements(), i = [], r = 0, n = o.length; n > r; r++) e = o[r], t.getPermanentElementById(e.id) && i.push(e);\n          return i;\n        }, t.prototype.findFirstAutofocusableElement = function () {\n          return this.bodyElement.querySelector(\"[autofocus]\");\n        }, t.prototype.hasAnchor = function (t) {\n          return null != this.getElementForAnchor(t);\n        }, t.prototype.isPreviewable = function () {\n          return \"no-preview\" !== this.getCacheControlValue();\n        }, t.prototype.isCacheable = function () {\n          return \"no-cache\" !== this.getCacheControlValue();\n        }, t.prototype.isVisitable = function () {\n          return \"reload\" !== this.getSetting(\"visit-control\");\n        }, t.prototype.getSetting = function (t) {\n          return this.headDetails.getMetaValue(\"turbolinks-\" + t);\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = [].slice;\n      e.Renderer = function () {\n        function e() {}\n        var r;\n        return e.render = function () {\n          var e, r, n, o;\n          return n = arguments[0], r = arguments[1], e = 3 <= arguments.length ? t.call(arguments, 2) : [], o = function (t, e, r) {\n            r.prototype = t.prototype;\n            var n = new r(),\n              o = t.apply(n, e);\n            return Object(o) === o ? o : n;\n          }(this, e, function () {}), o.delegate = n, o.render(r), o;\n        }, e.prototype.renderView = function (t) {\n          return this.delegate.viewWillRender(this.newBody), t(), this.delegate.viewRendered(this.newBody);\n        }, e.prototype.invalidateView = function () {\n          return this.delegate.viewInvalidated();\n        }, e.prototype.createScriptElement = function (t) {\n          var e;\n          return \"false\" === t.getAttribute(\"data-turbolinks-eval\") ? t : (e = document.createElement(\"script\"), e.textContent = t.textContent, e.async = !1, r(e, t), e);\n        }, r = function (t, e) {\n          var r, n, o, i, s, a, u;\n          for (i = e.attributes, a = [], r = 0, n = i.length; n > r; r++) s = i[r], o = s.name, u = s.value, a.push(t.setAttribute(o, u));\n          return a;\n        }, e;\n      }();\n    }.call(this), function () {\n      var t,\n        r,\n        n = function (t, e) {\n          function r() {\n            this.constructor = t;\n          }\n          for (var n in e) o.call(e, n) && (t[n] = e[n]);\n          return r.prototype = e.prototype, t.prototype = new r(), t.__super__ = e.prototype, t;\n        },\n        o = {}.hasOwnProperty;\n      e.SnapshotRenderer = function (e) {\n        function o(t, e, r) {\n          this.currentSnapshot = t, this.newSnapshot = e, this.isPreview = r, this.currentHeadDetails = this.currentSnapshot.headDetails, this.newHeadDetails = this.newSnapshot.headDetails, this.currentBody = this.currentSnapshot.bodyElement, this.newBody = this.newSnapshot.bodyElement;\n        }\n        return n(o, e), o.prototype.render = function (t) {\n          return this.shouldRender() ? (this.mergeHead(), this.renderView(function (e) {\n            return function () {\n              return e.replaceBody(), e.isPreview || e.focusFirstAutofocusableElement(), t();\n            };\n          }(this))) : this.invalidateView();\n        }, o.prototype.mergeHead = function () {\n          return this.copyNewHeadStylesheetElements(), this.copyNewHeadScriptElements(), this.removeCurrentHeadProvisionalElements(), this.copyNewHeadProvisionalElements();\n        }, o.prototype.replaceBody = function () {\n          var t;\n          return t = this.relocateCurrentBodyPermanentElements(), this.activateNewBodyScriptElements(), this.assignNewBody(), this.replacePlaceholderElementsWithClonedPermanentElements(t);\n        }, o.prototype.shouldRender = function () {\n          return this.newSnapshot.isVisitable() && this.trackedElementsAreIdentical();\n        }, o.prototype.trackedElementsAreIdentical = function () {\n          return this.currentHeadDetails.getTrackedElementSignature() === this.newHeadDetails.getTrackedElementSignature();\n        }, o.prototype.copyNewHeadStylesheetElements = function () {\n          var t, e, r, n, o;\n          for (n = this.getNewHeadStylesheetElements(), o = [], e = 0, r = n.length; r > e; e++) t = n[e], o.push(document.head.appendChild(t));\n          return o;\n        }, o.prototype.copyNewHeadScriptElements = function () {\n          var t, e, r, n, o;\n          for (n = this.getNewHeadScriptElements(), o = [], e = 0, r = n.length; r > e; e++) t = n[e], o.push(document.head.appendChild(this.createScriptElement(t)));\n          return o;\n        }, o.prototype.removeCurrentHeadProvisionalElements = function () {\n          var t, e, r, n, o;\n          for (n = this.getCurrentHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) t = n[e], o.push(document.head.removeChild(t));\n          return o;\n        }, o.prototype.copyNewHeadProvisionalElements = function () {\n          var t, e, r, n, o;\n          for (n = this.getNewHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) t = n[e], o.push(document.head.appendChild(t));\n          return o;\n        }, o.prototype.relocateCurrentBodyPermanentElements = function () {\n          var e, n, o, i, s, a, u;\n          for (a = this.getCurrentBodyPermanentElements(), u = [], e = 0, n = a.length; n > e; e++) i = a[e], s = t(i), o = this.newSnapshot.getPermanentElementById(i.id), r(i, s.element), r(o, i), u.push(s);\n          return u;\n        }, o.prototype.replacePlaceholderElementsWithClonedPermanentElements = function (t) {\n          var e, n, o, i, s, a, u;\n          for (u = [], o = 0, i = t.length; i > o; o++) a = t[o], n = a.element, s = a.permanentElement, e = s.cloneNode(!0), u.push(r(n, e));\n          return u;\n        }, o.prototype.activateNewBodyScriptElements = function () {\n          var t, e, n, o, i, s;\n          for (i = this.getNewBodyScriptElements(), s = [], e = 0, o = i.length; o > e; e++) n = i[e], t = this.createScriptElement(n), s.push(r(n, t));\n          return s;\n        }, o.prototype.assignNewBody = function () {\n          return document.body = this.newBody;\n        }, o.prototype.focusFirstAutofocusableElement = function () {\n          var t;\n          return null != (t = this.newSnapshot.findFirstAutofocusableElement()) ? t.focus() : void 0;\n        }, o.prototype.getNewHeadStylesheetElements = function () {\n          return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails);\n        }, o.prototype.getNewHeadScriptElements = function () {\n          return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails);\n        }, o.prototype.getCurrentHeadProvisionalElements = function () {\n          return this.currentHeadDetails.getProvisionalElements();\n        }, o.prototype.getNewHeadProvisionalElements = function () {\n          return this.newHeadDetails.getProvisionalElements();\n        }, o.prototype.getCurrentBodyPermanentElements = function () {\n          return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot);\n        }, o.prototype.getNewBodyScriptElements = function () {\n          return this.newBody.querySelectorAll(\"script\");\n        }, o;\n      }(e.Renderer), t = function (t) {\n        var e;\n        return e = document.createElement(\"meta\"), e.setAttribute(\"name\", \"turbolinks-permanent-placeholder\"), e.setAttribute(\"content\", t.id), {\n          element: e,\n          permanentElement: t\n        };\n      }, r = function (t, e) {\n        var r;\n        return (r = t.parentNode) ? r.replaceChild(e, t) : void 0;\n      };\n    }.call(this), function () {\n      var t = function (t, e) {\n          function n() {\n            this.constructor = t;\n          }\n          for (var o in e) r.call(e, o) && (t[o] = e[o]);\n          return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n        },\n        r = {}.hasOwnProperty;\n      e.ErrorRenderer = function (e) {\n        function r(t) {\n          var e;\n          e = document.createElement(\"html\"), e.innerHTML = t, this.newHead = e.querySelector(\"head\"), this.newBody = e.querySelector(\"body\");\n        }\n        return t(r, e), r.prototype.render = function (t) {\n          return this.renderView(function (e) {\n            return function () {\n              return e.replaceHeadAndBody(), e.activateBodyScriptElements(), t();\n            };\n          }(this));\n        }, r.prototype.replaceHeadAndBody = function () {\n          var t, e;\n          return e = document.head, t = document.body, e.parentNode.replaceChild(this.newHead, e), t.parentNode.replaceChild(this.newBody, t);\n        }, r.prototype.activateBodyScriptElements = function () {\n          var t, e, r, n, o, i;\n          for (n = this.getScriptElements(), i = [], e = 0, r = n.length; r > e; e++) o = n[e], t = this.createScriptElement(o), i.push(o.parentNode.replaceChild(t, o));\n          return i;\n        }, r.prototype.getScriptElements = function () {\n          return document.documentElement.querySelectorAll(\"script\");\n        }, r;\n      }(e.Renderer);\n    }.call(this), function () {\n      e.View = function () {\n        function t(t) {\n          this.delegate = t, this.htmlElement = document.documentElement;\n        }\n        return t.prototype.getRootLocation = function () {\n          return this.getSnapshot().getRootLocation();\n        }, t.prototype.getElementForAnchor = function (t) {\n          return this.getSnapshot().getElementForAnchor(t);\n        }, t.prototype.getSnapshot = function () {\n          return e.Snapshot.fromHTMLElement(this.htmlElement);\n        }, t.prototype.render = function (t, e) {\n          var r, n, o;\n          return o = t.snapshot, r = t.error, n = t.isPreview, this.markAsPreview(n), null != o ? this.renderSnapshot(o, n, e) : this.renderError(r, e);\n        }, t.prototype.markAsPreview = function (t) {\n          return t ? this.htmlElement.setAttribute(\"data-turbolinks-preview\", \"\") : this.htmlElement.removeAttribute(\"data-turbolinks-preview\");\n        }, t.prototype.renderSnapshot = function (t, r, n) {\n          return e.SnapshotRenderer.render(this.delegate, n, this.getSnapshot(), e.Snapshot.wrap(t), r);\n        }, t.prototype.renderError = function (t, r) {\n          return e.ErrorRenderer.render(this.delegate, r, t);\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      };\n      e.ScrollManager = function () {\n        function r(r) {\n          this.delegate = r, this.onScroll = t(this.onScroll, this), this.onScroll = e.throttle(this.onScroll);\n        }\n        return r.prototype.start = function () {\n          return this.started ? void 0 : (addEventListener(\"scroll\", this.onScroll, !1), this.onScroll(), this.started = !0);\n        }, r.prototype.stop = function () {\n          return this.started ? (removeEventListener(\"scroll\", this.onScroll, !1), this.started = !1) : void 0;\n        }, r.prototype.scrollToElement = function (t) {\n          return t.scrollIntoView();\n        }, r.prototype.scrollToPosition = function (t) {\n          var e, r;\n          return e = t.x, r = t.y, window.scrollTo(e, r);\n        }, r.prototype.onScroll = function (t) {\n          return this.updatePosition({\n            x: window.pageXOffset,\n            y: window.pageYOffset\n          });\n        }, r.prototype.updatePosition = function (t) {\n          var e;\n          return this.position = t, null != (e = this.delegate) ? e.scrollPositionChanged(this.position) : void 0;\n        }, r;\n      }();\n    }.call(this), function () {\n      e.SnapshotCache = function () {\n        function t(t) {\n          this.size = t, this.keys = [], this.snapshots = {};\n        }\n        var r;\n        return t.prototype.has = function (t) {\n          var e;\n          return e = r(t), e in this.snapshots;\n        }, t.prototype.get = function (t) {\n          var e;\n          if (this.has(t)) return e = this.read(t), this.touch(t), e;\n        }, t.prototype.put = function (t, e) {\n          return this.write(t, e), this.touch(t), e;\n        }, t.prototype.read = function (t) {\n          var e;\n          return e = r(t), this.snapshots[e];\n        }, t.prototype.write = function (t, e) {\n          var n;\n          return n = r(t), this.snapshots[n] = e;\n        }, t.prototype.touch = function (t) {\n          var e, n;\n          return n = r(t), e = this.keys.indexOf(n), e > -1 && this.keys.splice(e, 1), this.keys.unshift(n), this.trim();\n        }, t.prototype.trim = function () {\n          var t, e, r, n, o;\n          for (n = this.keys.splice(this.size), o = [], t = 0, r = n.length; r > t; t++) e = n[t], o.push(delete this.snapshots[e]);\n          return o;\n        }, r = function (t) {\n          return e.Location.wrap(t).toCacheKey();\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      };\n      e.Visit = function () {\n        function r(r, n, o) {\n          this.controller = r, this.action = o, this.performScroll = t(this.performScroll, this), this.identifier = e.uuid(), this.location = e.Location.wrap(n), this.adapter = this.controller.adapter, this.state = \"initialized\", this.timingMetrics = {};\n        }\n        var n;\n        return r.prototype.start = function () {\n          return \"initialized\" === this.state ? (this.recordTimingMetric(\"visitStart\"), this.state = \"started\", this.adapter.visitStarted(this)) : void 0;\n        }, r.prototype.cancel = function () {\n          var t;\n          return \"started\" === this.state ? (null != (t = this.request) && t.cancel(), this.cancelRender(), this.state = \"canceled\") : void 0;\n        }, r.prototype.complete = function () {\n          var t;\n          return \"started\" === this.state ? (this.recordTimingMetric(\"visitEnd\"), this.state = \"completed\", \"function\" == typeof (t = this.adapter).visitCompleted && t.visitCompleted(this), this.controller.visitCompleted(this)) : void 0;\n        }, r.prototype.fail = function () {\n          var t;\n          return \"started\" === this.state ? (this.state = \"failed\", \"function\" == typeof (t = this.adapter).visitFailed ? t.visitFailed(this) : void 0) : void 0;\n        }, r.prototype.changeHistory = function () {\n          var t, e;\n          return this.historyChanged ? void 0 : (t = this.location.isEqualTo(this.referrer) ? \"replace\" : this.action, e = n(t), this.controller[e](this.location, this.restorationIdentifier), this.historyChanged = !0);\n        }, r.prototype.issueRequest = function () {\n          return this.shouldIssueRequest() && null == this.request ? (this.progress = 0, this.request = new e.HttpRequest(this, this.location, this.referrer), this.request.send()) : void 0;\n        }, r.prototype.getCachedSnapshot = function () {\n          var t;\n          return !(t = this.controller.getCachedSnapshotForLocation(this.location)) || null != this.location.anchor && !t.hasAnchor(this.location.anchor) || \"restore\" !== this.action && !t.isPreviewable() ? void 0 : t;\n        }, r.prototype.hasCachedSnapshot = function () {\n          return null != this.getCachedSnapshot();\n        }, r.prototype.loadCachedSnapshot = function () {\n          var t, e;\n          return (e = this.getCachedSnapshot()) ? (t = this.shouldIssueRequest(), this.render(function () {\n            var r;\n            return this.cacheSnapshot(), this.controller.render({\n              snapshot: e,\n              isPreview: t\n            }, this.performScroll), \"function\" == typeof (r = this.adapter).visitRendered && r.visitRendered(this), t ? void 0 : this.complete();\n          })) : void 0;\n        }, r.prototype.loadResponse = function () {\n          return null != this.response ? this.render(function () {\n            var t, e;\n            return this.cacheSnapshot(), this.request.failed ? (this.controller.render({\n              error: this.response\n            }, this.performScroll), \"function\" == typeof (t = this.adapter).visitRendered && t.visitRendered(this), this.fail()) : (this.controller.render({\n              snapshot: this.response\n            }, this.performScroll), \"function\" == typeof (e = this.adapter).visitRendered && e.visitRendered(this), this.complete());\n          }) : void 0;\n        }, r.prototype.followRedirect = function () {\n          return this.redirectedToLocation && !this.followedRedirect ? (this.location = this.redirectedToLocation, this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation, this.restorationIdentifier), this.followedRedirect = !0) : void 0;\n        }, r.prototype.requestStarted = function () {\n          var t;\n          return this.recordTimingMetric(\"requestStart\"), \"function\" == typeof (t = this.adapter).visitRequestStarted ? t.visitRequestStarted(this) : void 0;\n        }, r.prototype.requestProgressed = function (t) {\n          var e;\n          return this.progress = t, \"function\" == typeof (e = this.adapter).visitRequestProgressed ? e.visitRequestProgressed(this) : void 0;\n        }, r.prototype.requestCompletedWithResponse = function (t, r) {\n          return this.response = t, null != r && (this.redirectedToLocation = e.Location.wrap(r)), this.adapter.visitRequestCompleted(this);\n        }, r.prototype.requestFailedWithStatusCode = function (t, e) {\n          return this.response = e, this.adapter.visitRequestFailedWithStatusCode(this, t);\n        }, r.prototype.requestFinished = function () {\n          var t;\n          return this.recordTimingMetric(\"requestEnd\"), \"function\" == typeof (t = this.adapter).visitRequestFinished ? t.visitRequestFinished(this) : void 0;\n        }, r.prototype.performScroll = function () {\n          return this.scrolled ? void 0 : (\"restore\" === this.action ? this.scrollToRestoredPosition() || this.scrollToTop() : this.scrollToAnchor() || this.scrollToTop(), this.scrolled = !0);\n        }, r.prototype.scrollToRestoredPosition = function () {\n          var t, e;\n          return t = null != (e = this.restorationData) ? e.scrollPosition : void 0, null != t ? (this.controller.scrollToPosition(t), !0) : void 0;\n        }, r.prototype.scrollToAnchor = function () {\n          return null != this.location.anchor ? (this.controller.scrollToAnchor(this.location.anchor), !0) : void 0;\n        }, r.prototype.scrollToTop = function () {\n          return this.controller.scrollToPosition({\n            x: 0,\n            y: 0\n          });\n        }, r.prototype.recordTimingMetric = function (t) {\n          var e;\n          return null != (e = this.timingMetrics)[t] ? e[t] : e[t] = new Date().getTime();\n        }, r.prototype.getTimingMetrics = function () {\n          return e.copyObject(this.timingMetrics);\n        }, n = function (t) {\n          switch (t) {\n            case \"replace\":\n              return \"replaceHistoryWithLocationAndRestorationIdentifier\";\n            case \"advance\":\n            case \"restore\":\n              return \"pushHistoryWithLocationAndRestorationIdentifier\";\n          }\n        }, r.prototype.shouldIssueRequest = function () {\n          return \"restore\" === this.action ? !this.hasCachedSnapshot() : !0;\n        }, r.prototype.cacheSnapshot = function () {\n          return this.snapshotCached ? void 0 : (this.controller.cacheSnapshot(), this.snapshotCached = !0);\n        }, r.prototype.render = function (t) {\n          return this.cancelRender(), this.frame = requestAnimationFrame(function (e) {\n            return function () {\n              return e.frame = null, t.call(e);\n            };\n          }(this));\n        }, r.prototype.cancelRender = function () {\n          return this.frame ? cancelAnimationFrame(this.frame) : void 0;\n        }, r;\n      }();\n    }.call(this), function () {\n      var t = function (t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      };\n      e.Controller = function () {\n        function r() {\n          this.clickBubbled = t(this.clickBubbled, this), this.clickCaptured = t(this.clickCaptured, this), this.pageLoaded = t(this.pageLoaded, this), this.history = new e.History(this), this.view = new e.View(this), this.scrollManager = new e.ScrollManager(this), this.restorationData = {}, this.clearCache(), this.setProgressBarDelay(500);\n        }\n        return r.prototype.start = function () {\n          return e.supported && !this.started ? (addEventListener(\"click\", this.clickCaptured, !0), addEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.start(), this.startHistory(), this.started = !0, this.enabled = !0) : void 0;\n        }, r.prototype.disable = function () {\n          return this.enabled = !1;\n        }, r.prototype.stop = function () {\n          return this.started ? (removeEventListener(\"click\", this.clickCaptured, !0), removeEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.stop(), this.stopHistory(), this.started = !1) : void 0;\n        }, r.prototype.clearCache = function () {\n          return this.cache = new e.SnapshotCache(10);\n        }, r.prototype.visit = function (t, r) {\n          var n, o;\n          return null == r && (r = {}), t = e.Location.wrap(t), this.applicationAllowsVisitingLocation(t) ? this.locationIsVisitable(t) ? (n = null != (o = r.action) ? o : \"advance\", this.adapter.visitProposedToLocationWithAction(t, n)) : window.location = t : void 0;\n        }, r.prototype.startVisitToLocationWithAction = function (t, r, n) {\n          var o;\n          return e.supported ? (o = this.getRestorationDataForIdentifier(n), this.startVisit(t, r, {\n            restorationData: o\n          })) : window.location = t;\n        }, r.prototype.setProgressBarDelay = function (t) {\n          return this.progressBarDelay = t;\n        }, r.prototype.startHistory = function () {\n          return this.location = e.Location.wrap(window.location), this.restorationIdentifier = e.uuid(), this.history.start(), this.history.replace(this.location, this.restorationIdentifier);\n        }, r.prototype.stopHistory = function () {\n          return this.history.stop();\n        }, r.prototype.pushHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n          return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.push(this.location, this.restorationIdentifier);\n        }, r.prototype.replaceHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n          return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.replace(this.location, this.restorationIdentifier);\n        }, r.prototype.historyPoppedToLocationWithRestorationIdentifier = function (t, r) {\n          var n;\n          return this.restorationIdentifier = r, this.enabled ? (n = this.getRestorationDataForIdentifier(this.restorationIdentifier), this.startVisit(t, \"restore\", {\n            restorationIdentifier: this.restorationIdentifier,\n            restorationData: n,\n            historyChanged: !0\n          }), this.location = e.Location.wrap(t)) : this.adapter.pageInvalidated();\n        }, r.prototype.getCachedSnapshotForLocation = function (t) {\n          var e;\n          return null != (e = this.cache.get(t)) ? e.clone() : void 0;\n        }, r.prototype.shouldCacheSnapshot = function () {\n          return this.view.getSnapshot().isCacheable();\n        }, r.prototype.cacheSnapshot = function () {\n          var t, r;\n          return this.shouldCacheSnapshot() ? (this.notifyApplicationBeforeCachingSnapshot(), r = this.view.getSnapshot(), t = this.lastRenderedLocation, e.defer(function (e) {\n            return function () {\n              return e.cache.put(t, r.clone());\n            };\n          }(this))) : void 0;\n        }, r.prototype.scrollToAnchor = function (t) {\n          var e;\n          return (e = this.view.getElementForAnchor(t)) ? this.scrollToElement(e) : this.scrollToPosition({\n            x: 0,\n            y: 0\n          });\n        }, r.prototype.scrollToElement = function (t) {\n          return this.scrollManager.scrollToElement(t);\n        }, r.prototype.scrollToPosition = function (t) {\n          return this.scrollManager.scrollToPosition(t);\n        }, r.prototype.scrollPositionChanged = function (t) {\n          var e;\n          return e = this.getCurrentRestorationData(), e.scrollPosition = t;\n        }, r.prototype.render = function (t, e) {\n          return this.view.render(t, e);\n        }, r.prototype.viewInvalidated = function () {\n          return this.adapter.pageInvalidated();\n        }, r.prototype.viewWillRender = function (t) {\n          return this.notifyApplicationBeforeRender(t);\n        }, r.prototype.viewRendered = function () {\n          return this.lastRenderedLocation = this.currentVisit.location, this.notifyApplicationAfterRender();\n        }, r.prototype.pageLoaded = function () {\n          return this.lastRenderedLocation = this.location, this.notifyApplicationAfterPageLoad();\n        }, r.prototype.clickCaptured = function () {\n          return removeEventListener(\"click\", this.clickBubbled, !1), addEventListener(\"click\", this.clickBubbled, !1);\n        }, r.prototype.clickBubbled = function (t) {\n          var e, r, n;\n          return this.enabled && this.clickEventIsSignificant(t) && (r = this.getVisitableLinkForNode(t.target)) && (n = this.getVisitableLocationForLink(r)) && this.applicationAllowsFollowingLinkToLocation(r, n) ? (t.preventDefault(), e = this.getActionForLink(r), this.visit(n, {\n            action: e\n          })) : void 0;\n        }, r.prototype.applicationAllowsFollowingLinkToLocation = function (t, e) {\n          var r;\n          return r = this.notifyApplicationAfterClickingLinkToLocation(t, e), !r.defaultPrevented;\n        }, r.prototype.applicationAllowsVisitingLocation = function (t) {\n          var e;\n          return e = this.notifyApplicationBeforeVisitingLocation(t), !e.defaultPrevented;\n        }, r.prototype.notifyApplicationAfterClickingLinkToLocation = function (t, r) {\n          return e.dispatch(\"turbolinks:click\", {\n            target: t,\n            data: {\n              url: r.absoluteURL\n            },\n            cancelable: !0\n          });\n        }, r.prototype.notifyApplicationBeforeVisitingLocation = function (t) {\n          return e.dispatch(\"turbolinks:before-visit\", {\n            data: {\n              url: t.absoluteURL\n            },\n            cancelable: !0\n          });\n        }, r.prototype.notifyApplicationAfterVisitingLocation = function (t) {\n          return e.dispatch(\"turbolinks:visit\", {\n            data: {\n              url: t.absoluteURL\n            }\n          });\n        }, r.prototype.notifyApplicationBeforeCachingSnapshot = function () {\n          return e.dispatch(\"turbolinks:before-cache\");\n        }, r.prototype.notifyApplicationBeforeRender = function (t) {\n          return e.dispatch(\"turbolinks:before-render\", {\n            data: {\n              newBody: t\n            }\n          });\n        }, r.prototype.notifyApplicationAfterRender = function () {\n          return e.dispatch(\"turbolinks:render\");\n        }, r.prototype.notifyApplicationAfterPageLoad = function (t) {\n          return null == t && (t = {}), e.dispatch(\"turbolinks:load\", {\n            data: {\n              url: this.location.absoluteURL,\n              timing: t\n            }\n          });\n        }, r.prototype.startVisit = function (t, e, r) {\n          var n;\n          return null != (n = this.currentVisit) && n.cancel(), this.currentVisit = this.createVisit(t, e, r), this.currentVisit.start(), this.notifyApplicationAfterVisitingLocation(t);\n        }, r.prototype.createVisit = function (t, r, n) {\n          var o, i, s, a, u;\n          return i = null != n ? n : {}, a = i.restorationIdentifier, s = i.restorationData, o = i.historyChanged, u = new e.Visit(this, t, r), u.restorationIdentifier = null != a ? a : e.uuid(), u.restorationData = e.copyObject(s), u.historyChanged = o, u.referrer = this.location, u;\n        }, r.prototype.visitCompleted = function (t) {\n          return this.notifyApplicationAfterPageLoad(t.getTimingMetrics());\n        }, r.prototype.clickEventIsSignificant = function (t) {\n          return !(t.defaultPrevented || t.target.isContentEditable || t.which > 1 || t.altKey || t.ctrlKey || t.metaKey || t.shiftKey);\n        }, r.prototype.getVisitableLinkForNode = function (t) {\n          return this.nodeIsVisitable(t) ? e.closest(t, \"a[href]:not([target]):not([download])\") : void 0;\n        }, r.prototype.getVisitableLocationForLink = function (t) {\n          var r;\n          return r = new e.Location(t.getAttribute(\"href\")), this.locationIsVisitable(r) ? r : void 0;\n        }, r.prototype.getActionForLink = function (t) {\n          var e;\n          return null != (e = t.getAttribute(\"data-turbolinks-action\")) ? e : \"advance\";\n        }, r.prototype.nodeIsVisitable = function (t) {\n          var r;\n          return (r = e.closest(t, \"[data-turbolinks]\")) ? \"false\" !== r.getAttribute(\"data-turbolinks\") : !0;\n        }, r.prototype.locationIsVisitable = function (t) {\n          return t.isPrefixedBy(this.view.getRootLocation()) && t.isHTML();\n        }, r.prototype.getCurrentRestorationData = function () {\n          return this.getRestorationDataForIdentifier(this.restorationIdentifier);\n        }, r.prototype.getRestorationDataForIdentifier = function (t) {\n          var e;\n          return null != (e = this.restorationData)[t] ? e[t] : e[t] = {};\n        }, r;\n      }();\n    }.call(this), function () {\n      !function () {\n        var t, e;\n        if ((t = e = document.currentScript) && !e.hasAttribute(\"data-turbolinks-suppress-warning\")) for (; t = t.parentNode;) if (t === document.body) return console.warn(\"You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\\n\\nLoad your application\\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\\n\\nFor more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements\\n\\n\\u2014\\u2014\\nSuppress this warning by adding a `data-turbolinks-suppress-warning` attribute to: %s\", e.outerHTML);\n      }();\n    }.call(this), function () {\n      var t, r, n;\n      e.start = function () {\n        return r() ? (null == e.controller && (e.controller = t()), e.controller.start()) : void 0;\n      }, r = function () {\n        return null == window.Turbolinks && (window.Turbolinks = e), n();\n      }, t = function () {\n        var t;\n        return t = new e.Controller(), t.adapter = new e.BrowserAdapter(t), t;\n      }, n = function () {\n        return window.Turbolinks === e;\n      }, n() && e.start();\n    }.call(this);\n  }).call(this), \"object\" == typeof module && module.exports ? module.exports = e : \"function\" == typeof define && define.amd && define(e);\n}).call(this);","(function ($, undefined) {\n  /**\n   * Unobtrusive scripting adapter for jQuery\n   * https://github.com/rails/jquery-ujs\n   *\n   * Requires jQuery 1.8.0 or later.\n   *\n   * Released under the MIT license\n   *\n   */\n\n  // Cut down on the number of issues from people inadvertently including jquery_ujs twice\n  // by detecting and raising an error when it happens.\n  'use strict';\n\n  if ($.rails !== undefined) {\n    $.error('jquery-ujs has already been loaded!');\n  }\n\n  // Shorthand to make it a little easier to call public rails functions from within rails.js\n  var rails;\n  var $document = $(document);\n  $.rails = rails = {\n    // Link elements bound by jquery-ujs\n    linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n    // Button elements bound by jquery-ujs\n    buttonClickSelector: 'button[data-remote]:not([form]):not(form button), button[data-confirm]:not([form]):not(form button)',\n    // Select elements bound by jquery-ujs\n    inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n    // Form elements bound by jquery-ujs\n    formSubmitSelector: 'form',\n    // Form input elements bound by jquery-ujs\n    formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n    // Form input elements disabled during form submission\n    disableSelector: '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    // Form input elements re-enabled after form submission\n    enableSelector: '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    // Form required input elements\n    requiredInputSelector: 'input[name][required]:not([disabled]), textarea[name][required]:not([disabled])',\n    // Form file input elements\n    fileInputSelector: 'input[name][type=file]:not([disabled])',\n    // Link onClick disable selector with possible reenable after remote submission\n    linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n    // Button onClick disable selector with possible reenable after remote submission\n    buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]',\n    // Up-to-date Cross-Site Request Forgery token\n    csrfToken: function () {\n      return $('meta[name=csrf-token]').attr('content');\n    },\n    // URL param that must contain the CSRF token\n    csrfParam: function () {\n      return $('meta[name=csrf-param]').attr('content');\n    },\n    // Make sure that every Ajax request sends the CSRF token\n    CSRFProtection: function (xhr) {\n      var token = rails.csrfToken();\n      if (token) xhr.setRequestHeader('X-CSRF-Token', token);\n    },\n    // Make sure that all forms have actual up-to-date tokens (cached forms contain old ones)\n    refreshCSRFTokens: function () {\n      $('form input[name=\"' + rails.csrfParam() + '\"]').val(rails.csrfToken());\n    },\n    // Triggers an event on an element and returns false if the event result is false\n    fire: function (obj, name, data) {\n      var event = $.Event(name);\n      obj.trigger(event, data);\n      return event.result !== false;\n    },\n    // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm\n    confirm: function (message) {\n      return confirm(message);\n    },\n    // Default ajax function, may be overridden with custom function in $.rails.ajax\n    ajax: function (options) {\n      return $.ajax(options);\n    },\n    // Default way to get an element's href. May be overridden at $.rails.href.\n    href: function (element) {\n      return element[0].href;\n    },\n    // Checks \"data-remote\" if true to handle the request through a XHR request.\n    isRemote: function (element) {\n      return element.data('remote') !== undefined && element.data('remote') !== false;\n    },\n    // Submits \"remote\" forms and links with ajax\n    handleRemote: function (element) {\n      var method, url, data, withCredentials, dataType, options;\n      if (rails.fire(element, 'ajax:before')) {\n        withCredentials = element.data('with-credentials') || null;\n        dataType = element.data('type') || $.ajaxSettings && $.ajaxSettings.dataType;\n        if (element.is('form')) {\n          method = element.data('ujs:submit-button-formmethod') || element.attr('method');\n          url = element.data('ujs:submit-button-formaction') || element.attr('action');\n          data = $(element[0]).serializeArray();\n          // memoized value from clicked submit button\n          var button = element.data('ujs:submit-button');\n          if (button) {\n            data.push(button);\n            element.data('ujs:submit-button', null);\n          }\n          element.data('ujs:submit-button-formmethod', null);\n          element.data('ujs:submit-button-formaction', null);\n        } else if (element.is(rails.inputChangeSelector)) {\n          method = element.data('method');\n          url = element.data('url');\n          data = element.serialize();\n          if (element.data('params')) data = data + '&' + element.data('params');\n        } else if (element.is(rails.buttonClickSelector)) {\n          method = element.data('method') || 'get';\n          url = element.data('url');\n          data = element.serialize();\n          if (element.data('params')) data = data + '&' + element.data('params');\n        } else {\n          method = element.data('method');\n          url = rails.href(element);\n          data = element.data('params') || null;\n        }\n        options = {\n          type: method || 'GET',\n          data: data,\n          dataType: dataType,\n          // stopping the \"ajax:beforeSend\" event will cancel the ajax request\n          beforeSend: function (xhr, settings) {\n            if (settings.dataType === undefined) {\n              xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);\n            }\n            if (rails.fire(element, 'ajax:beforeSend', [xhr, settings])) {\n              element.trigger('ajax:send', xhr);\n            } else {\n              return false;\n            }\n          },\n          success: function (data, status, xhr) {\n            element.trigger('ajax:success', [data, status, xhr]);\n          },\n          complete: function (xhr, status) {\n            element.trigger('ajax:complete', [xhr, status]);\n          },\n          error: function (xhr, status, error) {\n            element.trigger('ajax:error', [xhr, status, error]);\n          },\n          crossDomain: rails.isCrossDomain(url)\n        };\n\n        // There is no withCredentials for IE6-8 when\n        // \"Enable native XMLHTTP support\" is disabled\n        if (withCredentials) {\n          options.xhrFields = {\n            withCredentials: withCredentials\n          };\n        }\n\n        // Only pass url to `ajax` options if not blank\n        if (url) {\n          options.url = url;\n        }\n        return rails.ajax(options);\n      } else {\n        return false;\n      }\n    },\n    // Determines if the request is a cross domain request.\n    isCrossDomain: function (url) {\n      var originAnchor = document.createElement('a');\n      originAnchor.href = location.href;\n      var urlAnchor = document.createElement('a');\n      try {\n        urlAnchor.href = url;\n        // This is a workaround to a IE bug.\n        urlAnchor.href = urlAnchor.href;\n\n        // If URL protocol is false or is a string containing a single colon\n        // *and* host are false, assume it is not a cross-domain request\n        // (should only be the case for IE7 and IE compatibility mode).\n        // Otherwise, evaluate protocol and host of the URL against the origin\n        // protocol and host.\n        return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n      } catch (e) {\n        // If there is an error parsing the URL, assume it is crossDomain.\n        return true;\n      }\n    },\n    // Handles \"data-method\" on links such as:\n    // <a href=\"/users/5\" data-method=\"delete\" rel=\"nofollow\" data-confirm=\"Are you sure?\">Delete</a>\n    handleMethod: function (link) {\n      var href = rails.href(link),\n        method = link.data('method'),\n        target = link.attr('target'),\n        csrfToken = rails.csrfToken(),\n        csrfParam = rails.csrfParam(),\n        form = $('<form method=\"post\" action=\"' + href + '\"></form>'),\n        metadataInput = '<input name=\"_method\" value=\"' + method + '\" type=\"hidden\" />';\n      if (csrfParam !== undefined && csrfToken !== undefined && !rails.isCrossDomain(href)) {\n        metadataInput += '<input name=\"' + csrfParam + '\" value=\"' + csrfToken + '\" type=\"hidden\" />';\n      }\n      if (target) {\n        form.attr('target', target);\n      }\n      form.hide().append(metadataInput).appendTo('body');\n      form.submit();\n    },\n    // Helper function that returns form elements that match the specified CSS selector\n    // If form is actually a \"form\" element this will return associated elements outside the from that have\n    // the html form attribute set\n    formElements: function (form, selector) {\n      return form.is('form') ? $(form[0].elements).filter(selector) : form.find(selector);\n    },\n    /* Disables form elements:\n      - Caches element value in 'ujs:enable-with' data store\n      - Replaces element text with value of 'data-disable-with' attribute\n      - Sets disabled property to true\n    */\n    disableFormElements: function (form) {\n      rails.formElements(form, rails.disableSelector).each(function () {\n        rails.disableFormElement($(this));\n      });\n    },\n    disableFormElement: function (element) {\n      var method, replacement;\n      method = element.is('button') ? 'html' : 'val';\n      replacement = element.data('disable-with');\n      if (replacement !== undefined) {\n        element.data('ujs:enable-with', element[method]());\n        element[method](replacement);\n      }\n      element.prop('disabled', true);\n      element.data('ujs:disabled', true);\n    },\n    /* Re-enables disabled form elements:\n      - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)\n      - Sets disabled property to false\n    */\n    enableFormElements: function (form) {\n      rails.formElements(form, rails.enableSelector).each(function () {\n        rails.enableFormElement($(this));\n      });\n    },\n    enableFormElement: function (element) {\n      var method = element.is('button') ? 'html' : 'val';\n      if (element.data('ujs:enable-with') !== undefined) {\n        element[method](element.data('ujs:enable-with'));\n        element.removeData('ujs:enable-with'); // clean up cache\n      }\n\n      element.prop('disabled', false);\n      element.removeData('ujs:disabled');\n    },\n    /* For 'data-confirm' attribute:\n       - Fires `confirm` event\n       - Shows the confirmation dialog\n       - Fires the `confirm:complete` event\n        Returns `true` if no function stops the chain and user chose yes; `false` otherwise.\n       Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.\n       Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function\n       return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.\n    */\n    allowAction: function (element) {\n      var message = element.data('confirm'),\n        answer = false,\n        callback;\n      if (!message) {\n        return true;\n      }\n      if (rails.fire(element, 'confirm')) {\n        try {\n          answer = rails.confirm(message);\n        } catch (e) {\n          (console.error || console.log).call(console, e.stack || e);\n        }\n        callback = rails.fire(element, 'confirm:complete', [answer]);\n      }\n      return answer && callback;\n    },\n    // Helper function which checks for blank inputs in a form that match the specified CSS selector\n    blankInputs: function (form, specifiedSelector, nonBlank) {\n      var foundInputs = $(),\n        input,\n        valueToCheck,\n        radiosForNameWithNoneSelected,\n        radioName,\n        selector = specifiedSelector || 'input,textarea',\n        requiredInputs = form.find(selector),\n        checkedRadioButtonNames = {};\n      requiredInputs.each(function () {\n        input = $(this);\n        if (input.is('input[type=radio]')) {\n          // Don't count unchecked required radio as blank if other radio with same name is checked,\n          // regardless of whether same-name radio input has required attribute or not. The spec\n          // states https://www.w3.org/TR/html5/forms.html#the-required-attribute\n          radioName = input.attr('name');\n\n          // Skip if we've already seen the radio with this name.\n          if (!checkedRadioButtonNames[radioName]) {\n            // If none checked\n            if (form.find('input[type=radio]:checked[name=\"' + radioName + '\"]').length === 0) {\n              radiosForNameWithNoneSelected = form.find('input[type=radio][name=\"' + radioName + '\"]');\n              foundInputs = foundInputs.add(radiosForNameWithNoneSelected);\n            }\n\n            // We only need to check each name once.\n            checkedRadioButtonNames[radioName] = radioName;\n          }\n        } else {\n          valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : !!input.val();\n          if (valueToCheck === nonBlank) {\n            foundInputs = foundInputs.add(input);\n          }\n        }\n      });\n      return foundInputs.length ? foundInputs : false;\n    },\n    // Helper function which checks for non-blank inputs in a form that match the specified CSS selector\n    nonBlankInputs: function (form, specifiedSelector) {\n      return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank\n    },\n\n    // Helper function, needed to provide consistent behavior in IE\n    stopEverything: function (e) {\n      $(e.target).trigger('ujs:everythingStopped');\n      e.stopImmediatePropagation();\n      return false;\n    },\n    //  Replace element's html with the 'data-disable-with' after storing original html\n    //  and prevent clicking on it\n    disableElement: function (element) {\n      var replacement = element.data('disable-with');\n      if (replacement !== undefined) {\n        element.data('ujs:enable-with', element.html()); // store enabled state\n        element.html(replacement);\n      }\n      element.bind('click.railsDisable', function (e) {\n        // prevent further clicking\n        return rails.stopEverything(e);\n      });\n      element.data('ujs:disabled', true);\n    },\n    // Restore element to its original state which was disabled by 'disableElement' above\n    enableElement: function (element) {\n      if (element.data('ujs:enable-with') !== undefined) {\n        element.html(element.data('ujs:enable-with')); // set to old enabled state\n        element.removeData('ujs:enable-with'); // clean up cache\n      }\n\n      element.unbind('click.railsDisable'); // enable element\n      element.removeData('ujs:disabled');\n    }\n  };\n  if (rails.fire($document, 'rails:attachBindings')) {\n    $.ajaxPrefilter(function (options, originalOptions, xhr) {\n      if (!options.crossDomain) {\n        rails.CSRFProtection(xhr);\n      }\n    });\n\n    // This event works the same as the load event, except that it fires every\n    // time the page is loaded.\n    //\n    // See https://github.com/rails/jquery-ujs/issues/357\n    // See https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching\n    $(window).on('pageshow.rails', function () {\n      $($.rails.enableSelector).each(function () {\n        var element = $(this);\n        if (element.data('ujs:disabled')) {\n          $.rails.enableFormElement(element);\n        }\n      });\n      $($.rails.linkDisableSelector).each(function () {\n        var element = $(this);\n        if (element.data('ujs:disabled')) {\n          $.rails.enableElement(element);\n        }\n      });\n    });\n    $document.on('ajax:complete', rails.linkDisableSelector, function () {\n      rails.enableElement($(this));\n    });\n    $document.on('ajax:complete', rails.buttonDisableSelector, function () {\n      rails.enableFormElement($(this));\n    });\n    $document.on('click.rails', rails.linkClickSelector, function (e) {\n      var link = $(this),\n        method = link.data('method'),\n        data = link.data('params'),\n        metaClick = e.metaKey || e.ctrlKey;\n      if (!rails.allowAction(link)) return rails.stopEverything(e);\n      if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link);\n      if (rails.isRemote(link)) {\n        if (metaClick && (!method || method === 'GET') && !data) {\n          return true;\n        }\n        var handleRemote = rails.handleRemote(link);\n        // Response from rails.handleRemote() will either be false or a deferred object promise.\n        if (handleRemote === false) {\n          rails.enableElement(link);\n        } else {\n          handleRemote.fail(function () {\n            rails.enableElement(link);\n          });\n        }\n        return false;\n      } else if (method) {\n        rails.handleMethod(link);\n        return false;\n      }\n    });\n    $document.on('click.rails', rails.buttonClickSelector, function (e) {\n      var button = $(this);\n      if (!rails.allowAction(button) || !rails.isRemote(button)) return rails.stopEverything(e);\n      if (button.is(rails.buttonDisableSelector)) rails.disableFormElement(button);\n      var handleRemote = rails.handleRemote(button);\n      // Response from rails.handleRemote() will either be false or a deferred object promise.\n      if (handleRemote === false) {\n        rails.enableFormElement(button);\n      } else {\n        handleRemote.fail(function () {\n          rails.enableFormElement(button);\n        });\n      }\n      return false;\n    });\n    $document.on('change.rails', rails.inputChangeSelector, function (e) {\n      var link = $(this);\n      if (!rails.allowAction(link) || !rails.isRemote(link)) return rails.stopEverything(e);\n      rails.handleRemote(link);\n      return false;\n    });\n    $document.on('submit.rails', rails.formSubmitSelector, function (e) {\n      var form = $(this),\n        remote = rails.isRemote(form),\n        blankRequiredInputs,\n        nonBlankFileInputs;\n      if (!rails.allowAction(form)) return rails.stopEverything(e);\n\n      // Skip other logic when required values are missing or file upload is present\n      if (form.attr('novalidate') === undefined) {\n        if (form.data('ujs:formnovalidate-button') === undefined) {\n          blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector, false);\n          if (blankRequiredInputs && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {\n            return rails.stopEverything(e);\n          }\n        } else {\n          // Clear the formnovalidate in case the next button click is not on a formnovalidate button\n          // Not strictly necessary to do here, since it is also reset on each button click, but just to be certain\n          form.data('ujs:formnovalidate-button', undefined);\n        }\n      }\n      if (remote) {\n        nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);\n        if (nonBlankFileInputs) {\n          // Slight timeout so that the submit button gets properly serialized\n          // (make it easy for event handler to serialize form without disabled values)\n          setTimeout(function () {\n            rails.disableFormElements(form);\n          }, 13);\n          var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);\n\n          // Re-enable form elements if event bindings return false (canceling normal form submission)\n          if (!aborted) {\n            setTimeout(function () {\n              rails.enableFormElements(form);\n            }, 13);\n          }\n          return aborted;\n        }\n        rails.handleRemote(form);\n        return false;\n      } else {\n        // Slight timeout so that the submit button gets properly serialized\n        setTimeout(function () {\n          rails.disableFormElements(form);\n        }, 13);\n      }\n    });\n    $document.on('click.rails', rails.formInputClickSelector, function (event) {\n      var button = $(this);\n      if (!rails.allowAction(button)) return rails.stopEverything(event);\n\n      // Register the pressed submit button\n      var name = button.attr('name'),\n        data = name ? {\n          name: name,\n          value: button.val()\n        } : null;\n      var form = button.closest('form');\n      if (form.length === 0) {\n        form = $('#' + button.attr('form'));\n      }\n      form.data('ujs:submit-button', data);\n\n      // Save attributes from button\n      form.data('ujs:formnovalidate-button', button.attr('formnovalidate'));\n      form.data('ujs:submit-button-formaction', button.attr('formaction'));\n      form.data('ujs:submit-button-formmethod', button.attr('formmethod'));\n    });\n    $document.on('ajax:send.rails', rails.formSubmitSelector, function (event) {\n      if (this === event.target) rails.disableFormElements($(this));\n    });\n    $document.on('ajax:complete.rails', rails.formSubmitSelector, function (event) {\n      if (this === event.target) rails.enableFormElements($(this));\n    });\n    $(function () {\n      rails.refreshCSRFTokens();\n    });\n  }\n})(jQuery);","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\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; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/*!\n  * Bootstrap v5.3.3 (https://getbootstrap.com/)\n  * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n!function (t, e) {\n  \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = e() : \"function\" == typeof define && define.amd ? define(e) : (t = \"undefined\" != typeof globalThis ? globalThis : t || self).bootstrap = e();\n}(this, function () {\n  \"use strict\";\n\n  const t = new Map(),\n    e = {\n      set(e, i, n) {\n        t.has(e) || t.set(e, new Map());\n        const s = t.get(e);\n        s.has(i) || 0 === s.size ? s.set(i, n) : console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`);\n      },\n      get: (e, i) => t.has(e) && t.get(e).get(i) || null,\n      remove(e, i) {\n        if (!t.has(e)) return;\n        const n = t.get(e);\n        n.delete(i), 0 === n.size && t.delete(e);\n      }\n    },\n    i = \"transitionend\",\n    n = t => (t && window.CSS && window.CSS.escape && (t = t.replace(/#([^\\s\"#']+)/g, (t, e) => `#${CSS.escape(e)}`)), t),\n    s = t => {\n      t.dispatchEvent(new Event(i));\n    },\n    o = t => !(!t || \"object\" != typeof t) && (void 0 !== t.jquery && (t = t[0]), void 0 !== t.nodeType),\n    r = t => o(t) ? t.jquery ? t[0] : t : \"string\" == typeof t && t.length > 0 ? document.querySelector(n(t)) : null,\n    a = t => {\n      if (!o(t) || 0 === t.getClientRects().length) return !1;\n      const e = \"visible\" === getComputedStyle(t).getPropertyValue(\"visibility\"),\n        i = t.closest(\"details:not([open])\");\n      if (!i) return e;\n      if (i !== t) {\n        const e = t.closest(\"summary\");\n        if (e && e.parentNode !== i) return !1;\n        if (null === e) return !1;\n      }\n      return e;\n    },\n    l = t => !t || t.nodeType !== Node.ELEMENT_NODE || !!t.classList.contains(\"disabled\") || (void 0 !== t.disabled ? t.disabled : t.hasAttribute(\"disabled\") && \"false\" !== t.getAttribute(\"disabled\")),\n    c = t => {\n      if (!document.documentElement.attachShadow) return null;\n      if (\"function\" == typeof t.getRootNode) {\n        const e = t.getRootNode();\n        return e instanceof ShadowRoot ? e : null;\n      }\n      return t instanceof ShadowRoot ? t : t.parentNode ? c(t.parentNode) : null;\n    },\n    h = () => {},\n    d = t => {\n      t.offsetHeight;\n    },\n    u = () => window.jQuery && !document.body.hasAttribute(\"data-bs-no-jquery\") ? window.jQuery : null,\n    f = [],\n    p = () => \"rtl\" === document.documentElement.dir,\n    m = t => {\n      var e;\n      e = () => {\n        const e = u();\n        if (e) {\n          const i = t.NAME,\n            n = e.fn[i];\n          e.fn[i] = t.jQueryInterface, e.fn[i].Constructor = t, e.fn[i].noConflict = () => (e.fn[i] = n, t.jQueryInterface);\n        }\n      }, \"loading\" === document.readyState ? (f.length || document.addEventListener(\"DOMContentLoaded\", () => {\n        for (const t of f) t();\n      }), f.push(e)) : e();\n    },\n    g = function (t) {\n      let e = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : t;\n      return \"function\" == typeof t ? t(...e) : i;\n    },\n    _ = function (t, e) {\n      let n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !0;\n      if (!n) return void g(t);\n      const o = (t => {\n        if (!t) return 0;\n        let _window$getComputedSt = window.getComputedStyle(t),\n          e = _window$getComputedSt.transitionDuration,\n          i = _window$getComputedSt.transitionDelay;\n        const n = Number.parseFloat(e),\n          s = Number.parseFloat(i);\n        return n || s ? (e = e.split(\",\")[0], i = i.split(\",\")[0], 1e3 * (Number.parseFloat(e) + Number.parseFloat(i))) : 0;\n      })(e) + 5;\n      let r = !1;\n      const a = _ref => {\n        let n = _ref.target;\n        n === e && (r = !0, e.removeEventListener(i, a), g(t));\n      };\n      e.addEventListener(i, a), setTimeout(() => {\n        r || s(e);\n      }, o);\n    },\n    b = (t, e, i, n) => {\n      const s = t.length;\n      let o = t.indexOf(e);\n      return -1 === o ? !i && n ? t[s - 1] : t[0] : (o += i ? 1 : -1, n && (o = (o + s) % s), t[Math.max(0, Math.min(o, s - 1))]);\n    },\n    v = /[^.]*(?=\\..*)\\.|.*/,\n    y = /\\..*/,\n    w = /::\\d+$/,\n    A = {};\n  let E = 1;\n  const T = {\n      mouseenter: \"mouseover\",\n      mouseleave: \"mouseout\"\n    },\n    C = new Set([\"click\", \"dblclick\", \"mouseup\", \"mousedown\", \"contextmenu\", \"mousewheel\", \"DOMMouseScroll\", \"mouseover\", \"mouseout\", \"mousemove\", \"selectstart\", \"selectend\", \"keydown\", \"keypress\", \"keyup\", \"orientationchange\", \"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\", \"pointerdown\", \"pointermove\", \"pointerup\", \"pointerleave\", \"pointercancel\", \"gesturestart\", \"gesturechange\", \"gestureend\", \"focus\", \"blur\", \"change\", \"reset\", \"select\", \"submit\", \"focusin\", \"focusout\", \"load\", \"unload\", \"beforeunload\", \"resize\", \"move\", \"DOMContentLoaded\", \"readystatechange\", \"error\", \"abort\", \"scroll\"]);\n  function O(t, e) {\n    return e && `${e}::${E++}` || t.uidEvent || E++;\n  }\n  function x(t) {\n    const e = O(t);\n    return t.uidEvent = e, A[e] = A[e] || {}, A[e];\n  }\n  function k(t, e) {\n    let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    return Object.values(t).find(t => t.callable === e && t.delegationSelector === i);\n  }\n  function L(t, e, i) {\n    const n = \"string\" == typeof e,\n      s = n ? i : e || i;\n    let o = I(t);\n    return C.has(o) || (o = t), [n, s, o];\n  }\n  function S(t, e, i, n, s) {\n    if (\"string\" != typeof e || !t) return;\n    let _L = L(e, i, n),\n      _L2 = _slicedToArray(_L, 3),\n      o = _L2[0],\n      r = _L2[1],\n      a = _L2[2];\n    if (e in T) {\n      const t = t => function (e) {\n        if (!e.relatedTarget || e.relatedTarget !== e.delegateTarget && !e.delegateTarget.contains(e.relatedTarget)) return t.call(this, e);\n      };\n      r = t(r);\n    }\n    const l = x(t),\n      c = l[a] || (l[a] = {}),\n      h = k(c, r, o ? i : null);\n    if (h) return void (h.oneOff = h.oneOff && s);\n    const d = O(r, e.replace(v, \"\")),\n      u = o ? function (t, e, i) {\n        return function n(s) {\n          const o = t.querySelectorAll(e);\n          for (let r = s.target; r && r !== this; r = r.parentNode) for (const a of o) if (a === r) return P(s, {\n            delegateTarget: r\n          }), n.oneOff && N.off(t, s.type, e, i), i.apply(r, [s]);\n        };\n      }(t, i, r) : function (t, e) {\n        return function i(n) {\n          return P(n, {\n            delegateTarget: t\n          }), i.oneOff && N.off(t, n.type, e), e.apply(t, [n]);\n        };\n      }(t, r);\n    u.delegationSelector = o ? i : null, u.callable = r, u.oneOff = s, u.uidEvent = d, c[d] = u, t.addEventListener(a, u, o);\n  }\n  function D(t, e, i, n, s) {\n    const o = k(e[i], n, s);\n    o && (t.removeEventListener(i, o, Boolean(s)), delete e[i][o.uidEvent]);\n  }\n  function $(t, e, i, n) {\n    const s = e[i] || {};\n    for (const _ref2 of Object.entries(s)) {\n      var _ref3 = _slicedToArray(_ref2, 2);\n      const o = _ref3[0];\n      const r = _ref3[1];\n      o.includes(n) && D(t, e, i, r.callable, r.delegationSelector);\n    }\n  }\n  function I(t) {\n    return t = t.replace(y, \"\"), T[t] || t;\n  }\n  const N = {\n    on(t, e, i, n) {\n      S(t, e, i, n, !1);\n    },\n    one(t, e, i, n) {\n      S(t, e, i, n, !0);\n    },\n    off(t, e, i, n) {\n      if (\"string\" != typeof e || !t) return;\n      const _L3 = L(e, i, n),\n        _L4 = _slicedToArray(_L3, 3),\n        s = _L4[0],\n        o = _L4[1],\n        r = _L4[2],\n        a = r !== e,\n        l = x(t),\n        c = l[r] || {},\n        h = e.startsWith(\".\");\n      if (void 0 === o) {\n        if (h) for (const i of Object.keys(l)) $(t, l, i, e.slice(1));\n        for (const _ref4 of Object.entries(c)) {\n          var _ref5 = _slicedToArray(_ref4, 2);\n          const i = _ref5[0];\n          const n = _ref5[1];\n          {\n            const s = i.replace(w, \"\");\n            a && !e.includes(s) || D(t, l, r, n.callable, n.delegationSelector);\n          }\n        }\n      } else {\n        if (!Object.keys(c).length) return;\n        D(t, l, r, o, s ? i : null);\n      }\n    },\n    trigger(t, e, i) {\n      if (\"string\" != typeof e || !t) return null;\n      const n = u();\n      let s = null,\n        o = !0,\n        r = !0,\n        a = !1;\n      e !== I(e) && n && (s = n.Event(e, i), n(t).trigger(s), o = !s.isPropagationStopped(), r = !s.isImmediatePropagationStopped(), a = s.isDefaultPrevented());\n      const l = P(new Event(e, {\n        bubbles: o,\n        cancelable: !0\n      }), i);\n      return a && l.preventDefault(), r && t.dispatchEvent(l), l.defaultPrevented && s && s.preventDefault(), l;\n    }\n  };\n  function P(t) {\n    let e = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    for (const _ref6 of Object.entries(e)) {\n      var _ref7 = _slicedToArray(_ref6, 2);\n      const i = _ref7[0];\n      const n = _ref7[1];\n      try {\n        t[i] = n;\n      } catch (e) {\n        Object.defineProperty(t, i, {\n          configurable: !0,\n          get: () => n\n        });\n      }\n    }\n    return t;\n  }\n  function j(t) {\n    if (\"true\" === t) return !0;\n    if (\"false\" === t) return !1;\n    if (t === Number(t).toString()) return Number(t);\n    if (\"\" === t || \"null\" === t) return null;\n    if (\"string\" != typeof t) return t;\n    try {\n      return JSON.parse(decodeURIComponent(t));\n    } catch (e) {\n      return t;\n    }\n  }\n  function M(t) {\n    return t.replace(/[A-Z]/g, t => `-${t.toLowerCase()}`);\n  }\n  const F = {\n    setDataAttribute(t, e, i) {\n      t.setAttribute(`data-bs-${M(e)}`, i);\n    },\n    removeDataAttribute(t, e) {\n      t.removeAttribute(`data-bs-${M(e)}`);\n    },\n    getDataAttributes(t) {\n      if (!t) return {};\n      const e = {},\n        i = Object.keys(t.dataset).filter(t => t.startsWith(\"bs\") && !t.startsWith(\"bsConfig\"));\n      for (const n of i) {\n        let i = n.replace(/^bs/, \"\");\n        i = i.charAt(0).toLowerCase() + i.slice(1, i.length), e[i] = j(t.dataset[n]);\n      }\n      return e;\n    },\n    getDataAttribute: (t, e) => j(t.getAttribute(`data-bs-${M(e)}`))\n  };\n  class H {\n    static get Default() {\n      return {};\n    }\n    static get DefaultType() {\n      return {};\n    }\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n    _getConfig(t) {\n      return t = this._mergeConfigObj(t), t = this._configAfterMerge(t), this._typeCheckConfig(t), t;\n    }\n    _configAfterMerge(t) {\n      return t;\n    }\n    _mergeConfigObj(t, e) {\n      const i = o(e) ? F.getDataAttribute(e, \"config\") : {};\n      return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, this.constructor.Default), \"object\" == typeof i ? i : {}), o(e) ? F.getDataAttributes(e) : {}), \"object\" == typeof t ? t : {});\n    }\n    _typeCheckConfig(t) {\n      let e = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.constructor.DefaultType;\n      for (const _ref8 of Object.entries(e)) {\n        var _ref9 = _slicedToArray(_ref8, 2);\n        const n = _ref9[0];\n        const s = _ref9[1];\n        {\n          const e = t[n],\n            r = o(e) ? \"element\" : null == (i = e) ? `${i}` : Object.prototype.toString.call(i).match(/\\s([a-z]+)/i)[1].toLowerCase();\n          if (!new RegExp(s).test(r)) throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${n}\" provided type \"${r}\" but expected type \"${s}\".`);\n        }\n      }\n      var i;\n    }\n  }\n  class W extends H {\n    constructor(t, i) {\n      super(), (t = r(t)) && (this._element = t, this._config = this._getConfig(i), e.set(this._element, this.constructor.DATA_KEY, this));\n    }\n    dispose() {\n      e.remove(this._element, this.constructor.DATA_KEY), N.off(this._element, this.constructor.EVENT_KEY);\n      for (const t of Object.getOwnPropertyNames(this)) this[t] = null;\n    }\n    _queueCallback(t, e) {\n      let i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !0;\n      _(t, e, i);\n    }\n    _getConfig(t) {\n      return t = this._mergeConfigObj(t, this._element), t = this._configAfterMerge(t), this._typeCheckConfig(t), t;\n    }\n    static getInstance(t) {\n      return e.get(r(t), this.DATA_KEY);\n    }\n    static getOrCreateInstance(t) {\n      let e = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return this.getInstance(t) || new this(t, \"object\" == typeof e ? e : null);\n    }\n    static get VERSION() {\n      return \"5.3.3\";\n    }\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n    static eventName(t) {\n      return `${t}${this.EVENT_KEY}`;\n    }\n  }\n  const B = t => {\n      let e = t.getAttribute(\"data-bs-target\");\n      if (!e || \"#\" === e) {\n        let i = t.getAttribute(\"href\");\n        if (!i || !i.includes(\"#\") && !i.startsWith(\".\")) return null;\n        i.includes(\"#\") && !i.startsWith(\"#\") && (i = `#${i.split(\"#\")[1]}`), e = i && \"#\" !== i ? i.trim() : null;\n      }\n      return e ? e.split(\",\").map(t => n(t)).join(\",\") : null;\n    },\n    z = {\n      find: function (t) {\n        let e = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.documentElement;\n        return [].concat(...Element.prototype.querySelectorAll.call(e, t));\n      },\n      findOne: function (t) {\n        let e = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.documentElement;\n        return Element.prototype.querySelector.call(e, t);\n      },\n      children: (t, e) => [].concat(...t.children).filter(t => t.matches(e)),\n      parents(t, e) {\n        const i = [];\n        let n = t.parentNode.closest(e);\n        for (; n;) i.push(n), n = n.parentNode.closest(e);\n        return i;\n      },\n      prev(t, e) {\n        let i = t.previousElementSibling;\n        for (; i;) {\n          if (i.matches(e)) return [i];\n          i = i.previousElementSibling;\n        }\n        return [];\n      },\n      next(t, e) {\n        let i = t.nextElementSibling;\n        for (; i;) {\n          if (i.matches(e)) return [i];\n          i = i.nextElementSibling;\n        }\n        return [];\n      },\n      focusableChildren(t) {\n        const e = [\"a\", \"button\", \"input\", \"textarea\", \"select\", \"details\", \"[tabindex]\", '[contenteditable=\"true\"]'].map(t => `${t}:not([tabindex^=\"-\"])`).join(\",\");\n        return this.find(e, t).filter(t => !l(t) && a(t));\n      },\n      getSelectorFromElement(t) {\n        const e = B(t);\n        return e && z.findOne(e) ? e : null;\n      },\n      getElementFromSelector(t) {\n        const e = B(t);\n        return e ? z.findOne(e) : null;\n      },\n      getMultipleElementsFromSelector(t) {\n        const e = B(t);\n        return e ? z.find(e) : [];\n      }\n    },\n    R = function (t) {\n      let e = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"hide\";\n      const i = `click.dismiss${t.EVENT_KEY}`,\n        n = t.NAME;\n      N.on(document, i, `[data-bs-dismiss=\"${n}\"]`, function (i) {\n        if ([\"A\", \"AREA\"].includes(this.tagName) && i.preventDefault(), l(this)) return;\n        const s = z.getElementFromSelector(this) || this.closest(`.${n}`);\n        t.getOrCreateInstance(s)[e]();\n      });\n    },\n    q = \".bs.alert\",\n    V = `close${q}`,\n    K = `closed${q}`;\n  class Q extends W {\n    static get NAME() {\n      return \"alert\";\n    }\n    close() {\n      if (N.trigger(this._element, V).defaultPrevented) return;\n      this._element.classList.remove(\"show\");\n      const t = this._element.classList.contains(\"fade\");\n      this._queueCallback(() => this._destroyElement(), this._element, t);\n    }\n    _destroyElement() {\n      this._element.remove(), N.trigger(this._element, K), this.dispose();\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = Q.getOrCreateInstance(this);\n        if (\"string\" == typeof t) {\n          if (void 0 === e[t] || t.startsWith(\"_\") || \"constructor\" === t) throw new TypeError(`No method named \"${t}\"`);\n          e[t](this);\n        }\n      });\n    }\n  }\n  R(Q, \"close\"), m(Q);\n  const X = '[data-bs-toggle=\"button\"]';\n  class Y extends W {\n    static get NAME() {\n      return \"button\";\n    }\n    toggle() {\n      this._element.setAttribute(\"aria-pressed\", this._element.classList.toggle(\"active\"));\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = Y.getOrCreateInstance(this);\n        \"toggle\" === t && e[t]();\n      });\n    }\n  }\n  N.on(document, \"click.bs.button.data-api\", X, t => {\n    t.preventDefault();\n    const e = t.target.closest(X);\n    Y.getOrCreateInstance(e).toggle();\n  }), m(Y);\n  const U = \".bs.swipe\",\n    G = `touchstart${U}`,\n    J = `touchmove${U}`,\n    Z = `touchend${U}`,\n    tt = `pointerdown${U}`,\n    et = `pointerup${U}`,\n    it = {\n      endCallback: null,\n      leftCallback: null,\n      rightCallback: null\n    },\n    nt = {\n      endCallback: \"(function|null)\",\n      leftCallback: \"(function|null)\",\n      rightCallback: \"(function|null)\"\n    };\n  class st extends H {\n    constructor(t, e) {\n      super(), this._element = t, t && st.isSupported() && (this._config = this._getConfig(e), this._deltaX = 0, this._supportPointerEvents = Boolean(window.PointerEvent), this._initEvents());\n    }\n    static get Default() {\n      return it;\n    }\n    static get DefaultType() {\n      return nt;\n    }\n    static get NAME() {\n      return \"swipe\";\n    }\n    dispose() {\n      N.off(this._element, U);\n    }\n    _start(t) {\n      this._supportPointerEvents ? this._eventIsPointerPenTouch(t) && (this._deltaX = t.clientX) : this._deltaX = t.touches[0].clientX;\n    }\n    _end(t) {\n      this._eventIsPointerPenTouch(t) && (this._deltaX = t.clientX - this._deltaX), this._handleSwipe(), g(this._config.endCallback);\n    }\n    _move(t) {\n      this._deltaX = t.touches && t.touches.length > 1 ? 0 : t.touches[0].clientX - this._deltaX;\n    }\n    _handleSwipe() {\n      const t = Math.abs(this._deltaX);\n      if (t <= 40) return;\n      const e = t / this._deltaX;\n      this._deltaX = 0, e && g(e > 0 ? this._config.rightCallback : this._config.leftCallback);\n    }\n    _initEvents() {\n      this._supportPointerEvents ? (N.on(this._element, tt, t => this._start(t)), N.on(this._element, et, t => this._end(t)), this._element.classList.add(\"pointer-event\")) : (N.on(this._element, G, t => this._start(t)), N.on(this._element, J, t => this._move(t)), N.on(this._element, Z, t => this._end(t)));\n    }\n    _eventIsPointerPenTouch(t) {\n      return this._supportPointerEvents && (\"pen\" === t.pointerType || \"touch\" === t.pointerType);\n    }\n    static isSupported() {\n      return \"ontouchstart\" in document.documentElement || navigator.maxTouchPoints > 0;\n    }\n  }\n  const ot = \".bs.carousel\",\n    rt = \".data-api\",\n    at = \"next\",\n    lt = \"prev\",\n    ct = \"left\",\n    ht = \"right\",\n    dt = `slide${ot}`,\n    ut = `slid${ot}`,\n    ft = `keydown${ot}`,\n    pt = `mouseenter${ot}`,\n    mt = `mouseleave${ot}`,\n    gt = `dragstart${ot}`,\n    _t = `load${ot}${rt}`,\n    bt = `click${ot}${rt}`,\n    vt = \"carousel\",\n    yt = \"active\",\n    wt = \".active\",\n    At = \".carousel-item\",\n    Et = wt + At,\n    Tt = {\n      ArrowLeft: ht,\n      ArrowRight: ct\n    },\n    Ct = {\n      interval: 5e3,\n      keyboard: !0,\n      pause: \"hover\",\n      ride: !1,\n      touch: !0,\n      wrap: !0\n    },\n    Ot = {\n      interval: \"(number|boolean)\",\n      keyboard: \"boolean\",\n      pause: \"(string|boolean)\",\n      ride: \"(boolean|string)\",\n      touch: \"boolean\",\n      wrap: \"boolean\"\n    };\n  class xt extends W {\n    constructor(t, e) {\n      super(t, e), this._interval = null, this._activeElement = null, this._isSliding = !1, this.touchTimeout = null, this._swipeHelper = null, this._indicatorsElement = z.findOne(\".carousel-indicators\", this._element), this._addEventListeners(), this._config.ride === vt && this.cycle();\n    }\n    static get Default() {\n      return Ct;\n    }\n    static get DefaultType() {\n      return Ot;\n    }\n    static get NAME() {\n      return \"carousel\";\n    }\n    next() {\n      this._slide(at);\n    }\n    nextWhenVisible() {\n      !document.hidden && a(this._element) && this.next();\n    }\n    prev() {\n      this._slide(lt);\n    }\n    pause() {\n      this._isSliding && s(this._element), this._clearInterval();\n    }\n    cycle() {\n      this._clearInterval(), this._updateInterval(), this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n    }\n    _maybeEnableCycle() {\n      this._config.ride && (this._isSliding ? N.one(this._element, ut, () => this.cycle()) : this.cycle());\n    }\n    to(t) {\n      const e = this._getItems();\n      if (t > e.length - 1 || t < 0) return;\n      if (this._isSliding) return void N.one(this._element, ut, () => this.to(t));\n      const i = this._getItemIndex(this._getActive());\n      if (i === t) return;\n      const n = t > i ? at : lt;\n      this._slide(n, e[t]);\n    }\n    dispose() {\n      this._swipeHelper && this._swipeHelper.dispose(), super.dispose();\n    }\n    _configAfterMerge(t) {\n      return t.defaultInterval = t.interval, t;\n    }\n    _addEventListeners() {\n      this._config.keyboard && N.on(this._element, ft, t => this._keydown(t)), \"hover\" === this._config.pause && (N.on(this._element, pt, () => this.pause()), N.on(this._element, mt, () => this._maybeEnableCycle())), this._config.touch && st.isSupported() && this._addTouchEventListeners();\n    }\n    _addTouchEventListeners() {\n      for (const t of z.find(\".carousel-item img\", this._element)) N.on(t, gt, t => t.preventDefault());\n      const t = {\n        leftCallback: () => this._slide(this._directionToOrder(ct)),\n        rightCallback: () => this._slide(this._directionToOrder(ht)),\n        endCallback: () => {\n          \"hover\" === this._config.pause && (this.pause(), this.touchTimeout && clearTimeout(this.touchTimeout), this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), 500 + this._config.interval));\n        }\n      };\n      this._swipeHelper = new st(this._element, t);\n    }\n    _keydown(t) {\n      if (/input|textarea/i.test(t.target.tagName)) return;\n      const e = Tt[t.key];\n      e && (t.preventDefault(), this._slide(this._directionToOrder(e)));\n    }\n    _getItemIndex(t) {\n      return this._getItems().indexOf(t);\n    }\n    _setActiveIndicatorElement(t) {\n      if (!this._indicatorsElement) return;\n      const e = z.findOne(wt, this._indicatorsElement);\n      e.classList.remove(yt), e.removeAttribute(\"aria-current\");\n      const i = z.findOne(`[data-bs-slide-to=\"${t}\"]`, this._indicatorsElement);\n      i && (i.classList.add(yt), i.setAttribute(\"aria-current\", \"true\"));\n    }\n    _updateInterval() {\n      const t = this._activeElement || this._getActive();\n      if (!t) return;\n      const e = Number.parseInt(t.getAttribute(\"data-bs-interval\"), 10);\n      this._config.interval = e || this._config.defaultInterval;\n    }\n    _slide(t) {\n      let e = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      if (this._isSliding) return;\n      const i = this._getActive(),\n        n = t === at,\n        s = e || b(this._getItems(), i, n, this._config.wrap);\n      if (s === i) return;\n      const o = this._getItemIndex(s),\n        r = e => N.trigger(this._element, e, {\n          relatedTarget: s,\n          direction: this._orderToDirection(t),\n          from: this._getItemIndex(i),\n          to: o\n        });\n      if (r(dt).defaultPrevented) return;\n      if (!i || !s) return;\n      const a = Boolean(this._interval);\n      this.pause(), this._isSliding = !0, this._setActiveIndicatorElement(o), this._activeElement = s;\n      const l = n ? \"carousel-item-start\" : \"carousel-item-end\",\n        c = n ? \"carousel-item-next\" : \"carousel-item-prev\";\n      s.classList.add(c), d(s), i.classList.add(l), s.classList.add(l), this._queueCallback(() => {\n        s.classList.remove(l, c), s.classList.add(yt), i.classList.remove(yt, c, l), this._isSliding = !1, r(ut);\n      }, i, this._isAnimated()), a && this.cycle();\n    }\n    _isAnimated() {\n      return this._element.classList.contains(\"slide\");\n    }\n    _getActive() {\n      return z.findOne(Et, this._element);\n    }\n    _getItems() {\n      return z.find(At, this._element);\n    }\n    _clearInterval() {\n      this._interval && (clearInterval(this._interval), this._interval = null);\n    }\n    _directionToOrder(t) {\n      return p() ? t === ct ? lt : at : t === ct ? at : lt;\n    }\n    _orderToDirection(t) {\n      return p() ? t === lt ? ct : ht : t === lt ? ht : ct;\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = xt.getOrCreateInstance(this, t);\n        if (\"number\" != typeof t) {\n          if (\"string\" == typeof t) {\n            if (void 0 === e[t] || t.startsWith(\"_\") || \"constructor\" === t) throw new TypeError(`No method named \"${t}\"`);\n            e[t]();\n          }\n        } else e.to(t);\n      });\n    }\n  }\n  N.on(document, bt, \"[data-bs-slide], [data-bs-slide-to]\", function (t) {\n    const e = z.getElementFromSelector(this);\n    if (!e || !e.classList.contains(vt)) return;\n    t.preventDefault();\n    const i = xt.getOrCreateInstance(e),\n      n = this.getAttribute(\"data-bs-slide-to\");\n    return n ? (i.to(n), void i._maybeEnableCycle()) : \"next\" === F.getDataAttribute(this, \"slide\") ? (i.next(), void i._maybeEnableCycle()) : (i.prev(), void i._maybeEnableCycle());\n  }), N.on(window, _t, () => {\n    const t = z.find('[data-bs-ride=\"carousel\"]');\n    for (const e of t) xt.getOrCreateInstance(e);\n  }), m(xt);\n  const kt = \".bs.collapse\",\n    Lt = `show${kt}`,\n    St = `shown${kt}`,\n    Dt = `hide${kt}`,\n    $t = `hidden${kt}`,\n    It = `click${kt}.data-api`,\n    Nt = \"show\",\n    Pt = \"collapse\",\n    jt = \"collapsing\",\n    Mt = `:scope .${Pt} .${Pt}`,\n    Ft = '[data-bs-toggle=\"collapse\"]',\n    Ht = {\n      parent: null,\n      toggle: !0\n    },\n    Wt = {\n      parent: \"(null|element)\",\n      toggle: \"boolean\"\n    };\n  class Bt extends W {\n    constructor(t, e) {\n      super(t, e), this._isTransitioning = !1, this._triggerArray = [];\n      const i = z.find(Ft);\n      for (const t of i) {\n        const e = z.getSelectorFromElement(t),\n          i = z.find(e).filter(t => t === this._element);\n        null !== e && i.length && this._triggerArray.push(t);\n      }\n      this._initializeChildren(), this._config.parent || this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()), this._config.toggle && this.toggle();\n    }\n    static get Default() {\n      return Ht;\n    }\n    static get DefaultType() {\n      return Wt;\n    }\n    static get NAME() {\n      return \"collapse\";\n    }\n    toggle() {\n      this._isShown() ? this.hide() : this.show();\n    }\n    show() {\n      if (this._isTransitioning || this._isShown()) return;\n      let t = [];\n      if (this._config.parent && (t = this._getFirstLevelChildren(\".collapse.show, .collapse.collapsing\").filter(t => t !== this._element).map(t => Bt.getOrCreateInstance(t, {\n        toggle: !1\n      }))), t.length && t[0]._isTransitioning) return;\n      if (N.trigger(this._element, Lt).defaultPrevented) return;\n      for (const e of t) e.hide();\n      const e = this._getDimension();\n      this._element.classList.remove(Pt), this._element.classList.add(jt), this._element.style[e] = 0, this._addAriaAndCollapsedClass(this._triggerArray, !0), this._isTransitioning = !0;\n      const i = `scroll${e[0].toUpperCase() + e.slice(1)}`;\n      this._queueCallback(() => {\n        this._isTransitioning = !1, this._element.classList.remove(jt), this._element.classList.add(Pt, Nt), this._element.style[e] = \"\", N.trigger(this._element, St);\n      }, this._element, !0), this._element.style[e] = `${this._element[i]}px`;\n    }\n    hide() {\n      if (this._isTransitioning || !this._isShown()) return;\n      if (N.trigger(this._element, Dt).defaultPrevented) return;\n      const t = this._getDimension();\n      this._element.style[t] = `${this._element.getBoundingClientRect()[t]}px`, d(this._element), this._element.classList.add(jt), this._element.classList.remove(Pt, Nt);\n      for (const t of this._triggerArray) {\n        const e = z.getElementFromSelector(t);\n        e && !this._isShown(e) && this._addAriaAndCollapsedClass([t], !1);\n      }\n      this._isTransitioning = !0, this._element.style[t] = \"\", this._queueCallback(() => {\n        this._isTransitioning = !1, this._element.classList.remove(jt), this._element.classList.add(Pt), N.trigger(this._element, $t);\n      }, this._element, !0);\n    }\n    _isShown() {\n      let t = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._element;\n      return t.classList.contains(Nt);\n    }\n    _configAfterMerge(t) {\n      return t.toggle = Boolean(t.toggle), t.parent = r(t.parent), t;\n    }\n    _getDimension() {\n      return this._element.classList.contains(\"collapse-horizontal\") ? \"width\" : \"height\";\n    }\n    _initializeChildren() {\n      if (!this._config.parent) return;\n      const t = this._getFirstLevelChildren(Ft);\n      for (const e of t) {\n        const t = z.getElementFromSelector(e);\n        t && this._addAriaAndCollapsedClass([e], this._isShown(t));\n      }\n    }\n    _getFirstLevelChildren(t) {\n      const e = z.find(Mt, this._config.parent);\n      return z.find(t, this._config.parent).filter(t => !e.includes(t));\n    }\n    _addAriaAndCollapsedClass(t, e) {\n      if (t.length) for (const i of t) i.classList.toggle(\"collapsed\", !e), i.setAttribute(\"aria-expanded\", e);\n    }\n    static jQueryInterface(t) {\n      const e = {};\n      return \"string\" == typeof t && /show|hide/.test(t) && (e.toggle = !1), this.each(function () {\n        const i = Bt.getOrCreateInstance(this, e);\n        if (\"string\" == typeof t) {\n          if (void 0 === i[t]) throw new TypeError(`No method named \"${t}\"`);\n          i[t]();\n        }\n      });\n    }\n  }\n  N.on(document, It, Ft, function (t) {\n    (\"A\" === t.target.tagName || t.delegateTarget && \"A\" === t.delegateTarget.tagName) && t.preventDefault();\n    for (const t of z.getMultipleElementsFromSelector(this)) Bt.getOrCreateInstance(t, {\n      toggle: !1\n    }).toggle();\n  }), m(Bt);\n  var zt = \"top\",\n    Rt = \"bottom\",\n    qt = \"right\",\n    Vt = \"left\",\n    Kt = \"auto\",\n    Qt = [zt, Rt, qt, Vt],\n    Xt = \"start\",\n    Yt = \"end\",\n    Ut = \"clippingParents\",\n    Gt = \"viewport\",\n    Jt = \"popper\",\n    Zt = \"reference\",\n    te = Qt.reduce(function (t, e) {\n      return t.concat([e + \"-\" + Xt, e + \"-\" + Yt]);\n    }, []),\n    ee = [].concat(Qt, [Kt]).reduce(function (t, e) {\n      return t.concat([e, e + \"-\" + Xt, e + \"-\" + Yt]);\n    }, []),\n    ie = \"beforeRead\",\n    ne = \"read\",\n    se = \"afterRead\",\n    oe = \"beforeMain\",\n    re = \"main\",\n    ae = \"afterMain\",\n    le = \"beforeWrite\",\n    ce = \"write\",\n    he = \"afterWrite\",\n    de = [ie, ne, se, oe, re, ae, le, ce, he];\n  function ue(t) {\n    return t ? (t.nodeName || \"\").toLowerCase() : null;\n  }\n  function fe(t) {\n    if (null == t) return window;\n    if (\"[object Window]\" !== t.toString()) {\n      var e = t.ownerDocument;\n      return e && e.defaultView || window;\n    }\n    return t;\n  }\n  function pe(t) {\n    return t instanceof fe(t).Element || t instanceof Element;\n  }\n  function me(t) {\n    return t instanceof fe(t).HTMLElement || t instanceof HTMLElement;\n  }\n  function ge(t) {\n    return \"undefined\" != typeof ShadowRoot && (t instanceof fe(t).ShadowRoot || t instanceof ShadowRoot);\n  }\n  const _e = {\n    name: \"applyStyles\",\n    enabled: !0,\n    phase: \"write\",\n    fn: function (t) {\n      var e = t.state;\n      Object.keys(e.elements).forEach(function (t) {\n        var i = e.styles[t] || {},\n          n = e.attributes[t] || {},\n          s = e.elements[t];\n        me(s) && ue(s) && (Object.assign(s.style, i), Object.keys(n).forEach(function (t) {\n          var e = n[t];\n          !1 === e ? s.removeAttribute(t) : s.setAttribute(t, !0 === e ? \"\" : e);\n        }));\n      });\n    },\n    effect: function (t) {\n      var e = t.state,\n        i = {\n          popper: {\n            position: e.options.strategy,\n            left: \"0\",\n            top: \"0\",\n            margin: \"0\"\n          },\n          arrow: {\n            position: \"absolute\"\n          },\n          reference: {}\n        };\n      return Object.assign(e.elements.popper.style, i.popper), e.styles = i, e.elements.arrow && Object.assign(e.elements.arrow.style, i.arrow), function () {\n        Object.keys(e.elements).forEach(function (t) {\n          var n = e.elements[t],\n            s = e.attributes[t] || {},\n            o = Object.keys(e.styles.hasOwnProperty(t) ? e.styles[t] : i[t]).reduce(function (t, e) {\n              return t[e] = \"\", t;\n            }, {});\n          me(n) && ue(n) && (Object.assign(n.style, o), Object.keys(s).forEach(function (t) {\n            n.removeAttribute(t);\n          }));\n        });\n      };\n    },\n    requires: [\"computeStyles\"]\n  };\n  function be(t) {\n    return t.split(\"-\")[0];\n  }\n  var ve = Math.max,\n    ye = Math.min,\n    we = Math.round;\n  function Ae() {\n    var t = navigator.userAgentData;\n    return null != t && t.brands && Array.isArray(t.brands) ? t.brands.map(function (t) {\n      return t.brand + \"/\" + t.version;\n    }).join(\" \") : navigator.userAgent;\n  }\n  function Ee() {\n    return !/^((?!chrome|android).)*safari/i.test(Ae());\n  }\n  function Te(t, e, i) {\n    void 0 === e && (e = !1), void 0 === i && (i = !1);\n    var n = t.getBoundingClientRect(),\n      s = 1,\n      o = 1;\n    e && me(t) && (s = t.offsetWidth > 0 && we(n.width) / t.offsetWidth || 1, o = t.offsetHeight > 0 && we(n.height) / t.offsetHeight || 1);\n    var r = (pe(t) ? fe(t) : window).visualViewport,\n      a = !Ee() && i,\n      l = (n.left + (a && r ? r.offsetLeft : 0)) / s,\n      c = (n.top + (a && r ? r.offsetTop : 0)) / o,\n      h = n.width / s,\n      d = n.height / o;\n    return {\n      width: h,\n      height: d,\n      top: c,\n      right: l + h,\n      bottom: c + d,\n      left: l,\n      x: l,\n      y: c\n    };\n  }\n  function Ce(t) {\n    var e = Te(t),\n      i = t.offsetWidth,\n      n = t.offsetHeight;\n    return Math.abs(e.width - i) <= 1 && (i = e.width), Math.abs(e.height - n) <= 1 && (n = e.height), {\n      x: t.offsetLeft,\n      y: t.offsetTop,\n      width: i,\n      height: n\n    };\n  }\n  function Oe(t, e) {\n    var i = e.getRootNode && e.getRootNode();\n    if (t.contains(e)) return !0;\n    if (i && ge(i)) {\n      var n = e;\n      do {\n        if (n && t.isSameNode(n)) return !0;\n        n = n.parentNode || n.host;\n      } while (n);\n    }\n    return !1;\n  }\n  function xe(t) {\n    return fe(t).getComputedStyle(t);\n  }\n  function ke(t) {\n    return [\"table\", \"td\", \"th\"].indexOf(ue(t)) >= 0;\n  }\n  function Le(t) {\n    return ((pe(t) ? t.ownerDocument : t.document) || window.document).documentElement;\n  }\n  function Se(t) {\n    return \"html\" === ue(t) ? t : t.assignedSlot || t.parentNode || (ge(t) ? t.host : null) || Le(t);\n  }\n  function De(t) {\n    return me(t) && \"fixed\" !== xe(t).position ? t.offsetParent : null;\n  }\n  function $e(t) {\n    for (var e = fe(t), i = De(t); i && ke(i) && \"static\" === xe(i).position;) i = De(i);\n    return i && (\"html\" === ue(i) || \"body\" === ue(i) && \"static\" === xe(i).position) ? e : i || function (t) {\n      var e = /firefox/i.test(Ae());\n      if (/Trident/i.test(Ae()) && me(t) && \"fixed\" === xe(t).position) return null;\n      var i = Se(t);\n      for (ge(i) && (i = i.host); me(i) && [\"html\", \"body\"].indexOf(ue(i)) < 0;) {\n        var n = xe(i);\n        if (\"none\" !== n.transform || \"none\" !== n.perspective || \"paint\" === n.contain || -1 !== [\"transform\", \"perspective\"].indexOf(n.willChange) || e && \"filter\" === n.willChange || e && n.filter && \"none\" !== n.filter) return i;\n        i = i.parentNode;\n      }\n      return null;\n    }(t) || e;\n  }\n  function Ie(t) {\n    return [\"top\", \"bottom\"].indexOf(t) >= 0 ? \"x\" : \"y\";\n  }\n  function Ne(t, e, i) {\n    return ve(t, ye(e, i));\n  }\n  function Pe(t) {\n    return Object.assign({}, {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }, t);\n  }\n  function je(t, e) {\n    return e.reduce(function (e, i) {\n      return e[i] = t, e;\n    }, {});\n  }\n  const Me = {\n    name: \"arrow\",\n    enabled: !0,\n    phase: \"main\",\n    fn: function (t) {\n      var e,\n        i = t.state,\n        n = t.name,\n        s = t.options,\n        o = i.elements.arrow,\n        r = i.modifiersData.popperOffsets,\n        a = be(i.placement),\n        l = Ie(a),\n        c = [Vt, qt].indexOf(a) >= 0 ? \"height\" : \"width\";\n      if (o && r) {\n        var h = function (t, e) {\n            return Pe(\"number\" != typeof (t = \"function\" == typeof t ? t(Object.assign({}, e.rects, {\n              placement: e.placement\n            })) : t) ? t : je(t, Qt));\n          }(s.padding, i),\n          d = Ce(o),\n          u = \"y\" === l ? zt : Vt,\n          f = \"y\" === l ? Rt : qt,\n          p = i.rects.reference[c] + i.rects.reference[l] - r[l] - i.rects.popper[c],\n          m = r[l] - i.rects.reference[l],\n          g = $e(o),\n          _ = g ? \"y\" === l ? g.clientHeight || 0 : g.clientWidth || 0 : 0,\n          b = p / 2 - m / 2,\n          v = h[u],\n          y = _ - d[c] - h[f],\n          w = _ / 2 - d[c] / 2 + b,\n          A = Ne(v, w, y),\n          E = l;\n        i.modifiersData[n] = ((e = {})[E] = A, e.centerOffset = A - w, e);\n      }\n    },\n    effect: function (t) {\n      var e = t.state,\n        i = t.options.element,\n        n = void 0 === i ? \"[data-popper-arrow]\" : i;\n      null != n && (\"string\" != typeof n || (n = e.elements.popper.querySelector(n))) && Oe(e.elements.popper, n) && (e.elements.arrow = n);\n    },\n    requires: [\"popperOffsets\"],\n    requiresIfExists: [\"preventOverflow\"]\n  };\n  function Fe(t) {\n    return t.split(\"-\")[1];\n  }\n  var He = {\n    top: \"auto\",\n    right: \"auto\",\n    bottom: \"auto\",\n    left: \"auto\"\n  };\n  function We(t) {\n    var e,\n      i = t.popper,\n      n = t.popperRect,\n      s = t.placement,\n      o = t.variation,\n      r = t.offsets,\n      a = t.position,\n      l = t.gpuAcceleration,\n      c = t.adaptive,\n      h = t.roundOffsets,\n      d = t.isFixed,\n      u = r.x,\n      f = void 0 === u ? 0 : u,\n      p = r.y,\n      m = void 0 === p ? 0 : p,\n      g = \"function\" == typeof h ? h({\n        x: f,\n        y: m\n      }) : {\n        x: f,\n        y: m\n      };\n    f = g.x, m = g.y;\n    var _ = r.hasOwnProperty(\"x\"),\n      b = r.hasOwnProperty(\"y\"),\n      v = Vt,\n      y = zt,\n      w = window;\n    if (c) {\n      var A = $e(i),\n        E = \"clientHeight\",\n        T = \"clientWidth\";\n      A === fe(i) && \"static\" !== xe(A = Le(i)).position && \"absolute\" === a && (E = \"scrollHeight\", T = \"scrollWidth\"), (s === zt || (s === Vt || s === qt) && o === Yt) && (y = Rt, m -= (d && A === w && w.visualViewport ? w.visualViewport.height : A[E]) - n.height, m *= l ? 1 : -1), s !== Vt && (s !== zt && s !== Rt || o !== Yt) || (v = qt, f -= (d && A === w && w.visualViewport ? w.visualViewport.width : A[T]) - n.width, f *= l ? 1 : -1);\n    }\n    var C,\n      O = Object.assign({\n        position: a\n      }, c && He),\n      x = !0 === h ? function (t, e) {\n        var i = t.x,\n          n = t.y,\n          s = e.devicePixelRatio || 1;\n        return {\n          x: we(i * s) / s || 0,\n          y: we(n * s) / s || 0\n        };\n      }({\n        x: f,\n        y: m\n      }, fe(i)) : {\n        x: f,\n        y: m\n      };\n    return f = x.x, m = x.y, l ? Object.assign({}, O, ((C = {})[y] = b ? \"0\" : \"\", C[v] = _ ? \"0\" : \"\", C.transform = (w.devicePixelRatio || 1) <= 1 ? \"translate(\" + f + \"px, \" + m + \"px)\" : \"translate3d(\" + f + \"px, \" + m + \"px, 0)\", C)) : Object.assign({}, O, ((e = {})[y] = b ? m + \"px\" : \"\", e[v] = _ ? f + \"px\" : \"\", e.transform = \"\", e));\n  }\n  const Be = {\n    name: \"computeStyles\",\n    enabled: !0,\n    phase: \"beforeWrite\",\n    fn: function (t) {\n      var e = t.state,\n        i = t.options,\n        n = i.gpuAcceleration,\n        s = void 0 === n || n,\n        o = i.adaptive,\n        r = void 0 === o || o,\n        a = i.roundOffsets,\n        l = void 0 === a || a,\n        c = {\n          placement: be(e.placement),\n          variation: Fe(e.placement),\n          popper: e.elements.popper,\n          popperRect: e.rects.popper,\n          gpuAcceleration: s,\n          isFixed: \"fixed\" === e.options.strategy\n        };\n      null != e.modifiersData.popperOffsets && (e.styles.popper = Object.assign({}, e.styles.popper, We(Object.assign({}, c, {\n        offsets: e.modifiersData.popperOffsets,\n        position: e.options.strategy,\n        adaptive: r,\n        roundOffsets: l\n      })))), null != e.modifiersData.arrow && (e.styles.arrow = Object.assign({}, e.styles.arrow, We(Object.assign({}, c, {\n        offsets: e.modifiersData.arrow,\n        position: \"absolute\",\n        adaptive: !1,\n        roundOffsets: l\n      })))), e.attributes.popper = Object.assign({}, e.attributes.popper, {\n        \"data-popper-placement\": e.placement\n      });\n    },\n    data: {}\n  };\n  var ze = {\n    passive: !0\n  };\n  const Re = {\n    name: \"eventListeners\",\n    enabled: !0,\n    phase: \"write\",\n    fn: function () {},\n    effect: function (t) {\n      var e = t.state,\n        i = t.instance,\n        n = t.options,\n        s = n.scroll,\n        o = void 0 === s || s,\n        r = n.resize,\n        a = void 0 === r || r,\n        l = fe(e.elements.popper),\n        c = [].concat(e.scrollParents.reference, e.scrollParents.popper);\n      return o && c.forEach(function (t) {\n        t.addEventListener(\"scroll\", i.update, ze);\n      }), a && l.addEventListener(\"resize\", i.update, ze), function () {\n        o && c.forEach(function (t) {\n          t.removeEventListener(\"scroll\", i.update, ze);\n        }), a && l.removeEventListener(\"resize\", i.update, ze);\n      };\n    },\n    data: {}\n  };\n  var qe = {\n    left: \"right\",\n    right: \"left\",\n    bottom: \"top\",\n    top: \"bottom\"\n  };\n  function Ve(t) {\n    return t.replace(/left|right|bottom|top/g, function (t) {\n      return qe[t];\n    });\n  }\n  var Ke = {\n    start: \"end\",\n    end: \"start\"\n  };\n  function Qe(t) {\n    return t.replace(/start|end/g, function (t) {\n      return Ke[t];\n    });\n  }\n  function Xe(t) {\n    var e = fe(t);\n    return {\n      scrollLeft: e.pageXOffset,\n      scrollTop: e.pageYOffset\n    };\n  }\n  function Ye(t) {\n    return Te(Le(t)).left + Xe(t).scrollLeft;\n  }\n  function Ue(t) {\n    var e = xe(t),\n      i = e.overflow,\n      n = e.overflowX,\n      s = e.overflowY;\n    return /auto|scroll|overlay|hidden/.test(i + s + n);\n  }\n  function Ge(t) {\n    return [\"html\", \"body\", \"#document\"].indexOf(ue(t)) >= 0 ? t.ownerDocument.body : me(t) && Ue(t) ? t : Ge(Se(t));\n  }\n  function Je(t, e) {\n    var i;\n    void 0 === e && (e = []);\n    var n = Ge(t),\n      s = n === (null == (i = t.ownerDocument) ? void 0 : i.body),\n      o = fe(n),\n      r = s ? [o].concat(o.visualViewport || [], Ue(n) ? n : []) : n,\n      a = e.concat(r);\n    return s ? a : a.concat(Je(Se(r)));\n  }\n  function Ze(t) {\n    return Object.assign({}, t, {\n      left: t.x,\n      top: t.y,\n      right: t.x + t.width,\n      bottom: t.y + t.height\n    });\n  }\n  function ti(t, e, i) {\n    return e === Gt ? Ze(function (t, e) {\n      var i = fe(t),\n        n = Le(t),\n        s = i.visualViewport,\n        o = n.clientWidth,\n        r = n.clientHeight,\n        a = 0,\n        l = 0;\n      if (s) {\n        o = s.width, r = s.height;\n        var c = Ee();\n        (c || !c && \"fixed\" === e) && (a = s.offsetLeft, l = s.offsetTop);\n      }\n      return {\n        width: o,\n        height: r,\n        x: a + Ye(t),\n        y: l\n      };\n    }(t, i)) : pe(e) ? function (t, e) {\n      var i = Te(t, !1, \"fixed\" === e);\n      return i.top = i.top + t.clientTop, i.left = i.left + t.clientLeft, i.bottom = i.top + t.clientHeight, i.right = i.left + t.clientWidth, i.width = t.clientWidth, i.height = t.clientHeight, i.x = i.left, i.y = i.top, i;\n    }(e, i) : Ze(function (t) {\n      var e,\n        i = Le(t),\n        n = Xe(t),\n        s = null == (e = t.ownerDocument) ? void 0 : e.body,\n        o = ve(i.scrollWidth, i.clientWidth, s ? s.scrollWidth : 0, s ? s.clientWidth : 0),\n        r = ve(i.scrollHeight, i.clientHeight, s ? s.scrollHeight : 0, s ? s.clientHeight : 0),\n        a = -n.scrollLeft + Ye(t),\n        l = -n.scrollTop;\n      return \"rtl\" === xe(s || i).direction && (a += ve(i.clientWidth, s ? s.clientWidth : 0) - o), {\n        width: o,\n        height: r,\n        x: a,\n        y: l\n      };\n    }(Le(t)));\n  }\n  function ei(t) {\n    var e,\n      i = t.reference,\n      n = t.element,\n      s = t.placement,\n      o = s ? be(s) : null,\n      r = s ? Fe(s) : null,\n      a = i.x + i.width / 2 - n.width / 2,\n      l = i.y + i.height / 2 - n.height / 2;\n    switch (o) {\n      case zt:\n        e = {\n          x: a,\n          y: i.y - n.height\n        };\n        break;\n      case Rt:\n        e = {\n          x: a,\n          y: i.y + i.height\n        };\n        break;\n      case qt:\n        e = {\n          x: i.x + i.width,\n          y: l\n        };\n        break;\n      case Vt:\n        e = {\n          x: i.x - n.width,\n          y: l\n        };\n        break;\n      default:\n        e = {\n          x: i.x,\n          y: i.y\n        };\n    }\n    var c = o ? Ie(o) : null;\n    if (null != c) {\n      var h = \"y\" === c ? \"height\" : \"width\";\n      switch (r) {\n        case Xt:\n          e[c] = e[c] - (i[h] / 2 - n[h] / 2);\n          break;\n        case Yt:\n          e[c] = e[c] + (i[h] / 2 - n[h] / 2);\n      }\n    }\n    return e;\n  }\n  function ii(t, e) {\n    void 0 === e && (e = {});\n    var i = e,\n      n = i.placement,\n      s = void 0 === n ? t.placement : n,\n      o = i.strategy,\n      r = void 0 === o ? t.strategy : o,\n      a = i.boundary,\n      l = void 0 === a ? Ut : a,\n      c = i.rootBoundary,\n      h = void 0 === c ? Gt : c,\n      d = i.elementContext,\n      u = void 0 === d ? Jt : d,\n      f = i.altBoundary,\n      p = void 0 !== f && f,\n      m = i.padding,\n      g = void 0 === m ? 0 : m,\n      _ = Pe(\"number\" != typeof g ? g : je(g, Qt)),\n      b = u === Jt ? Zt : Jt,\n      v = t.rects.popper,\n      y = t.elements[p ? b : u],\n      w = function (t, e, i, n) {\n        var s = \"clippingParents\" === e ? function (t) {\n            var e = Je(Se(t)),\n              i = [\"absolute\", \"fixed\"].indexOf(xe(t).position) >= 0 && me(t) ? $e(t) : t;\n            return pe(i) ? e.filter(function (t) {\n              return pe(t) && Oe(t, i) && \"body\" !== ue(t);\n            }) : [];\n          }(t) : [].concat(e),\n          o = [].concat(s, [i]),\n          r = o[0],\n          a = o.reduce(function (e, i) {\n            var s = ti(t, i, n);\n            return e.top = ve(s.top, e.top), e.right = ye(s.right, e.right), e.bottom = ye(s.bottom, e.bottom), e.left = ve(s.left, e.left), e;\n          }, ti(t, r, n));\n        return a.width = a.right - a.left, a.height = a.bottom - a.top, a.x = a.left, a.y = a.top, a;\n      }(pe(y) ? y : y.contextElement || Le(t.elements.popper), l, h, r),\n      A = Te(t.elements.reference),\n      E = ei({\n        reference: A,\n        element: v,\n        strategy: \"absolute\",\n        placement: s\n      }),\n      T = Ze(Object.assign({}, v, E)),\n      C = u === Jt ? T : A,\n      O = {\n        top: w.top - C.top + _.top,\n        bottom: C.bottom - w.bottom + _.bottom,\n        left: w.left - C.left + _.left,\n        right: C.right - w.right + _.right\n      },\n      x = t.modifiersData.offset;\n    if (u === Jt && x) {\n      var k = x[s];\n      Object.keys(O).forEach(function (t) {\n        var e = [qt, Rt].indexOf(t) >= 0 ? 1 : -1,\n          i = [zt, Rt].indexOf(t) >= 0 ? \"y\" : \"x\";\n        O[t] += k[i] * e;\n      });\n    }\n    return O;\n  }\n  function ni(t, e) {\n    void 0 === e && (e = {});\n    var i = e,\n      n = i.placement,\n      s = i.boundary,\n      o = i.rootBoundary,\n      r = i.padding,\n      a = i.flipVariations,\n      l = i.allowedAutoPlacements,\n      c = void 0 === l ? ee : l,\n      h = Fe(n),\n      d = h ? a ? te : te.filter(function (t) {\n        return Fe(t) === h;\n      }) : Qt,\n      u = d.filter(function (t) {\n        return c.indexOf(t) >= 0;\n      });\n    0 === u.length && (u = d);\n    var f = u.reduce(function (e, i) {\n      return e[i] = ii(t, {\n        placement: i,\n        boundary: s,\n        rootBoundary: o,\n        padding: r\n      })[be(i)], e;\n    }, {});\n    return Object.keys(f).sort(function (t, e) {\n      return f[t] - f[e];\n    });\n  }\n  const si = {\n    name: \"flip\",\n    enabled: !0,\n    phase: \"main\",\n    fn: function (t) {\n      var e = t.state,\n        i = t.options,\n        n = t.name;\n      if (!e.modifiersData[n]._skip) {\n        for (var s = i.mainAxis, o = void 0 === s || s, r = i.altAxis, a = void 0 === r || r, l = i.fallbackPlacements, c = i.padding, h = i.boundary, d = i.rootBoundary, u = i.altBoundary, f = i.flipVariations, p = void 0 === f || f, m = i.allowedAutoPlacements, g = e.options.placement, _ = be(g), b = l || (_ !== g && p ? function (t) {\n            if (be(t) === Kt) return [];\n            var e = Ve(t);\n            return [Qe(t), e, Qe(e)];\n          }(g) : [Ve(g)]), v = [g].concat(b).reduce(function (t, i) {\n            return t.concat(be(i) === Kt ? ni(e, {\n              placement: i,\n              boundary: h,\n              rootBoundary: d,\n              padding: c,\n              flipVariations: p,\n              allowedAutoPlacements: m\n            }) : i);\n          }, []), y = e.rects.reference, w = e.rects.popper, A = new Map(), E = !0, T = v[0], C = 0; C < v.length; C++) {\n          var O = v[C],\n            x = be(O),\n            k = Fe(O) === Xt,\n            L = [zt, Rt].indexOf(x) >= 0,\n            S = L ? \"width\" : \"height\",\n            D = ii(e, {\n              placement: O,\n              boundary: h,\n              rootBoundary: d,\n              altBoundary: u,\n              padding: c\n            }),\n            $ = L ? k ? qt : Vt : k ? Rt : zt;\n          y[S] > w[S] && ($ = Ve($));\n          var I = Ve($),\n            N = [];\n          if (o && N.push(D[x] <= 0), a && N.push(D[$] <= 0, D[I] <= 0), N.every(function (t) {\n            return t;\n          })) {\n            T = O, E = !1;\n            break;\n          }\n          A.set(O, N);\n        }\n        if (E) for (var P = function (t) {\n            var e = v.find(function (e) {\n              var i = A.get(e);\n              if (i) return i.slice(0, t).every(function (t) {\n                return t;\n              });\n            });\n            if (e) return T = e, \"break\";\n          }, j = p ? 3 : 1; j > 0 && \"break\" !== P(j); j--);\n        e.placement !== T && (e.modifiersData[n]._skip = !0, e.placement = T, e.reset = !0);\n      }\n    },\n    requiresIfExists: [\"offset\"],\n    data: {\n      _skip: !1\n    }\n  };\n  function oi(t, e, i) {\n    return void 0 === i && (i = {\n      x: 0,\n      y: 0\n    }), {\n      top: t.top - e.height - i.y,\n      right: t.right - e.width + i.x,\n      bottom: t.bottom - e.height + i.y,\n      left: t.left - e.width - i.x\n    };\n  }\n  function ri(t) {\n    return [zt, qt, Rt, Vt].some(function (e) {\n      return t[e] >= 0;\n    });\n  }\n  const ai = {\n      name: \"hide\",\n      enabled: !0,\n      phase: \"main\",\n      requiresIfExists: [\"preventOverflow\"],\n      fn: function (t) {\n        var e = t.state,\n          i = t.name,\n          n = e.rects.reference,\n          s = e.rects.popper,\n          o = e.modifiersData.preventOverflow,\n          r = ii(e, {\n            elementContext: \"reference\"\n          }),\n          a = ii(e, {\n            altBoundary: !0\n          }),\n          l = oi(r, n),\n          c = oi(a, s, o),\n          h = ri(l),\n          d = ri(c);\n        e.modifiersData[i] = {\n          referenceClippingOffsets: l,\n          popperEscapeOffsets: c,\n          isReferenceHidden: h,\n          hasPopperEscaped: d\n        }, e.attributes.popper = Object.assign({}, e.attributes.popper, {\n          \"data-popper-reference-hidden\": h,\n          \"data-popper-escaped\": d\n        });\n      }\n    },\n    li = {\n      name: \"offset\",\n      enabled: !0,\n      phase: \"main\",\n      requires: [\"popperOffsets\"],\n      fn: function (t) {\n        var e = t.state,\n          i = t.options,\n          n = t.name,\n          s = i.offset,\n          o = void 0 === s ? [0, 0] : s,\n          r = ee.reduce(function (t, i) {\n            return t[i] = function (t, e, i) {\n              var n = be(t),\n                s = [Vt, zt].indexOf(n) >= 0 ? -1 : 1,\n                o = \"function\" == typeof i ? i(Object.assign({}, e, {\n                  placement: t\n                })) : i,\n                r = o[0],\n                a = o[1];\n              return r = r || 0, a = (a || 0) * s, [Vt, qt].indexOf(n) >= 0 ? {\n                x: a,\n                y: r\n              } : {\n                x: r,\n                y: a\n              };\n            }(i, e.rects, o), t;\n          }, {}),\n          a = r[e.placement],\n          l = a.x,\n          c = a.y;\n        null != e.modifiersData.popperOffsets && (e.modifiersData.popperOffsets.x += l, e.modifiersData.popperOffsets.y += c), e.modifiersData[n] = r;\n      }\n    },\n    ci = {\n      name: \"popperOffsets\",\n      enabled: !0,\n      phase: \"read\",\n      fn: function (t) {\n        var e = t.state,\n          i = t.name;\n        e.modifiersData[i] = ei({\n          reference: e.rects.reference,\n          element: e.rects.popper,\n          strategy: \"absolute\",\n          placement: e.placement\n        });\n      },\n      data: {}\n    },\n    hi = {\n      name: \"preventOverflow\",\n      enabled: !0,\n      phase: \"main\",\n      fn: function (t) {\n        var e = t.state,\n          i = t.options,\n          n = t.name,\n          s = i.mainAxis,\n          o = void 0 === s || s,\n          r = i.altAxis,\n          a = void 0 !== r && r,\n          l = i.boundary,\n          c = i.rootBoundary,\n          h = i.altBoundary,\n          d = i.padding,\n          u = i.tether,\n          f = void 0 === u || u,\n          p = i.tetherOffset,\n          m = void 0 === p ? 0 : p,\n          g = ii(e, {\n            boundary: l,\n            rootBoundary: c,\n            padding: d,\n            altBoundary: h\n          }),\n          _ = be(e.placement),\n          b = Fe(e.placement),\n          v = !b,\n          y = Ie(_),\n          w = \"x\" === y ? \"y\" : \"x\",\n          A = e.modifiersData.popperOffsets,\n          E = e.rects.reference,\n          T = e.rects.popper,\n          C = \"function\" == typeof m ? m(Object.assign({}, e.rects, {\n            placement: e.placement\n          })) : m,\n          O = \"number\" == typeof C ? {\n            mainAxis: C,\n            altAxis: C\n          } : Object.assign({\n            mainAxis: 0,\n            altAxis: 0\n          }, C),\n          x = e.modifiersData.offset ? e.modifiersData.offset[e.placement] : null,\n          k = {\n            x: 0,\n            y: 0\n          };\n        if (A) {\n          if (o) {\n            var L,\n              S = \"y\" === y ? zt : Vt,\n              D = \"y\" === y ? Rt : qt,\n              $ = \"y\" === y ? \"height\" : \"width\",\n              I = A[y],\n              N = I + g[S],\n              P = I - g[D],\n              j = f ? -T[$] / 2 : 0,\n              M = b === Xt ? E[$] : T[$],\n              F = b === Xt ? -T[$] : -E[$],\n              H = e.elements.arrow,\n              W = f && H ? Ce(H) : {\n                width: 0,\n                height: 0\n              },\n              B = e.modifiersData[\"arrow#persistent\"] ? e.modifiersData[\"arrow#persistent\"].padding : {\n                top: 0,\n                right: 0,\n                bottom: 0,\n                left: 0\n              },\n              z = B[S],\n              R = B[D],\n              q = Ne(0, E[$], W[$]),\n              V = v ? E[$] / 2 - j - q - z - O.mainAxis : M - q - z - O.mainAxis,\n              K = v ? -E[$] / 2 + j + q + R + O.mainAxis : F + q + R + O.mainAxis,\n              Q = e.elements.arrow && $e(e.elements.arrow),\n              X = Q ? \"y\" === y ? Q.clientTop || 0 : Q.clientLeft || 0 : 0,\n              Y = null != (L = null == x ? void 0 : x[y]) ? L : 0,\n              U = I + K - Y,\n              G = Ne(f ? ye(N, I + V - Y - X) : N, I, f ? ve(P, U) : P);\n            A[y] = G, k[y] = G - I;\n          }\n          if (a) {\n            var J,\n              Z = \"x\" === y ? zt : Vt,\n              tt = \"x\" === y ? Rt : qt,\n              et = A[w],\n              it = \"y\" === w ? \"height\" : \"width\",\n              nt = et + g[Z],\n              st = et - g[tt],\n              ot = -1 !== [zt, Vt].indexOf(_),\n              rt = null != (J = null == x ? void 0 : x[w]) ? J : 0,\n              at = ot ? nt : et - E[it] - T[it] - rt + O.altAxis,\n              lt = ot ? et + E[it] + T[it] - rt - O.altAxis : st,\n              ct = f && ot ? function (t, e, i) {\n                var n = Ne(t, e, i);\n                return n > i ? i : n;\n              }(at, et, lt) : Ne(f ? at : nt, et, f ? lt : st);\n            A[w] = ct, k[w] = ct - et;\n          }\n          e.modifiersData[n] = k;\n        }\n      },\n      requiresIfExists: [\"offset\"]\n    };\n  function di(t, e, i) {\n    void 0 === i && (i = !1);\n    var n,\n      s,\n      o = me(e),\n      r = me(e) && function (t) {\n        var e = t.getBoundingClientRect(),\n          i = we(e.width) / t.offsetWidth || 1,\n          n = we(e.height) / t.offsetHeight || 1;\n        return 1 !== i || 1 !== n;\n      }(e),\n      a = Le(e),\n      l = Te(t, r, i),\n      c = {\n        scrollLeft: 0,\n        scrollTop: 0\n      },\n      h = {\n        x: 0,\n        y: 0\n      };\n    return (o || !o && !i) && ((\"body\" !== ue(e) || Ue(a)) && (c = (n = e) !== fe(n) && me(n) ? {\n      scrollLeft: (s = n).scrollLeft,\n      scrollTop: s.scrollTop\n    } : Xe(n)), me(e) ? ((h = Te(e, !0)).x += e.clientLeft, h.y += e.clientTop) : a && (h.x = Ye(a))), {\n      x: l.left + c.scrollLeft - h.x,\n      y: l.top + c.scrollTop - h.y,\n      width: l.width,\n      height: l.height\n    };\n  }\n  function ui(t) {\n    var e = new Map(),\n      i = new Set(),\n      n = [];\n    function s(t) {\n      i.add(t.name), [].concat(t.requires || [], t.requiresIfExists || []).forEach(function (t) {\n        if (!i.has(t)) {\n          var n = e.get(t);\n          n && s(n);\n        }\n      }), n.push(t);\n    }\n    return t.forEach(function (t) {\n      e.set(t.name, t);\n    }), t.forEach(function (t) {\n      i.has(t.name) || s(t);\n    }), n;\n  }\n  var fi = {\n    placement: \"bottom\",\n    modifiers: [],\n    strategy: \"absolute\"\n  };\n  function pi() {\n    for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) e[i] = arguments[i];\n    return !e.some(function (t) {\n      return !(t && \"function\" == typeof t.getBoundingClientRect);\n    });\n  }\n  function mi(t) {\n    void 0 === t && (t = {});\n    var e = t,\n      i = e.defaultModifiers,\n      n = void 0 === i ? [] : i,\n      s = e.defaultOptions,\n      o = void 0 === s ? fi : s;\n    return function (t, e, i) {\n      void 0 === i && (i = o);\n      var s,\n        r,\n        a = {\n          placement: \"bottom\",\n          orderedModifiers: [],\n          options: Object.assign({}, fi, o),\n          modifiersData: {},\n          elements: {\n            reference: t,\n            popper: e\n          },\n          attributes: {},\n          styles: {}\n        },\n        l = [],\n        c = !1,\n        h = {\n          state: a,\n          setOptions: function (i) {\n            var s = \"function\" == typeof i ? i(a.options) : i;\n            d(), a.options = Object.assign({}, o, a.options, s), a.scrollParents = {\n              reference: pe(t) ? Je(t) : t.contextElement ? Je(t.contextElement) : [],\n              popper: Je(e)\n            };\n            var r,\n              c,\n              u = function (t) {\n                var e = ui(t);\n                return de.reduce(function (t, i) {\n                  return t.concat(e.filter(function (t) {\n                    return t.phase === i;\n                  }));\n                }, []);\n              }((r = [].concat(n, a.options.modifiers), c = r.reduce(function (t, e) {\n                var i = t[e.name];\n                return t[e.name] = i ? Object.assign({}, i, e, {\n                  options: Object.assign({}, i.options, e.options),\n                  data: Object.assign({}, i.data, e.data)\n                }) : e, t;\n              }, {}), Object.keys(c).map(function (t) {\n                return c[t];\n              })));\n            return a.orderedModifiers = u.filter(function (t) {\n              return t.enabled;\n            }), a.orderedModifiers.forEach(function (t) {\n              var e = t.name,\n                i = t.options,\n                n = void 0 === i ? {} : i,\n                s = t.effect;\n              if (\"function\" == typeof s) {\n                var o = s({\n                  state: a,\n                  name: e,\n                  instance: h,\n                  options: n\n                });\n                l.push(o || function () {});\n              }\n            }), h.update();\n          },\n          forceUpdate: function () {\n            if (!c) {\n              var t = a.elements,\n                e = t.reference,\n                i = t.popper;\n              if (pi(e, i)) {\n                a.rects = {\n                  reference: di(e, $e(i), \"fixed\" === a.options.strategy),\n                  popper: Ce(i)\n                }, a.reset = !1, a.placement = a.options.placement, a.orderedModifiers.forEach(function (t) {\n                  return a.modifiersData[t.name] = Object.assign({}, t.data);\n                });\n                for (var n = 0; n < a.orderedModifiers.length; n++) if (!0 !== a.reset) {\n                  var s = a.orderedModifiers[n],\n                    o = s.fn,\n                    r = s.options,\n                    l = void 0 === r ? {} : r,\n                    d = s.name;\n                  \"function\" == typeof o && (a = o({\n                    state: a,\n                    options: l,\n                    name: d,\n                    instance: h\n                  }) || a);\n                } else a.reset = !1, n = -1;\n              }\n            }\n          },\n          update: (s = function () {\n            return new Promise(function (t) {\n              h.forceUpdate(), t(a);\n            });\n          }, function () {\n            return r || (r = new Promise(function (t) {\n              Promise.resolve().then(function () {\n                r = void 0, t(s());\n              });\n            })), r;\n          }),\n          destroy: function () {\n            d(), c = !0;\n          }\n        };\n      if (!pi(t, e)) return h;\n      function d() {\n        l.forEach(function (t) {\n          return t();\n        }), l = [];\n      }\n      return h.setOptions(i).then(function (t) {\n        !c && i.onFirstUpdate && i.onFirstUpdate(t);\n      }), h;\n    };\n  }\n  var gi = mi(),\n    _i = mi({\n      defaultModifiers: [Re, ci, Be, _e]\n    }),\n    bi = mi({\n      defaultModifiers: [Re, ci, Be, _e, li, si, hi, Me, ai]\n    });\n  const vi = Object.freeze(Object.defineProperty({\n      __proto__: null,\n      afterMain: ae,\n      afterRead: se,\n      afterWrite: he,\n      applyStyles: _e,\n      arrow: Me,\n      auto: Kt,\n      basePlacements: Qt,\n      beforeMain: oe,\n      beforeRead: ie,\n      beforeWrite: le,\n      bottom: Rt,\n      clippingParents: Ut,\n      computeStyles: Be,\n      createPopper: bi,\n      createPopperBase: gi,\n      createPopperLite: _i,\n      detectOverflow: ii,\n      end: Yt,\n      eventListeners: Re,\n      flip: si,\n      hide: ai,\n      left: Vt,\n      main: re,\n      modifierPhases: de,\n      offset: li,\n      placements: ee,\n      popper: Jt,\n      popperGenerator: mi,\n      popperOffsets: ci,\n      preventOverflow: hi,\n      read: ne,\n      reference: Zt,\n      right: qt,\n      start: Xt,\n      top: zt,\n      variationPlacements: te,\n      viewport: Gt,\n      write: ce\n    }, Symbol.toStringTag, {\n      value: \"Module\"\n    })),\n    yi = \"dropdown\",\n    wi = \".bs.dropdown\",\n    Ai = \".data-api\",\n    Ei = \"ArrowUp\",\n    Ti = \"ArrowDown\",\n    Ci = `hide${wi}`,\n    Oi = `hidden${wi}`,\n    xi = `show${wi}`,\n    ki = `shown${wi}`,\n    Li = `click${wi}${Ai}`,\n    Si = `keydown${wi}${Ai}`,\n    Di = `keyup${wi}${Ai}`,\n    $i = \"show\",\n    Ii = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)',\n    Ni = `${Ii}.${$i}`,\n    Pi = \".dropdown-menu\",\n    ji = p() ? \"top-end\" : \"top-start\",\n    Mi = p() ? \"top-start\" : \"top-end\",\n    Fi = p() ? \"bottom-end\" : \"bottom-start\",\n    Hi = p() ? \"bottom-start\" : \"bottom-end\",\n    Wi = p() ? \"left-start\" : \"right-start\",\n    Bi = p() ? \"right-start\" : \"left-start\",\n    zi = {\n      autoClose: !0,\n      boundary: \"clippingParents\",\n      display: \"dynamic\",\n      offset: [0, 2],\n      popperConfig: null,\n      reference: \"toggle\"\n    },\n    Ri = {\n      autoClose: \"(boolean|string)\",\n      boundary: \"(string|element)\",\n      display: \"string\",\n      offset: \"(array|string|function)\",\n      popperConfig: \"(null|object|function)\",\n      reference: \"(string|element|object)\"\n    };\n  class qi extends W {\n    constructor(t, e) {\n      super(t, e), this._popper = null, this._parent = this._element.parentNode, this._menu = z.next(this._element, Pi)[0] || z.prev(this._element, Pi)[0] || z.findOne(Pi, this._parent), this._inNavbar = this._detectNavbar();\n    }\n    static get Default() {\n      return zi;\n    }\n    static get DefaultType() {\n      return Ri;\n    }\n    static get NAME() {\n      return yi;\n    }\n    toggle() {\n      return this._isShown() ? this.hide() : this.show();\n    }\n    show() {\n      if (l(this._element) || this._isShown()) return;\n      const t = {\n        relatedTarget: this._element\n      };\n      if (!N.trigger(this._element, xi, t).defaultPrevented) {\n        if (this._createPopper(), \"ontouchstart\" in document.documentElement && !this._parent.closest(\".navbar-nav\")) for (const t of [].concat(...document.body.children)) N.on(t, \"mouseover\", h);\n        this._element.focus(), this._element.setAttribute(\"aria-expanded\", !0), this._menu.classList.add($i), this._element.classList.add($i), N.trigger(this._element, ki, t);\n      }\n    }\n    hide() {\n      if (l(this._element) || !this._isShown()) return;\n      const t = {\n        relatedTarget: this._element\n      };\n      this._completeHide(t);\n    }\n    dispose() {\n      this._popper && this._popper.destroy(), super.dispose();\n    }\n    update() {\n      this._inNavbar = this._detectNavbar(), this._popper && this._popper.update();\n    }\n    _completeHide(t) {\n      if (!N.trigger(this._element, Ci, t).defaultPrevented) {\n        if (\"ontouchstart\" in document.documentElement) for (const t of [].concat(...document.body.children)) N.off(t, \"mouseover\", h);\n        this._popper && this._popper.destroy(), this._menu.classList.remove($i), this._element.classList.remove($i), this._element.setAttribute(\"aria-expanded\", \"false\"), F.removeDataAttribute(this._menu, \"popper\"), N.trigger(this._element, Oi, t);\n      }\n    }\n    _getConfig(t) {\n      if (\"object\" == typeof (t = super._getConfig(t)).reference && !o(t.reference) && \"function\" != typeof t.reference.getBoundingClientRect) throw new TypeError(`${yi.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      return t;\n    }\n    _createPopper() {\n      if (void 0 === vi) throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org)\");\n      let t = this._element;\n      \"parent\" === this._config.reference ? t = this._parent : o(this._config.reference) ? t = r(this._config.reference) : \"object\" == typeof this._config.reference && (t = this._config.reference);\n      const e = this._getPopperConfig();\n      this._popper = bi(t, this._menu, e);\n    }\n    _isShown() {\n      return this._menu.classList.contains($i);\n    }\n    _getPlacement() {\n      const t = this._parent;\n      if (t.classList.contains(\"dropend\")) return Wi;\n      if (t.classList.contains(\"dropstart\")) return Bi;\n      if (t.classList.contains(\"dropup-center\")) return \"top\";\n      if (t.classList.contains(\"dropdown-center\")) return \"bottom\";\n      const e = \"end\" === getComputedStyle(this._menu).getPropertyValue(\"--bs-position\").trim();\n      return t.classList.contains(\"dropup\") ? e ? Mi : ji : e ? Hi : Fi;\n    }\n    _detectNavbar() {\n      return null !== this._element.closest(\".navbar\");\n    }\n    _getOffset() {\n      const t = this._config.offset;\n      return \"string\" == typeof t ? t.split(\",\").map(t => Number.parseInt(t, 10)) : \"function\" == typeof t ? e => t(e, this._element) : t;\n    }\n    _getPopperConfig() {\n      const t = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: \"preventOverflow\",\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: \"offset\",\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      };\n      return (this._inNavbar || \"static\" === this._config.display) && (F.setDataAttribute(this._menu, \"popper\", \"static\"), t.modifiers = [{\n        name: \"applyStyles\",\n        enabled: !1\n      }]), _objectSpread(_objectSpread({}, t), g(this._config.popperConfig, [t]));\n    }\n    _selectMenuItem(_ref10) {\n      let t = _ref10.key,\n        e = _ref10.target;\n      const i = z.find(\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\", this._menu).filter(t => a(t));\n      i.length && b(i, e, t === Ti, !i.includes(e)).focus();\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = qi.getOrCreateInstance(this, t);\n        if (\"string\" == typeof t) {\n          if (void 0 === e[t]) throw new TypeError(`No method named \"${t}\"`);\n          e[t]();\n        }\n      });\n    }\n    static clearMenus(t) {\n      if (2 === t.button || \"keyup\" === t.type && \"Tab\" !== t.key) return;\n      const e = z.find(Ni);\n      for (const i of e) {\n        const e = qi.getInstance(i);\n        if (!e || !1 === e._config.autoClose) continue;\n        const n = t.composedPath(),\n          s = n.includes(e._menu);\n        if (n.includes(e._element) || \"inside\" === e._config.autoClose && !s || \"outside\" === e._config.autoClose && s) continue;\n        if (e._menu.contains(t.target) && (\"keyup\" === t.type && \"Tab\" === t.key || /input|select|option|textarea|form/i.test(t.target.tagName))) continue;\n        const o = {\n          relatedTarget: e._element\n        };\n        \"click\" === t.type && (o.clickEvent = t), e._completeHide(o);\n      }\n    }\n    static dataApiKeydownHandler(t) {\n      const e = /input|textarea/i.test(t.target.tagName),\n        i = \"Escape\" === t.key,\n        n = [Ei, Ti].includes(t.key);\n      if (!n && !i) return;\n      if (e && !i) return;\n      t.preventDefault();\n      const s = this.matches(Ii) ? this : z.prev(this, Ii)[0] || z.next(this, Ii)[0] || z.findOne(Ii, t.delegateTarget.parentNode),\n        o = qi.getOrCreateInstance(s);\n      if (n) return t.stopPropagation(), o.show(), void o._selectMenuItem(t);\n      o._isShown() && (t.stopPropagation(), o.hide(), s.focus());\n    }\n  }\n  N.on(document, Si, Ii, qi.dataApiKeydownHandler), N.on(document, Si, Pi, qi.dataApiKeydownHandler), N.on(document, Li, qi.clearMenus), N.on(document, Di, qi.clearMenus), N.on(document, Li, Ii, function (t) {\n    t.preventDefault(), qi.getOrCreateInstance(this).toggle();\n  }), m(qi);\n  const Vi = \"backdrop\",\n    Ki = \"show\",\n    Qi = `mousedown.bs.${Vi}`,\n    Xi = {\n      className: \"modal-backdrop\",\n      clickCallback: null,\n      isAnimated: !1,\n      isVisible: !0,\n      rootElement: \"body\"\n    },\n    Yi = {\n      className: \"string\",\n      clickCallback: \"(function|null)\",\n      isAnimated: \"boolean\",\n      isVisible: \"boolean\",\n      rootElement: \"(element|string)\"\n    };\n  class Ui extends H {\n    constructor(t) {\n      super(), this._config = this._getConfig(t), this._isAppended = !1, this._element = null;\n    }\n    static get Default() {\n      return Xi;\n    }\n    static get DefaultType() {\n      return Yi;\n    }\n    static get NAME() {\n      return Vi;\n    }\n    show(t) {\n      if (!this._config.isVisible) return void g(t);\n      this._append();\n      const e = this._getElement();\n      this._config.isAnimated && d(e), e.classList.add(Ki), this._emulateAnimation(() => {\n        g(t);\n      });\n    }\n    hide(t) {\n      this._config.isVisible ? (this._getElement().classList.remove(Ki), this._emulateAnimation(() => {\n        this.dispose(), g(t);\n      })) : g(t);\n    }\n    dispose() {\n      this._isAppended && (N.off(this._element, Qi), this._element.remove(), this._isAppended = !1);\n    }\n    _getElement() {\n      if (!this._element) {\n        const t = document.createElement(\"div\");\n        t.className = this._config.className, this._config.isAnimated && t.classList.add(\"fade\"), this._element = t;\n      }\n      return this._element;\n    }\n    _configAfterMerge(t) {\n      return t.rootElement = r(t.rootElement), t;\n    }\n    _append() {\n      if (this._isAppended) return;\n      const t = this._getElement();\n      this._config.rootElement.append(t), N.on(t, Qi, () => {\n        g(this._config.clickCallback);\n      }), this._isAppended = !0;\n    }\n    _emulateAnimation(t) {\n      _(t, this._getElement(), this._config.isAnimated);\n    }\n  }\n  const Gi = \".bs.focustrap\",\n    Ji = `focusin${Gi}`,\n    Zi = `keydown.tab${Gi}`,\n    tn = \"backward\",\n    en = {\n      autofocus: !0,\n      trapElement: null\n    },\n    nn = {\n      autofocus: \"boolean\",\n      trapElement: \"element\"\n    };\n  class sn extends H {\n    constructor(t) {\n      super(), this._config = this._getConfig(t), this._isActive = !1, this._lastTabNavDirection = null;\n    }\n    static get Default() {\n      return en;\n    }\n    static get DefaultType() {\n      return nn;\n    }\n    static get NAME() {\n      return \"focustrap\";\n    }\n    activate() {\n      this._isActive || (this._config.autofocus && this._config.trapElement.focus(), N.off(document, Gi), N.on(document, Ji, t => this._handleFocusin(t)), N.on(document, Zi, t => this._handleKeydown(t)), this._isActive = !0);\n    }\n    deactivate() {\n      this._isActive && (this._isActive = !1, N.off(document, Gi));\n    }\n    _handleFocusin(t) {\n      const e = this._config.trapElement;\n      if (t.target === document || t.target === e || e.contains(t.target)) return;\n      const i = z.focusableChildren(e);\n      0 === i.length ? e.focus() : this._lastTabNavDirection === tn ? i[i.length - 1].focus() : i[0].focus();\n    }\n    _handleKeydown(t) {\n      \"Tab\" === t.key && (this._lastTabNavDirection = t.shiftKey ? tn : \"forward\");\n    }\n  }\n  const on = \".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",\n    rn = \".sticky-top\",\n    an = \"padding-right\",\n    ln = \"margin-right\";\n  class cn {\n    constructor() {\n      this._element = document.body;\n    }\n    getWidth() {\n      const t = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - t);\n    }\n    hide() {\n      const t = this.getWidth();\n      this._disableOverFlow(), this._setElementAttributes(this._element, an, e => e + t), this._setElementAttributes(on, an, e => e + t), this._setElementAttributes(rn, ln, e => e - t);\n    }\n    reset() {\n      this._resetElementAttributes(this._element, \"overflow\"), this._resetElementAttributes(this._element, an), this._resetElementAttributes(on, an), this._resetElementAttributes(rn, ln);\n    }\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, \"overflow\"), this._element.style.overflow = \"hidden\";\n    }\n    _setElementAttributes(t, e, i) {\n      const n = this.getWidth();\n      this._applyManipulationCallback(t, t => {\n        if (t !== this._element && window.innerWidth > t.clientWidth + n) return;\n        this._saveInitialAttribute(t, e);\n        const s = window.getComputedStyle(t).getPropertyValue(e);\n        t.style.setProperty(e, `${i(Number.parseFloat(s))}px`);\n      });\n    }\n    _saveInitialAttribute(t, e) {\n      const i = t.style.getPropertyValue(e);\n      i && F.setDataAttribute(t, e, i);\n    }\n    _resetElementAttributes(t, e) {\n      this._applyManipulationCallback(t, t => {\n        const i = F.getDataAttribute(t, e);\n        null !== i ? (F.removeDataAttribute(t, e), t.style.setProperty(e, i)) : t.style.removeProperty(e);\n      });\n    }\n    _applyManipulationCallback(t, e) {\n      if (o(t)) e(t);else for (const i of z.find(t, this._element)) e(i);\n    }\n  }\n  const hn = \".bs.modal\",\n    dn = `hide${hn}`,\n    un = `hidePrevented${hn}`,\n    fn = `hidden${hn}`,\n    pn = `show${hn}`,\n    mn = `shown${hn}`,\n    gn = `resize${hn}`,\n    _n = `click.dismiss${hn}`,\n    bn = `mousedown.dismiss${hn}`,\n    vn = `keydown.dismiss${hn}`,\n    yn = `click${hn}.data-api`,\n    wn = \"modal-open\",\n    An = \"show\",\n    En = \"modal-static\",\n    Tn = {\n      backdrop: !0,\n      focus: !0,\n      keyboard: !0\n    },\n    Cn = {\n      backdrop: \"(boolean|string)\",\n      focus: \"boolean\",\n      keyboard: \"boolean\"\n    };\n  class On extends W {\n    constructor(t, e) {\n      super(t, e), this._dialog = z.findOne(\".modal-dialog\", this._element), this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._isShown = !1, this._isTransitioning = !1, this._scrollBar = new cn(), this._addEventListeners();\n    }\n    static get Default() {\n      return Tn;\n    }\n    static get DefaultType() {\n      return Cn;\n    }\n    static get NAME() {\n      return \"modal\";\n    }\n    toggle(t) {\n      return this._isShown ? this.hide() : this.show(t);\n    }\n    show(t) {\n      this._isShown || this._isTransitioning || N.trigger(this._element, pn, {\n        relatedTarget: t\n      }).defaultPrevented || (this._isShown = !0, this._isTransitioning = !0, this._scrollBar.hide(), document.body.classList.add(wn), this._adjustDialog(), this._backdrop.show(() => this._showElement(t)));\n    }\n    hide() {\n      this._isShown && !this._isTransitioning && (N.trigger(this._element, dn).defaultPrevented || (this._isShown = !1, this._isTransitioning = !0, this._focustrap.deactivate(), this._element.classList.remove(An), this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())));\n    }\n    dispose() {\n      N.off(window, hn), N.off(this._dialog, hn), this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose();\n    }\n    handleUpdate() {\n      this._adjustDialog();\n    }\n    _initializeBackDrop() {\n      return new Ui({\n        isVisible: Boolean(this._config.backdrop),\n        isAnimated: this._isAnimated()\n      });\n    }\n    _initializeFocusTrap() {\n      return new sn({\n        trapElement: this._element\n      });\n    }\n    _showElement(t) {\n      document.body.contains(this._element) || document.body.append(this._element), this._element.style.display = \"block\", this._element.removeAttribute(\"aria-hidden\"), this._element.setAttribute(\"aria-modal\", !0), this._element.setAttribute(\"role\", \"dialog\"), this._element.scrollTop = 0;\n      const e = z.findOne(\".modal-body\", this._dialog);\n      e && (e.scrollTop = 0), d(this._element), this._element.classList.add(An), this._queueCallback(() => {\n        this._config.focus && this._focustrap.activate(), this._isTransitioning = !1, N.trigger(this._element, mn, {\n          relatedTarget: t\n        });\n      }, this._dialog, this._isAnimated());\n    }\n    _addEventListeners() {\n      N.on(this._element, vn, t => {\n        \"Escape\" === t.key && (this._config.keyboard ? this.hide() : this._triggerBackdropTransition());\n      }), N.on(window, gn, () => {\n        this._isShown && !this._isTransitioning && this._adjustDialog();\n      }), N.on(this._element, bn, t => {\n        N.one(this._element, _n, e => {\n          this._element === t.target && this._element === e.target && (\"static\" !== this._config.backdrop ? this._config.backdrop && this.hide() : this._triggerBackdropTransition());\n        });\n      });\n    }\n    _hideModal() {\n      this._element.style.display = \"none\", this._element.setAttribute(\"aria-hidden\", !0), this._element.removeAttribute(\"aria-modal\"), this._element.removeAttribute(\"role\"), this._isTransitioning = !1, this._backdrop.hide(() => {\n        document.body.classList.remove(wn), this._resetAdjustments(), this._scrollBar.reset(), N.trigger(this._element, fn);\n      });\n    }\n    _isAnimated() {\n      return this._element.classList.contains(\"fade\");\n    }\n    _triggerBackdropTransition() {\n      if (N.trigger(this._element, un).defaultPrevented) return;\n      const t = this._element.scrollHeight > document.documentElement.clientHeight,\n        e = this._element.style.overflowY;\n      \"hidden\" === e || this._element.classList.contains(En) || (t || (this._element.style.overflowY = \"hidden\"), this._element.classList.add(En), this._queueCallback(() => {\n        this._element.classList.remove(En), this._queueCallback(() => {\n          this._element.style.overflowY = e;\n        }, this._dialog);\n      }, this._dialog), this._element.focus());\n    }\n    _adjustDialog() {\n      const t = this._element.scrollHeight > document.documentElement.clientHeight,\n        e = this._scrollBar.getWidth(),\n        i = e > 0;\n      if (i && !t) {\n        const t = p() ? \"paddingLeft\" : \"paddingRight\";\n        this._element.style[t] = `${e}px`;\n      }\n      if (!i && t) {\n        const t = p() ? \"paddingRight\" : \"paddingLeft\";\n        this._element.style[t] = `${e}px`;\n      }\n    }\n    _resetAdjustments() {\n      this._element.style.paddingLeft = \"\", this._element.style.paddingRight = \"\";\n    }\n    static jQueryInterface(t, e) {\n      return this.each(function () {\n        const i = On.getOrCreateInstance(this, t);\n        if (\"string\" == typeof t) {\n          if (void 0 === i[t]) throw new TypeError(`No method named \"${t}\"`);\n          i[t](e);\n        }\n      });\n    }\n  }\n  N.on(document, yn, '[data-bs-toggle=\"modal\"]', function (t) {\n    const e = z.getElementFromSelector(this);\n    [\"A\", \"AREA\"].includes(this.tagName) && t.preventDefault(), N.one(e, pn, t => {\n      t.defaultPrevented || N.one(e, fn, () => {\n        a(this) && this.focus();\n      });\n    });\n    const i = z.findOne(\".modal.show\");\n    i && On.getInstance(i).hide(), On.getOrCreateInstance(e).toggle(this);\n  }), R(On), m(On);\n  const xn = \".bs.offcanvas\",\n    kn = \".data-api\",\n    Ln = `load${xn}${kn}`,\n    Sn = \"show\",\n    Dn = \"showing\",\n    $n = \"hiding\",\n    In = \".offcanvas.show\",\n    Nn = `show${xn}`,\n    Pn = `shown${xn}`,\n    jn = `hide${xn}`,\n    Mn = `hidePrevented${xn}`,\n    Fn = `hidden${xn}`,\n    Hn = `resize${xn}`,\n    Wn = `click${xn}${kn}`,\n    Bn = `keydown.dismiss${xn}`,\n    zn = {\n      backdrop: !0,\n      keyboard: !0,\n      scroll: !1\n    },\n    Rn = {\n      backdrop: \"(boolean|string)\",\n      keyboard: \"boolean\",\n      scroll: \"boolean\"\n    };\n  class qn extends W {\n    constructor(t, e) {\n      super(t, e), this._isShown = !1, this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._addEventListeners();\n    }\n    static get Default() {\n      return zn;\n    }\n    static get DefaultType() {\n      return Rn;\n    }\n    static get NAME() {\n      return \"offcanvas\";\n    }\n    toggle(t) {\n      return this._isShown ? this.hide() : this.show(t);\n    }\n    show(t) {\n      this._isShown || N.trigger(this._element, Nn, {\n        relatedTarget: t\n      }).defaultPrevented || (this._isShown = !0, this._backdrop.show(), this._config.scroll || new cn().hide(), this._element.setAttribute(\"aria-modal\", !0), this._element.setAttribute(\"role\", \"dialog\"), this._element.classList.add(Dn), this._queueCallback(() => {\n        this._config.scroll && !this._config.backdrop || this._focustrap.activate(), this._element.classList.add(Sn), this._element.classList.remove(Dn), N.trigger(this._element, Pn, {\n          relatedTarget: t\n        });\n      }, this._element, !0));\n    }\n    hide() {\n      this._isShown && (N.trigger(this._element, jn).defaultPrevented || (this._focustrap.deactivate(), this._element.blur(), this._isShown = !1, this._element.classList.add($n), this._backdrop.hide(), this._queueCallback(() => {\n        this._element.classList.remove(Sn, $n), this._element.removeAttribute(\"aria-modal\"), this._element.removeAttribute(\"role\"), this._config.scroll || new cn().reset(), N.trigger(this._element, Fn);\n      }, this._element, !0)));\n    }\n    dispose() {\n      this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose();\n    }\n    _initializeBackDrop() {\n      const t = Boolean(this._config.backdrop);\n      return new Ui({\n        className: \"offcanvas-backdrop\",\n        isVisible: t,\n        isAnimated: !0,\n        rootElement: this._element.parentNode,\n        clickCallback: t ? () => {\n          \"static\" !== this._config.backdrop ? this.hide() : N.trigger(this._element, Mn);\n        } : null\n      });\n    }\n    _initializeFocusTrap() {\n      return new sn({\n        trapElement: this._element\n      });\n    }\n    _addEventListeners() {\n      N.on(this._element, Bn, t => {\n        \"Escape\" === t.key && (this._config.keyboard ? this.hide() : N.trigger(this._element, Mn));\n      });\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = qn.getOrCreateInstance(this, t);\n        if (\"string\" == typeof t) {\n          if (void 0 === e[t] || t.startsWith(\"_\") || \"constructor\" === t) throw new TypeError(`No method named \"${t}\"`);\n          e[t](this);\n        }\n      });\n    }\n  }\n  N.on(document, Wn, '[data-bs-toggle=\"offcanvas\"]', function (t) {\n    const e = z.getElementFromSelector(this);\n    if ([\"A\", \"AREA\"].includes(this.tagName) && t.preventDefault(), l(this)) return;\n    N.one(e, Fn, () => {\n      a(this) && this.focus();\n    });\n    const i = z.findOne(In);\n    i && i !== e && qn.getInstance(i).hide(), qn.getOrCreateInstance(e).toggle(this);\n  }), N.on(window, Ln, () => {\n    for (const t of z.find(In)) qn.getOrCreateInstance(t).show();\n  }), N.on(window, Hn, () => {\n    for (const t of z.find(\"[aria-modal][class*=show][class*=offcanvas-]\")) \"fixed\" !== getComputedStyle(t).position && qn.getOrCreateInstance(t).hide();\n  }), R(qn), m(qn);\n  const Vn = {\n      \"*\": [\"class\", \"dir\", \"id\", \"lang\", \"role\", /^aria-[\\w-]*$/i],\n      a: [\"target\", \"href\", \"title\", \"rel\"],\n      area: [],\n      b: [],\n      br: [],\n      col: [],\n      code: [],\n      dd: [],\n      div: [],\n      dl: [],\n      dt: [],\n      em: [],\n      hr: [],\n      h1: [],\n      h2: [],\n      h3: [],\n      h4: [],\n      h5: [],\n      h6: [],\n      i: [],\n      img: [\"src\", \"srcset\", \"alt\", \"title\", \"width\", \"height\"],\n      li: [],\n      ol: [],\n      p: [],\n      pre: [],\n      s: [],\n      small: [],\n      span: [],\n      sub: [],\n      sup: [],\n      strong: [],\n      u: [],\n      ul: []\n    },\n    Kn = new Set([\"background\", \"cite\", \"href\", \"itemtype\", \"longdesc\", \"poster\", \"src\", \"xlink:href\"]),\n    Qn = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,\n    Xn = (t, e) => {\n      const i = t.nodeName.toLowerCase();\n      return e.includes(i) ? !Kn.has(i) || Boolean(Qn.test(t.nodeValue)) : e.filter(t => t instanceof RegExp).some(t => t.test(i));\n    },\n    Yn = {\n      allowList: Vn,\n      content: {},\n      extraClass: \"\",\n      html: !1,\n      sanitize: !0,\n      sanitizeFn: null,\n      template: \"<div></div>\"\n    },\n    Un = {\n      allowList: \"object\",\n      content: \"object\",\n      extraClass: \"(string|function)\",\n      html: \"boolean\",\n      sanitize: \"boolean\",\n      sanitizeFn: \"(null|function)\",\n      template: \"string\"\n    },\n    Gn = {\n      entry: \"(string|element|function|null)\",\n      selector: \"(string|element)\"\n    };\n  class Jn extends H {\n    constructor(t) {\n      super(), this._config = this._getConfig(t);\n    }\n    static get Default() {\n      return Yn;\n    }\n    static get DefaultType() {\n      return Un;\n    }\n    static get NAME() {\n      return \"TemplateFactory\";\n    }\n    getContent() {\n      return Object.values(this._config.content).map(t => this._resolvePossibleFunction(t)).filter(Boolean);\n    }\n    hasContent() {\n      return this.getContent().length > 0;\n    }\n    changeContent(t) {\n      return this._checkContent(t), this._config.content = _objectSpread(_objectSpread({}, this._config.content), t), this;\n    }\n    toHtml() {\n      const t = document.createElement(\"div\");\n      t.innerHTML = this._maybeSanitize(this._config.template);\n      for (const _ref11 of Object.entries(this._config.content)) {\n        var _ref12 = _slicedToArray(_ref11, 2);\n        const e = _ref12[0];\n        const i = _ref12[1];\n        this._setContent(t, i, e);\n      }\n      const e = t.children[0],\n        i = this._resolvePossibleFunction(this._config.extraClass);\n      return i && e.classList.add(...i.split(\" \")), e;\n    }\n    _typeCheckConfig(t) {\n      super._typeCheckConfig(t), this._checkContent(t.content);\n    }\n    _checkContent(t) {\n      for (const _ref13 of Object.entries(t)) {\n        var _ref14 = _slicedToArray(_ref13, 2);\n        const e = _ref14[0];\n        const i = _ref14[1];\n        super._typeCheckConfig({\n          selector: e,\n          entry: i\n        }, Gn);\n      }\n    }\n    _setContent(t, e, i) {\n      const n = z.findOne(i, t);\n      n && ((e = this._resolvePossibleFunction(e)) ? o(e) ? this._putElementInTemplate(r(e), n) : this._config.html ? n.innerHTML = this._maybeSanitize(e) : n.textContent = e : n.remove());\n    }\n    _maybeSanitize(t) {\n      return this._config.sanitize ? function (t, e, i) {\n        if (!t.length) return t;\n        if (i && \"function\" == typeof i) return i(t);\n        const n = new window.DOMParser().parseFromString(t, \"text/html\"),\n          s = [].concat(...n.body.querySelectorAll(\"*\"));\n        for (const t of s) {\n          const i = t.nodeName.toLowerCase();\n          if (!Object.keys(e).includes(i)) {\n            t.remove();\n            continue;\n          }\n          const n = [].concat(...t.attributes),\n            s = [].concat(e[\"*\"] || [], e[i] || []);\n          for (const e of n) Xn(e, s) || t.removeAttribute(e.nodeName);\n        }\n        return n.body.innerHTML;\n      }(t, this._config.allowList, this._config.sanitizeFn) : t;\n    }\n    _resolvePossibleFunction(t) {\n      return g(t, [this]);\n    }\n    _putElementInTemplate(t, e) {\n      if (this._config.html) return e.innerHTML = \"\", void e.append(t);\n      e.textContent = t.textContent;\n    }\n  }\n  const Zn = new Set([\"sanitize\", \"allowList\", \"sanitizeFn\"]),\n    ts = \"fade\",\n    es = \"show\",\n    is = \".modal\",\n    ns = \"hide.bs.modal\",\n    ss = \"hover\",\n    os = \"focus\",\n    rs = {\n      AUTO: \"auto\",\n      TOP: \"top\",\n      RIGHT: p() ? \"left\" : \"right\",\n      BOTTOM: \"bottom\",\n      LEFT: p() ? \"right\" : \"left\"\n    },\n    as = {\n      allowList: Vn,\n      animation: !0,\n      boundary: \"clippingParents\",\n      container: !1,\n      customClass: \"\",\n      delay: 0,\n      fallbackPlacements: [\"top\", \"right\", \"bottom\", \"left\"],\n      html: !1,\n      offset: [0, 6],\n      placement: \"top\",\n      popperConfig: null,\n      sanitize: !0,\n      sanitizeFn: null,\n      selector: !1,\n      template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n      title: \"\",\n      trigger: \"hover focus\"\n    },\n    ls = {\n      allowList: \"object\",\n      animation: \"boolean\",\n      boundary: \"(string|element)\",\n      container: \"(string|element|boolean)\",\n      customClass: \"(string|function)\",\n      delay: \"(number|object)\",\n      fallbackPlacements: \"array\",\n      html: \"boolean\",\n      offset: \"(array|string|function)\",\n      placement: \"(string|function)\",\n      popperConfig: \"(null|object|function)\",\n      sanitize: \"boolean\",\n      sanitizeFn: \"(null|function)\",\n      selector: \"(string|boolean)\",\n      template: \"string\",\n      title: \"(string|element|function)\",\n      trigger: \"string\"\n    };\n  class cs extends W {\n    constructor(t, e) {\n      if (void 0 === vi) throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org)\");\n      super(t, e), this._isEnabled = !0, this._timeout = 0, this._isHovered = null, this._activeTrigger = {}, this._popper = null, this._templateFactory = null, this._newContent = null, this.tip = null, this._setListeners(), this._config.selector || this._fixTitle();\n    }\n    static get Default() {\n      return as;\n    }\n    static get DefaultType() {\n      return ls;\n    }\n    static get NAME() {\n      return \"tooltip\";\n    }\n    enable() {\n      this._isEnabled = !0;\n    }\n    disable() {\n      this._isEnabled = !1;\n    }\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n    toggle() {\n      this._isEnabled && (this._activeTrigger.click = !this._activeTrigger.click, this._isShown() ? this._leave() : this._enter());\n    }\n    dispose() {\n      clearTimeout(this._timeout), N.off(this._element.closest(is), ns, this._hideModalHandler), this._element.getAttribute(\"data-bs-original-title\") && this._element.setAttribute(\"title\", this._element.getAttribute(\"data-bs-original-title\")), this._disposePopper(), super.dispose();\n    }\n    show() {\n      if (\"none\" === this._element.style.display) throw new Error(\"Please use show on visible elements\");\n      if (!this._isWithContent() || !this._isEnabled) return;\n      const t = N.trigger(this._element, this.constructor.eventName(\"show\")),\n        e = (c(this._element) || this._element.ownerDocument.documentElement).contains(this._element);\n      if (t.defaultPrevented || !e) return;\n      this._disposePopper();\n      const i = this._getTipElement();\n      this._element.setAttribute(\"aria-describedby\", i.getAttribute(\"id\"));\n      const n = this._config.container;\n      if (this._element.ownerDocument.documentElement.contains(this.tip) || (n.append(i), N.trigger(this._element, this.constructor.eventName(\"inserted\"))), this._popper = this._createPopper(i), i.classList.add(es), \"ontouchstart\" in document.documentElement) for (const t of [].concat(...document.body.children)) N.on(t, \"mouseover\", h);\n      this._queueCallback(() => {\n        N.trigger(this._element, this.constructor.eventName(\"shown\")), !1 === this._isHovered && this._leave(), this._isHovered = !1;\n      }, this.tip, this._isAnimated());\n    }\n    hide() {\n      if (this._isShown() && !N.trigger(this._element, this.constructor.eventName(\"hide\")).defaultPrevented) {\n        if (this._getTipElement().classList.remove(es), \"ontouchstart\" in document.documentElement) for (const t of [].concat(...document.body.children)) N.off(t, \"mouseover\", h);\n        this._activeTrigger.click = !1, this._activeTrigger[os] = !1, this._activeTrigger[ss] = !1, this._isHovered = null, this._queueCallback(() => {\n          this._isWithActiveTrigger() || (this._isHovered || this._disposePopper(), this._element.removeAttribute(\"aria-describedby\"), N.trigger(this._element, this.constructor.eventName(\"hidden\")));\n        }, this.tip, this._isAnimated());\n      }\n    }\n    update() {\n      this._popper && this._popper.update();\n    }\n    _isWithContent() {\n      return Boolean(this._getTitle());\n    }\n    _getTipElement() {\n      return this.tip || (this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())), this.tip;\n    }\n    _createTipElement(t) {\n      const e = this._getTemplateFactory(t).toHtml();\n      if (!e) return null;\n      e.classList.remove(ts, es), e.classList.add(`bs-${this.constructor.NAME}-auto`);\n      const i = (t => {\n        do {\n          t += Math.floor(1e6 * Math.random());\n        } while (document.getElementById(t));\n        return t;\n      })(this.constructor.NAME).toString();\n      return e.setAttribute(\"id\", i), this._isAnimated() && e.classList.add(ts), e;\n    }\n    setContent(t) {\n      this._newContent = t, this._isShown() && (this._disposePopper(), this.show());\n    }\n    _getTemplateFactory(t) {\n      return this._templateFactory ? this._templateFactory.changeContent(t) : this._templateFactory = new Jn(_objectSpread(_objectSpread({}, this._config), {}, {\n        content: t,\n        extraClass: this._resolvePossibleFunction(this._config.customClass)\n      })), this._templateFactory;\n    }\n    _getContentForTemplate() {\n      return {\n        \".tooltip-inner\": this._getTitle()\n      };\n    }\n    _getTitle() {\n      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute(\"data-bs-original-title\");\n    }\n    _initializeOnDelegatedTarget(t) {\n      return this.constructor.getOrCreateInstance(t.delegateTarget, this._getDelegateConfig());\n    }\n    _isAnimated() {\n      return this._config.animation || this.tip && this.tip.classList.contains(ts);\n    }\n    _isShown() {\n      return this.tip && this.tip.classList.contains(es);\n    }\n    _createPopper(t) {\n      const e = g(this._config.placement, [this, t, this._element]),\n        i = rs[e.toUpperCase()];\n      return bi(this._element, t, this._getPopperConfig(i));\n    }\n    _getOffset() {\n      const t = this._config.offset;\n      return \"string\" == typeof t ? t.split(\",\").map(t => Number.parseInt(t, 10)) : \"function\" == typeof t ? e => t(e, this._element) : t;\n    }\n    _resolvePossibleFunction(t) {\n      return g(t, [this._element]);\n    }\n    _getPopperConfig(t) {\n      const e = {\n        placement: t,\n        modifiers: [{\n          name: \"flip\",\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: \"offset\",\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: \"preventOverflow\",\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: \"arrow\",\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: \"preSetPlacement\",\n          enabled: !0,\n          phase: \"beforeMain\",\n          fn: t => {\n            this._getTipElement().setAttribute(\"data-popper-placement\", t.state.placement);\n          }\n        }]\n      };\n      return _objectSpread(_objectSpread({}, e), g(this._config.popperConfig, [e]));\n    }\n    _setListeners() {\n      const t = this._config.trigger.split(\" \");\n      for (const e of t) if (\"click\" === e) N.on(this._element, this.constructor.eventName(\"click\"), this._config.selector, t => {\n        this._initializeOnDelegatedTarget(t).toggle();\n      });else if (\"manual\" !== e) {\n        const t = e === ss ? this.constructor.eventName(\"mouseenter\") : this.constructor.eventName(\"focusin\"),\n          i = e === ss ? this.constructor.eventName(\"mouseleave\") : this.constructor.eventName(\"focusout\");\n        N.on(this._element, t, this._config.selector, t => {\n          const e = this._initializeOnDelegatedTarget(t);\n          e._activeTrigger[\"focusin\" === t.type ? os : ss] = !0, e._enter();\n        }), N.on(this._element, i, this._config.selector, t => {\n          const e = this._initializeOnDelegatedTarget(t);\n          e._activeTrigger[\"focusout\" === t.type ? os : ss] = e._element.contains(t.relatedTarget), e._leave();\n        });\n      }\n      this._hideModalHandler = () => {\n        this._element && this.hide();\n      }, N.on(this._element.closest(is), ns, this._hideModalHandler);\n    }\n    _fixTitle() {\n      const t = this._element.getAttribute(\"title\");\n      t && (this._element.getAttribute(\"aria-label\") || this._element.textContent.trim() || this._element.setAttribute(\"aria-label\", t), this._element.setAttribute(\"data-bs-original-title\", t), this._element.removeAttribute(\"title\"));\n    }\n    _enter() {\n      this._isShown() || this._isHovered ? this._isHovered = !0 : (this._isHovered = !0, this._setTimeout(() => {\n        this._isHovered && this.show();\n      }, this._config.delay.show));\n    }\n    _leave() {\n      this._isWithActiveTrigger() || (this._isHovered = !1, this._setTimeout(() => {\n        this._isHovered || this.hide();\n      }, this._config.delay.hide));\n    }\n    _setTimeout(t, e) {\n      clearTimeout(this._timeout), this._timeout = setTimeout(t, e);\n    }\n    _isWithActiveTrigger() {\n      return Object.values(this._activeTrigger).includes(!0);\n    }\n    _getConfig(t) {\n      const e = F.getDataAttributes(this._element);\n      for (const t of Object.keys(e)) Zn.has(t) && delete e[t];\n      return t = _objectSpread(_objectSpread({}, e), \"object\" == typeof t && t ? t : {}), t = this._mergeConfigObj(t), t = this._configAfterMerge(t), this._typeCheckConfig(t), t;\n    }\n    _configAfterMerge(t) {\n      return t.container = !1 === t.container ? document.body : r(t.container), \"number\" == typeof t.delay && (t.delay = {\n        show: t.delay,\n        hide: t.delay\n      }), \"number\" == typeof t.title && (t.title = t.title.toString()), \"number\" == typeof t.content && (t.content = t.content.toString()), t;\n    }\n    _getDelegateConfig() {\n      const t = {};\n      for (const _ref15 of Object.entries(this._config)) {\n        var _ref16 = _slicedToArray(_ref15, 2);\n        const e = _ref16[0];\n        const i = _ref16[1];\n        this.constructor.Default[e] !== i && (t[e] = i);\n      }\n      return t.selector = !1, t.trigger = \"manual\", t;\n    }\n    _disposePopper() {\n      this._popper && (this._popper.destroy(), this._popper = null), this.tip && (this.tip.remove(), this.tip = null);\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = cs.getOrCreateInstance(this, t);\n        if (\"string\" == typeof t) {\n          if (void 0 === e[t]) throw new TypeError(`No method named \"${t}\"`);\n          e[t]();\n        }\n      });\n    }\n  }\n  m(cs);\n  const hs = _objectSpread(_objectSpread({}, cs.Default), {}, {\n      content: \"\",\n      offset: [0, 8],\n      placement: \"right\",\n      template: '<div class=\"popover\" role=\"tooltip\"><div class=\"popover-arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>',\n      trigger: \"click\"\n    }),\n    ds = _objectSpread(_objectSpread({}, cs.DefaultType), {}, {\n      content: \"(null|string|element|function)\"\n    });\n  class us extends cs {\n    static get Default() {\n      return hs;\n    }\n    static get DefaultType() {\n      return ds;\n    }\n    static get NAME() {\n      return \"popover\";\n    }\n    _isWithContent() {\n      return this._getTitle() || this._getContent();\n    }\n    _getContentForTemplate() {\n      return {\n        \".popover-header\": this._getTitle(),\n        \".popover-body\": this._getContent()\n      };\n    }\n    _getContent() {\n      return this._resolvePossibleFunction(this._config.content);\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = us.getOrCreateInstance(this, t);\n        if (\"string\" == typeof t) {\n          if (void 0 === e[t]) throw new TypeError(`No method named \"${t}\"`);\n          e[t]();\n        }\n      });\n    }\n  }\n  m(us);\n  const fs = \".bs.scrollspy\",\n    ps = `activate${fs}`,\n    ms = `click${fs}`,\n    gs = `load${fs}.data-api`,\n    _s = \"active\",\n    bs = \"[href]\",\n    vs = \".nav-link\",\n    ys = `${vs}, .nav-item > ${vs}, .list-group-item`,\n    ws = {\n      offset: null,\n      rootMargin: \"0px 0px -25%\",\n      smoothScroll: !1,\n      target: null,\n      threshold: [.1, .5, 1]\n    },\n    As = {\n      offset: \"(number|null)\",\n      rootMargin: \"string\",\n      smoothScroll: \"boolean\",\n      target: \"element\",\n      threshold: \"array\"\n    };\n  class Es extends W {\n    constructor(t, e) {\n      super(t, e), this._targetLinks = new Map(), this._observableSections = new Map(), this._rootElement = \"visible\" === getComputedStyle(this._element).overflowY ? null : this._element, this._activeTarget = null, this._observer = null, this._previousScrollData = {\n        visibleEntryTop: 0,\n        parentScrollTop: 0\n      }, this.refresh();\n    }\n    static get Default() {\n      return ws;\n    }\n    static get DefaultType() {\n      return As;\n    }\n    static get NAME() {\n      return \"scrollspy\";\n    }\n    refresh() {\n      this._initializeTargetsAndObservables(), this._maybeEnableSmoothScroll(), this._observer ? this._observer.disconnect() : this._observer = this._getNewObserver();\n      for (const t of this._observableSections.values()) this._observer.observe(t);\n    }\n    dispose() {\n      this._observer.disconnect(), super.dispose();\n    }\n    _configAfterMerge(t) {\n      return t.target = r(t.target) || document.body, t.rootMargin = t.offset ? `${t.offset}px 0px -30%` : t.rootMargin, \"string\" == typeof t.threshold && (t.threshold = t.threshold.split(\",\").map(t => Number.parseFloat(t))), t;\n    }\n    _maybeEnableSmoothScroll() {\n      this._config.smoothScroll && (N.off(this._config.target, ms), N.on(this._config.target, ms, bs, t => {\n        const e = this._observableSections.get(t.target.hash);\n        if (e) {\n          t.preventDefault();\n          const i = this._rootElement || window,\n            n = e.offsetTop - this._element.offsetTop;\n          if (i.scrollTo) return void i.scrollTo({\n            top: n,\n            behavior: \"smooth\"\n          });\n          i.scrollTop = n;\n        }\n      }));\n    }\n    _getNewObserver() {\n      const t = {\n        root: this._rootElement,\n        threshold: this._config.threshold,\n        rootMargin: this._config.rootMargin\n      };\n      return new IntersectionObserver(t => this._observerCallback(t), t);\n    }\n    _observerCallback(t) {\n      const e = t => this._targetLinks.get(`#${t.target.id}`),\n        i = t => {\n          this._previousScrollData.visibleEntryTop = t.target.offsetTop, this._process(e(t));\n        },\n        n = (this._rootElement || document.documentElement).scrollTop,\n        s = n >= this._previousScrollData.parentScrollTop;\n      this._previousScrollData.parentScrollTop = n;\n      for (const o of t) {\n        if (!o.isIntersecting) {\n          this._activeTarget = null, this._clearActiveClass(e(o));\n          continue;\n        }\n        const t = o.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n        if (s && t) {\n          if (i(o), !n) return;\n        } else s || t || i(o);\n      }\n    }\n    _initializeTargetsAndObservables() {\n      this._targetLinks = new Map(), this._observableSections = new Map();\n      const t = z.find(bs, this._config.target);\n      for (const e of t) {\n        if (!e.hash || l(e)) continue;\n        const t = z.findOne(decodeURI(e.hash), this._element);\n        a(t) && (this._targetLinks.set(decodeURI(e.hash), e), this._observableSections.set(e.hash, t));\n      }\n    }\n    _process(t) {\n      this._activeTarget !== t && (this._clearActiveClass(this._config.target), this._activeTarget = t, t.classList.add(_s), this._activateParents(t), N.trigger(this._element, ps, {\n        relatedTarget: t\n      }));\n    }\n    _activateParents(t) {\n      if (t.classList.contains(\"dropdown-item\")) z.findOne(\".dropdown-toggle\", t.closest(\".dropdown\")).classList.add(_s);else for (const e of z.parents(t, \".nav, .list-group\")) for (const t of z.prev(e, ys)) t.classList.add(_s);\n    }\n    _clearActiveClass(t) {\n      t.classList.remove(_s);\n      const e = z.find(`${bs}.${_s}`, t);\n      for (const t of e) t.classList.remove(_s);\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = Es.getOrCreateInstance(this, t);\n        if (\"string\" == typeof t) {\n          if (void 0 === e[t] || t.startsWith(\"_\") || \"constructor\" === t) throw new TypeError(`No method named \"${t}\"`);\n          e[t]();\n        }\n      });\n    }\n  }\n  N.on(window, gs, () => {\n    for (const t of z.find('[data-bs-spy=\"scroll\"]')) Es.getOrCreateInstance(t);\n  }), m(Es);\n  const Ts = \".bs.tab\",\n    Cs = `hide${Ts}`,\n    Os = `hidden${Ts}`,\n    xs = `show${Ts}`,\n    ks = `shown${Ts}`,\n    Ls = `click${Ts}`,\n    Ss = `keydown${Ts}`,\n    Ds = `load${Ts}`,\n    $s = \"ArrowLeft\",\n    Is = \"ArrowRight\",\n    Ns = \"ArrowUp\",\n    Ps = \"ArrowDown\",\n    js = \"Home\",\n    Ms = \"End\",\n    Fs = \"active\",\n    Hs = \"fade\",\n    Ws = \"show\",\n    Bs = \".dropdown-toggle\",\n    zs = `:not(${Bs})`,\n    Rs = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]',\n    qs = `.nav-link${zs}, .list-group-item${zs}, [role=\"tab\"]${zs}, ${Rs}`,\n    Vs = `.${Fs}[data-bs-toggle=\"tab\"], .${Fs}[data-bs-toggle=\"pill\"], .${Fs}[data-bs-toggle=\"list\"]`;\n  class Ks extends W {\n    constructor(t) {\n      super(t), this._parent = this._element.closest('.list-group, .nav, [role=\"tablist\"]'), this._parent && (this._setInitialAttributes(this._parent, this._getChildren()), N.on(this._element, Ss, t => this._keydown(t)));\n    }\n    static get NAME() {\n      return \"tab\";\n    }\n    show() {\n      const t = this._element;\n      if (this._elemIsActive(t)) return;\n      const e = this._getActiveElem(),\n        i = e ? N.trigger(e, Cs, {\n          relatedTarget: t\n        }) : null;\n      N.trigger(t, xs, {\n        relatedTarget: e\n      }).defaultPrevented || i && i.defaultPrevented || (this._deactivate(e, t), this._activate(t, e));\n    }\n    _activate(t, e) {\n      t && (t.classList.add(Fs), this._activate(z.getElementFromSelector(t)), this._queueCallback(() => {\n        \"tab\" === t.getAttribute(\"role\") ? (t.removeAttribute(\"tabindex\"), t.setAttribute(\"aria-selected\", !0), this._toggleDropDown(t, !0), N.trigger(t, ks, {\n          relatedTarget: e\n        })) : t.classList.add(Ws);\n      }, t, t.classList.contains(Hs)));\n    }\n    _deactivate(t, e) {\n      t && (t.classList.remove(Fs), t.blur(), this._deactivate(z.getElementFromSelector(t)), this._queueCallback(() => {\n        \"tab\" === t.getAttribute(\"role\") ? (t.setAttribute(\"aria-selected\", !1), t.setAttribute(\"tabindex\", \"-1\"), this._toggleDropDown(t, !1), N.trigger(t, Os, {\n          relatedTarget: e\n        })) : t.classList.remove(Ws);\n      }, t, t.classList.contains(Hs)));\n    }\n    _keydown(t) {\n      if (![$s, Is, Ns, Ps, js, Ms].includes(t.key)) return;\n      t.stopPropagation(), t.preventDefault();\n      const e = this._getChildren().filter(t => !l(t));\n      let i;\n      if ([js, Ms].includes(t.key)) i = e[t.key === js ? 0 : e.length - 1];else {\n        const n = [Is, Ps].includes(t.key);\n        i = b(e, t.target, n, !0);\n      }\n      i && (i.focus({\n        preventScroll: !0\n      }), Ks.getOrCreateInstance(i).show());\n    }\n    _getChildren() {\n      return z.find(qs, this._parent);\n    }\n    _getActiveElem() {\n      return this._getChildren().find(t => this._elemIsActive(t)) || null;\n    }\n    _setInitialAttributes(t, e) {\n      this._setAttributeIfNotExists(t, \"role\", \"tablist\");\n      for (const t of e) this._setInitialAttributesOnChild(t);\n    }\n    _setInitialAttributesOnChild(t) {\n      t = this._getInnerElement(t);\n      const e = this._elemIsActive(t),\n        i = this._getOuterElement(t);\n      t.setAttribute(\"aria-selected\", e), i !== t && this._setAttributeIfNotExists(i, \"role\", \"presentation\"), e || t.setAttribute(\"tabindex\", \"-1\"), this._setAttributeIfNotExists(t, \"role\", \"tab\"), this._setInitialAttributesOnTargetPanel(t);\n    }\n    _setInitialAttributesOnTargetPanel(t) {\n      const e = z.getElementFromSelector(t);\n      e && (this._setAttributeIfNotExists(e, \"role\", \"tabpanel\"), t.id && this._setAttributeIfNotExists(e, \"aria-labelledby\", `${t.id}`));\n    }\n    _toggleDropDown(t, e) {\n      const i = this._getOuterElement(t);\n      if (!i.classList.contains(\"dropdown\")) return;\n      const n = (t, n) => {\n        const s = z.findOne(t, i);\n        s && s.classList.toggle(n, e);\n      };\n      n(Bs, Fs), n(\".dropdown-menu\", Ws), i.setAttribute(\"aria-expanded\", e);\n    }\n    _setAttributeIfNotExists(t, e, i) {\n      t.hasAttribute(e) || t.setAttribute(e, i);\n    }\n    _elemIsActive(t) {\n      return t.classList.contains(Fs);\n    }\n    _getInnerElement(t) {\n      return t.matches(qs) ? t : z.findOne(qs, t);\n    }\n    _getOuterElement(t) {\n      return t.closest(\".nav-item, .list-group-item\") || t;\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = Ks.getOrCreateInstance(this);\n        if (\"string\" == typeof t) {\n          if (void 0 === e[t] || t.startsWith(\"_\") || \"constructor\" === t) throw new TypeError(`No method named \"${t}\"`);\n          e[t]();\n        }\n      });\n    }\n  }\n  N.on(document, Ls, Rs, function (t) {\n    [\"A\", \"AREA\"].includes(this.tagName) && t.preventDefault(), l(this) || Ks.getOrCreateInstance(this).show();\n  }), N.on(window, Ds, () => {\n    for (const t of z.find(Vs)) Ks.getOrCreateInstance(t);\n  }), m(Ks);\n  const Qs = \".bs.toast\",\n    Xs = `mouseover${Qs}`,\n    Ys = `mouseout${Qs}`,\n    Us = `focusin${Qs}`,\n    Gs = `focusout${Qs}`,\n    Js = `hide${Qs}`,\n    Zs = `hidden${Qs}`,\n    to = `show${Qs}`,\n    eo = `shown${Qs}`,\n    io = \"hide\",\n    no = \"show\",\n    so = \"showing\",\n    oo = {\n      animation: \"boolean\",\n      autohide: \"boolean\",\n      delay: \"number\"\n    },\n    ro = {\n      animation: !0,\n      autohide: !0,\n      delay: 5e3\n    };\n  class ao extends W {\n    constructor(t, e) {\n      super(t, e), this._timeout = null, this._hasMouseInteraction = !1, this._hasKeyboardInteraction = !1, this._setListeners();\n    }\n    static get Default() {\n      return ro;\n    }\n    static get DefaultType() {\n      return oo;\n    }\n    static get NAME() {\n      return \"toast\";\n    }\n    show() {\n      N.trigger(this._element, to).defaultPrevented || (this._clearTimeout(), this._config.animation && this._element.classList.add(\"fade\"), this._element.classList.remove(io), d(this._element), this._element.classList.add(no, so), this._queueCallback(() => {\n        this._element.classList.remove(so), N.trigger(this._element, eo), this._maybeScheduleHide();\n      }, this._element, this._config.animation));\n    }\n    hide() {\n      this.isShown() && (N.trigger(this._element, Js).defaultPrevented || (this._element.classList.add(so), this._queueCallback(() => {\n        this._element.classList.add(io), this._element.classList.remove(so, no), N.trigger(this._element, Zs);\n      }, this._element, this._config.animation)));\n    }\n    dispose() {\n      this._clearTimeout(), this.isShown() && this._element.classList.remove(no), super.dispose();\n    }\n    isShown() {\n      return this._element.classList.contains(no);\n    }\n    _maybeScheduleHide() {\n      this._config.autohide && (this._hasMouseInteraction || this._hasKeyboardInteraction || (this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay)));\n    }\n    _onInteraction(t, e) {\n      switch (t.type) {\n        case \"mouseover\":\n        case \"mouseout\":\n          this._hasMouseInteraction = e;\n          break;\n        case \"focusin\":\n        case \"focusout\":\n          this._hasKeyboardInteraction = e;\n      }\n      if (e) return void this._clearTimeout();\n      const i = t.relatedTarget;\n      this._element === i || this._element.contains(i) || this._maybeScheduleHide();\n    }\n    _setListeners() {\n      N.on(this._element, Xs, t => this._onInteraction(t, !0)), N.on(this._element, Ys, t => this._onInteraction(t, !1)), N.on(this._element, Us, t => this._onInteraction(t, !0)), N.on(this._element, Gs, t => this._onInteraction(t, !1));\n    }\n    _clearTimeout() {\n      clearTimeout(this._timeout), this._timeout = null;\n    }\n    static jQueryInterface(t) {\n      return this.each(function () {\n        const e = ao.getOrCreateInstance(this, t);\n        if (\"string\" == typeof t) {\n          if (void 0 === e[t]) throw new TypeError(`No method named \"${t}\"`);\n          e[t](this);\n        }\n      });\n    }\n  }\n  return R(ao), m(ao), {\n    Alert: Q,\n    Button: Y,\n    Carousel: xt,\n    Collapse: Bt,\n    Dropdown: qi,\n    Modal: On,\n    Offcanvas: qn,\n    Popover: us,\n    ScrollSpy: Es,\n    Tab: Ks,\n    Toast: ao,\n    Tooltip: cs\n  };\n});","/*! bootstrap-switch-button 2020-02-16 */\n\"use strict\";\n\n!function () {\n  class t {\n    constructor(t, e) {\n      const s = \"On\",\n        i = \"primary\",\n        n = \"Off\",\n        o = \"light\",\n        h = \"\",\n        l = \"\",\n        d = null,\n        a = null;\n      e = e || {}, this.element = t, this.options = {\n        onlabel: t.getAttribute(\"data-onlabel\") || e.onlabel || s,\n        onstyle: t.getAttribute(\"data-onstyle\") || e.onstyle || i,\n        offlabel: t.getAttribute(\"data-offlabel\") || e.offlabel || n,\n        offstyle: t.getAttribute(\"data-offstyle\") || e.offstyle || o,\n        size: t.getAttribute(\"data-size\") || e.size || h,\n        style: t.getAttribute(\"data-style\") || e.style || l,\n        width: t.getAttribute(\"data-width\") || e.width || d,\n        height: t.getAttribute(\"data-height\") || e.height || a\n      }, this.render();\n    }\n    render() {\n      function t(t) {\n        const e = window.getComputedStyle(t),\n          s = t.offsetHeight,\n          i = parseFloat(e.borderTopWidth);\n        return s - parseFloat(e.borderBottomWidth) - i - parseFloat(e.paddingTop) - parseFloat(e.paddingBottom);\n      }\n      var e = document.createElement(\"label\");\n      e.setAttribute(\"class\", \"btn btn-\" + this.options.onstyle + \" btn-\" + this.options.size), e.setAttribute(\"for\", this.element.id), e.innerHTML = this.options.onlabel;\n      var s = document.createElement(\"label\");\n      s.setAttribute(\"class\", \"btn btn-\" + this.options.offstyle + \" btn-\" + this.options.size), e.setAttribute(\"for\", this.element.id), s.innerHTML = this.options.offlabel;\n      var i = document.createElement(\"span\");\n      i.setAttribute(\"class\", \"switch-handle btn btn-light btn-\" + this.options.size);\n      var n = document.createElement(\"div\");\n      n.setAttribute(\"class\", \"switch-group\"), n.appendChild(e), n.appendChild(s), n.appendChild(i);\n      var o = document.createElement(\"div\");\n      o.setAttribute(\"class\", \"switch btn\"), o.classList.add(this.element.checked ? \"btn-\" + this.options.onstyle : \"btn-\" + this.options.offstyle), this.options.size && o.classList.add(\"btn-\" + this.options.size), this.options.style && o.classList.add(this.options.style), this.element.parentElement.insertBefore(o, this.element), o.appendChild(this.element), o.appendChild(n), o.style.width = (this.options.width || Math.max(e.getBoundingClientRect().width, s.getBoundingClientRect().width + i.getBoundingClientRect().width / 2)) + \"px\", o.style.height = (this.options.height || Math.max(e.getBoundingClientRect().height, s.getBoundingClientRect().height)) + \"px\", e.classList.add(\"switch-on\"), s.classList.add(\"switch-off\"), this.options.height && (e.style.lineHeight = t(e) + \"px\", s.style.lineHeight = t(s) + \"px\"), o.addEventListener(\"touchstart\", this.toggle.bind(this)), o.addEventListener(\"click\", this.toggle.bind(this)), this.switch = o, this.element.switchBtn = this, this.update(!0);\n    }\n    toggle(t) {\n      this.element.checked ? this.off() : this.on(), void 0 !== t && t && t.preventDefault();\n    }\n    on(t) {\n      if (this.element.disabled) return !1;\n      this.switch.classList.remove(\"btn-\" + this.options.offstyle), this.switch.classList.add(\"btn-\" + this.options.onstyle), this.switch.classList.remove(\"off\"), this.element.checked = !0, t || this.trigger();\n    }\n    off(t) {\n      if (this.element.disabled) return !1;\n      this.switch.classList.remove(\"btn-\" + this.options.onstyle), this.switch.classList.add(\"btn-\" + this.options.offstyle), this.switch.classList.add(\"off\"), this.element.checked = !1, t || this.trigger();\n    }\n    enable() {\n      this.switch.classList.remove(\"disabled\"), this.switch.removeAttribute(\"disabled\"), this.element.removeAttribute(\"disabled\");\n    }\n    disable() {\n      this.switch.classList.add(\"disabled\"), this.switch.setAttribute(\"disabled\", \"disabled\"), this.element.setAttribute(\"disabled\", \"disabled\");\n    }\n    update(t) {\n      this.element.disabled ? this.disable() : this.enable(), this.element.checked ? this.on(t) : this.off(t);\n    }\n    trigger(t) {\n      t || this.element.dispatchEvent(new Event(\"change\", {\n        bubbles: !0\n      }));\n    }\n    destroy() {\n      this.switch.parentNode.insertBefore(this.element, this.switch), this.switch.parentNode.removeChild(this.switch), delete this.element.switchBtn, delete this.switch;\n    }\n  }\n  Element.prototype.switchButton = function (e, s) {\n    var i = this.switchBtn || new t(this, e);\n    e && \"string\" == typeof e && (\"toggle\" == e.toLowerCase() ? i.toggle() : \"on\" == e.toLowerCase() ? i.on(s) : \"off\" == e.toLowerCase() ? i.off(s) : \"enable\" == e.toLowerCase() ? i.enable() : \"disable\" == e.toLowerCase() ? i.disable() : \"destroy\" == e.toLowerCase() && i.destroy());\n  }, \"undefined\" != typeof window && (window.onload = function () {\n    document.querySelectorAll('input[type=checkbox][data-toggle=\"switchbutton\"]').forEach(function (t) {\n      t.switchButton();\n    });\n  }), \"undefined\" != typeof module && module.exports && (module.exports = t);\n}();","/*! Summernote v0.8.20 | (c) 2013- Alan Hong and contributors | MIT license */\n!function (t, e) {\n  if (\"object\" == typeof exports && \"object\" == typeof module) module.exports = e(require(\"jQuery\"));else if (\"function\" == typeof define && define.amd) define([\"jQuery\"], e);else {\n    var o = \"object\" == typeof exports ? e(require(\"jQuery\")) : e(t.jQuery);\n    for (var n in o) (\"object\" == typeof exports ? exports : t)[n] = o[n];\n  }\n}(self, function (t) {\n  return (() => {\n    \"use strict\";\n\n    var e = {\n        9770: (t, e, o) => {\n          var n = o(1145),\n            i = o.n(n);\n          i().summernote = i().summernote || {\n            lang: {}\n          }, i().extend(i().summernote.lang, {\n            \"en-US\": {\n              font: {\n                bold: \"Bold\",\n                italic: \"Italic\",\n                underline: \"Underline\",\n                clear: \"Remove Font Style\",\n                height: \"Line Height\",\n                name: \"Font Family\",\n                strikethrough: \"Strikethrough\",\n                subscript: \"Subscript\",\n                superscript: \"Superscript\",\n                size: \"Font Size\",\n                sizeunit: \"Font Size Unit\"\n              },\n              image: {\n                image: \"Picture\",\n                insert: \"Insert Image\",\n                resizeFull: \"Resize full\",\n                resizeHalf: \"Resize half\",\n                resizeQuarter: \"Resize quarter\",\n                resizeNone: \"Original size\",\n                floatLeft: \"Float Left\",\n                floatRight: \"Float Right\",\n                floatNone: \"Remove float\",\n                shapeRounded: \"Shape: Rounded\",\n                shapeCircle: \"Shape: Circle\",\n                shapeThumbnail: \"Shape: Thumbnail\",\n                shapeNone: \"Shape: None\",\n                dragImageHere: \"Drag image or text here\",\n                dropImage: \"Drop image or Text\",\n                selectFromFiles: \"Select from files\",\n                maximumFileSize: \"Maximum file size\",\n                maximumFileSizeError: \"Maximum file size exceeded.\",\n                url: \"Image URL\",\n                remove: \"Remove Image\",\n                original: \"Original\"\n              },\n              video: {\n                video: \"Video\",\n                videoLink: \"Video Link\",\n                insert: \"Insert Video\",\n                url: \"Video URL\",\n                providers: \"(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion, Youku, Peertube)\"\n              },\n              link: {\n                link: \"Link\",\n                insert: \"Insert Link\",\n                unlink: \"Unlink\",\n                edit: \"Edit\",\n                textToDisplay: \"Text to display\",\n                url: \"To what URL should this link go?\",\n                openInNewWindow: \"Open in new window\",\n                useProtocol: \"Use default protocol\"\n              },\n              table: {\n                table: \"Table\",\n                addRowAbove: \"Add row above\",\n                addRowBelow: \"Add row below\",\n                addColLeft: \"Add column left\",\n                addColRight: \"Add column right\",\n                delRow: \"Delete row\",\n                delCol: \"Delete column\",\n                delTable: \"Delete table\"\n              },\n              hr: {\n                insert: \"Insert Horizontal Rule\"\n              },\n              style: {\n                style: \"Style\",\n                p: \"Normal\",\n                blockquote: \"Quote\",\n                pre: \"Code\",\n                h1: \"Header 1\",\n                h2: \"Header 2\",\n                h3: \"Header 3\",\n                h4: \"Header 4\",\n                h5: \"Header 5\",\n                h6: \"Header 6\"\n              },\n              lists: {\n                unordered: \"Unordered list\",\n                ordered: \"Ordered list\"\n              },\n              options: {\n                help: \"Help\",\n                fullscreen: \"Full Screen\",\n                codeview: \"Code View\"\n              },\n              paragraph: {\n                paragraph: \"Paragraph\",\n                outdent: \"Outdent\",\n                indent: \"Indent\",\n                left: \"Align left\",\n                center: \"Align center\",\n                right: \"Align right\",\n                justify: \"Justify full\"\n              },\n              color: {\n                recent: \"Recent Color\",\n                more: \"More Color\",\n                background: \"Background Color\",\n                foreground: \"Text Color\",\n                transparent: \"Transparent\",\n                setTransparent: \"Set transparent\",\n                reset: \"Reset\",\n                resetToDefault: \"Reset to default\",\n                cpSelect: \"Select\"\n              },\n              shortcut: {\n                shortcuts: \"Keyboard shortcuts\",\n                close: \"Close\",\n                textFormatting: \"Text formatting\",\n                action: \"Action\",\n                paragraphFormatting: \"Paragraph formatting\",\n                documentStyle: \"Document Style\",\n                extraKeys: \"Extra keys\"\n              },\n              help: {\n                escape: \"Escape\",\n                insertParagraph: \"Insert Paragraph\",\n                undo: \"Undo the last command\",\n                redo: \"Redo the last command\",\n                tab: \"Tab\",\n                untab: \"Untab\",\n                bold: \"Set a bold style\",\n                italic: \"Set a italic style\",\n                underline: \"Set a underline style\",\n                strikethrough: \"Set a strikethrough style\",\n                removeFormat: \"Clean a style\",\n                justifyLeft: \"Set left align\",\n                justifyCenter: \"Set center align\",\n                justifyRight: \"Set right align\",\n                justifyFull: \"Set full align\",\n                insertUnorderedList: \"Toggle unordered list\",\n                insertOrderedList: \"Toggle ordered list\",\n                outdent: \"Outdent on current paragraph\",\n                indent: \"Indent on current paragraph\",\n                formatPara: \"Change current block's format as a paragraph(P tag)\",\n                formatH1: \"Change current block's format as H1\",\n                formatH2: \"Change current block's format as H2\",\n                formatH3: \"Change current block's format as H3\",\n                formatH4: \"Change current block's format as H4\",\n                formatH5: \"Change current block's format as H5\",\n                formatH6: \"Change current block's format as H6\",\n                insertHorizontalRule: \"Insert horizontal rule\",\n                \"linkDialog.show\": \"Show Link Dialog\"\n              },\n              history: {\n                undo: \"Undo\",\n                redo: \"Redo\"\n              },\n              specialChar: {\n                specialChar: \"SPECIAL CHARACTERS\",\n                select: \"Select Special characters\"\n              },\n              output: {\n                noSelection: \"No Selection Made!\"\n              }\n            }\n          });\n        },\n        1145: e => {\n          e.exports = t;\n        }\n      },\n      o = {};\n    function n(t) {\n      var i = o[t];\n      if (void 0 !== i) return i.exports;\n      var r = o[t] = {\n        exports: {}\n      };\n      return e[t](r, r.exports, n), r.exports;\n    }\n    n.n = t => {\n      var e = t && t.__esModule ? () => t.default : () => t;\n      return n.d(e, {\n        a: e\n      }), e;\n    }, n.d = (t, e) => {\n      for (var o in e) n.o(e, o) && !n.o(t, o) && Object.defineProperty(t, o, {\n        enumerable: !0,\n        get: e[o]\n      });\n    }, n.o = (t, e) => Object.prototype.hasOwnProperty.call(t, e), n.r = t => {\n      \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {\n        value: \"Module\"\n      }), Object.defineProperty(t, \"__esModule\", {\n        value: !0\n      });\n    };\n    var i = {};\n    return (() => {\n      n.r(i);\n      var t = n(1145),\n        e = n.n(t),\n        o = (n(9770), [\"sans-serif\", \"serif\", \"monospace\", \"cursive\", \"fantasy\"]);\n      function r(t) {\n        return -1 === e().inArray(t.toLowerCase(), o) ? \"'\".concat(t, \"'\") : t;\n      }\n      var a,\n        s = navigator.userAgent,\n        l = /MSIE|Trident/i.test(s);\n      if (l) {\n        var c = /MSIE (\\d+[.]\\d+)/.exec(s);\n        c && (a = parseFloat(c[1])), (c = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(s)) && (a = parseFloat(c[1]));\n      }\n      var u = /Edge\\/\\d+/.test(s),\n        d = \"ontouchstart\" in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0,\n        h = l ? \"DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted\" : \"input\";\n      const f = {\n        isMac: navigator.appVersion.indexOf(\"Mac\") > -1,\n        isMSIE: l,\n        isEdge: u,\n        isFF: !u && /firefox/i.test(s),\n        isPhantom: /PhantomJS/i.test(s),\n        isWebkit: !u && /webkit/i.test(s),\n        isChrome: !u && /chrome/i.test(s),\n        isSafari: !u && /safari/i.test(s) && !/chrome/i.test(s),\n        browserVersion: a,\n        isSupportTouch: d,\n        isFontInstalled: function (t) {\n          var e = \"Comic Sans MS\" === t ? \"Courier New\" : \"Comic Sans MS\",\n            o = \"mmmmmmmmmmwwwww\",\n            n = document.createElement(\"canvas\").getContext(\"2d\");\n          n.font = \"200px '\" + e + \"'\";\n          var i = n.measureText(o).width;\n          return n.font = \"200px \" + r(t) + ', \"' + e + '\"', i !== n.measureText(o).width;\n        },\n        isW3CRangeSupport: !!document.createRange,\n        inputEventName: h,\n        genericFontFamilies: o,\n        validFontName: r\n      };\n      var p = 0;\n      const v = {\n        eq: function (t) {\n          return function (e) {\n            return t === e;\n          };\n        },\n        eq2: function (t, e) {\n          return t === e;\n        },\n        peq2: function (t) {\n          return function (e, o) {\n            return e[t] === o[t];\n          };\n        },\n        ok: function () {\n          return !0;\n        },\n        fail: function () {\n          return !1;\n        },\n        self: function (t) {\n          return t;\n        },\n        not: function (t) {\n          return function () {\n            return !t.apply(t, arguments);\n          };\n        },\n        and: function (t, e) {\n          return function (o) {\n            return t(o) && e(o);\n          };\n        },\n        invoke: function (t, e) {\n          return function () {\n            return t[e].apply(t, arguments);\n          };\n        },\n        resetUniqueId: function () {\n          p = 0;\n        },\n        uniqueId: function (t) {\n          var e = ++p + \"\";\n          return t ? t + e : e;\n        },\n        rect2bnd: function (t) {\n          var o = e()(document);\n          return {\n            top: t.top + o.scrollTop(),\n            left: t.left + o.scrollLeft(),\n            width: t.right - t.left,\n            height: t.bottom - t.top\n          };\n        },\n        invertObject: function (t) {\n          var e = {};\n          for (var o in t) Object.prototype.hasOwnProperty.call(t, o) && (e[t[o]] = o);\n          return e;\n        },\n        namespaceToCamel: function (t, e) {\n          return (e = e || \"\") + t.split(\".\").map(function (t) {\n            return t.substring(0, 1).toUpperCase() + t.substring(1);\n          }).join(\"\");\n        },\n        debounce: function (t, e, o) {\n          var n;\n          return function () {\n            var i = this,\n              r = arguments,\n              a = function () {\n                n = null, o || t.apply(i, r);\n              },\n              s = o && !n;\n            clearTimeout(n), n = setTimeout(a, e), s && t.apply(i, r);\n          };\n        },\n        isValidUrl: function (t) {\n          return /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi.test(t);\n        }\n      };\n      function m(t) {\n        return t[0];\n      }\n      function g(t) {\n        return t[t.length - 1];\n      }\n      function b(t) {\n        return t.slice(1);\n      }\n      function k(t, e) {\n        if (t && t.length && e) {\n          if (t.indexOf) return -1 !== t.indexOf(e);\n          if (t.contains) return t.contains(e);\n        }\n        return !1;\n      }\n      const y = {\n        head: m,\n        last: g,\n        initial: function (t) {\n          return t.slice(0, t.length - 1);\n        },\n        tail: b,\n        prev: function (t, e) {\n          if (t && t.length && e) {\n            var o = t.indexOf(e);\n            return -1 === o ? null : t[o - 1];\n          }\n          return null;\n        },\n        next: function (t, e) {\n          if (t && t.length && e) {\n            var o = t.indexOf(e);\n            return -1 === o ? null : t[o + 1];\n          }\n          return null;\n        },\n        find: function (t, e) {\n          for (var o = 0, n = t.length; o < n; o++) {\n            var i = t[o];\n            if (e(i)) return i;\n          }\n        },\n        contains: k,\n        all: function (t, e) {\n          for (var o = 0, n = t.length; o < n; o++) if (!e(t[o])) return !1;\n          return !0;\n        },\n        sum: function (t, e) {\n          return e = e || v.self, t.reduce(function (t, o) {\n            return t + e(o);\n          }, 0);\n        },\n        from: function (t) {\n          for (var e = [], o = t.length, n = -1; ++n < o;) e[n] = t[n];\n          return e;\n        },\n        isEmpty: function (t) {\n          return !t || !t.length;\n        },\n        clusterBy: function (t, e) {\n          return t.length ? b(t).reduce(function (t, o) {\n            var n = g(t);\n            return e(g(n), o) ? n[n.length] = o : t[t.length] = [o], t;\n          }, [[m(t)]]) : [];\n        },\n        compact: function (t) {\n          for (var e = [], o = 0, n = t.length; o < n; o++) t[o] && e.push(t[o]);\n          return e;\n        },\n        unique: function (t) {\n          for (var e = [], o = 0, n = t.length; o < n; o++) k(e, t[o]) || e.push(t[o]);\n          return e;\n        }\n      };\n      var w = String.fromCharCode(160);\n      function C(t) {\n        return t && e()(t).hasClass(\"note-editable\");\n      }\n      function x(t) {\n        return t = t.toUpperCase(), function (e) {\n          return e && e.nodeName.toUpperCase() === t;\n        };\n      }\n      function S(t) {\n        return t && 3 === t.nodeType;\n      }\n      function T(t) {\n        return t && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(t.nodeName.toUpperCase());\n      }\n      function E(t) {\n        return !C(t) && t && /^DIV|^P|^LI|^H[1-7]/.test(t.nodeName.toUpperCase());\n      }\n      var $ = x(\"PRE\"),\n        N = x(\"LI\");\n      var I = x(\"TABLE\"),\n        P = x(\"DATA\");\n      function R(t) {\n        return !(H(t) || L(t) || A(t) || E(t) || I(t) || D(t) || P(t));\n      }\n      function L(t) {\n        return t && /^UL|^OL/.test(t.nodeName.toUpperCase());\n      }\n      var A = x(\"HR\");\n      function F(t) {\n        return t && /^TD|^TH/.test(t.nodeName.toUpperCase());\n      }\n      var D = x(\"BLOCKQUOTE\");\n      function H(t) {\n        return F(t) || D(t) || C(t);\n      }\n      var B = x(\"A\");\n      var z = x(\"BODY\");\n      var M = f.isMSIE && f.browserVersion < 11 ? \"&nbsp;\" : \"<br>\";\n      function O(t) {\n        return S(t) ? t.nodeValue.length : t ? t.childNodes.length : 0;\n      }\n      function j(t) {\n        var e = O(t);\n        return 0 === e || !S(t) && 1 === e && t.innerHTML === M || !(!y.all(t.childNodes, S) || \"\" !== t.innerHTML);\n      }\n      function U(t) {\n        T(t) || O(t) || (t.innerHTML = M);\n      }\n      function W(t, e) {\n        for (; t;) {\n          if (e(t)) return t;\n          if (C(t)) break;\n          t = t.parentNode;\n        }\n        return null;\n      }\n      function K(t, e) {\n        e = e || v.fail;\n        var o = [];\n        return W(t, function (t) {\n          return C(t) || o.push(t), e(t);\n        }), o;\n      }\n      function V(t, e) {\n        e = e || v.fail;\n        for (var o = []; t && !e(t);) o.push(t), t = t.nextSibling;\n        return o;\n      }\n      function q(t, e) {\n        var o = e.nextSibling,\n          n = e.parentNode;\n        return o ? n.insertBefore(t, o) : n.appendChild(t), t;\n      }\n      function _(t, o) {\n        return e().each(o, function (e, o) {\n          t.appendChild(o);\n        }), t;\n      }\n      function G(t) {\n        return 0 === t.offset;\n      }\n      function Y(t) {\n        return t.offset === O(t.node);\n      }\n      function Z(t) {\n        return G(t) || Y(t);\n      }\n      function X(t, e) {\n        for (; t && t !== e;) {\n          if (0 !== J(t)) return !1;\n          t = t.parentNode;\n        }\n        return !0;\n      }\n      function Q(t, e) {\n        if (!e) return !1;\n        for (; t && t !== e;) {\n          if (J(t) !== O(t.parentNode) - 1) return !1;\n          t = t.parentNode;\n        }\n        return !0;\n      }\n      function J(t) {\n        for (var e = 0; t = t.previousSibling;) e += 1;\n        return e;\n      }\n      function tt(t) {\n        return !!(t && t.childNodes && t.childNodes.length);\n      }\n      function et(t, e) {\n        var o, n;\n        if (0 === t.offset) {\n          if (C(t.node)) return null;\n          o = t.node.parentNode, n = J(t.node);\n        } else tt(t.node) ? n = O(o = t.node.childNodes[t.offset - 1]) : (o = t.node, n = e ? 0 : t.offset - 1);\n        return {\n          node: o,\n          offset: n\n        };\n      }\n      function ot(t, e) {\n        var o, n;\n        if (O(t.node) === t.offset) {\n          if (C(t.node)) return null;\n          var i = it(t.node);\n          i ? (o = i, n = 0) : (o = t.node.parentNode, n = J(t.node) + 1);\n        } else tt(t.node) ? (o = t.node.childNodes[t.offset], n = 0) : (o = t.node, n = e ? O(t.node) : t.offset + 1);\n        return {\n          node: o,\n          offset: n\n        };\n      }\n      function nt(t, e) {\n        var o,\n          n = 0;\n        if (j(t.node)) return null === t.node ? null : {\n          node: o = t.node.nextSibling,\n          offset: n = 0\n        };\n        if (O(t.node) === t.offset) {\n          if (C(t.node)) return null;\n          o = t.node.parentNode, n = J(t.node) + 1, C(o) && (o = t.node.nextSibling, n = 0);\n        } else if (tt(t.node)) {\n          if (n = 0, j(o = t.node.childNodes[t.offset])) return j(t.node.nextSibling) ? null : {\n            node: t.node.nextSibling,\n            offset: n\n          };\n        } else if (o = t.node, n = e ? O(t.node) : t.offset + 1, j(o)) return null;\n        return {\n          node: o,\n          offset: n\n        };\n      }\n      function it(t) {\n        if (t.nextSibling && t.parent === t.nextSibling.parent) return S(t.nextSibling) ? t.nextSibling : it(t.nextSibling);\n      }\n      function rt(t, e) {\n        return t.node === e.node && t.offset === e.offset;\n      }\n      function at(t, e) {\n        var o = e && e.isSkipPaddingBlankHTML,\n          n = e && e.isNotSplitEdgePoint,\n          i = e && e.isDiscardEmptySplits;\n        if (i && (o = !0), Z(t) && (S(t.node) || n)) {\n          if (G(t)) return t.node;\n          if (Y(t)) return t.node.nextSibling;\n        }\n        if (S(t.node)) return t.node.splitText(t.offset);\n        var r = t.node.childNodes[t.offset],\n          a = q(t.node.cloneNode(!1), t.node);\n        return _(a, V(r)), o || (U(t.node), U(a)), i && (j(t.node) && ct(t.node), j(a)) ? (ct(a), t.node.nextSibling) : a;\n      }\n      function st(t, e, o) {\n        var n = K(e.node, v.eq(t));\n        return n.length ? 1 === n.length ? at(e, o) : n.reduce(function (t, n) {\n          return t === e.node && (t = at(e, o)), at({\n            node: n,\n            offset: t ? J(t) : O(n)\n          }, o);\n        }) : null;\n      }\n      function lt(t) {\n        return document.createElement(t);\n      }\n      function ct(t, e) {\n        if (t && t.parentNode) {\n          if (t.removeNode) return t.removeNode(e);\n          var o = t.parentNode;\n          if (!e) {\n            for (var n = [], i = 0, r = t.childNodes.length; i < r; i++) n.push(t.childNodes[i]);\n            for (var a = 0, s = n.length; a < s; a++) o.insertBefore(n[a], t);\n          }\n          o.removeChild(t);\n        }\n      }\n      var ut = x(\"TEXTAREA\");\n      function dt(t, e) {\n        var o = ut(t[0]) ? t.val() : t.html();\n        return e ? o.replace(/[\\n\\r]/g, \"\") : o;\n      }\n      const ht = {\n        NBSP_CHAR: w,\n        ZERO_WIDTH_NBSP_CHAR: \"\\ufeff\",\n        blank: M,\n        emptyPara: \"<p>\".concat(M, \"</p>\"),\n        makePredByNodeName: x,\n        isEditable: C,\n        isControlSizing: function (t) {\n          return t && e()(t).hasClass(\"note-control-sizing\");\n        },\n        isText: S,\n        isElement: function (t) {\n          return t && 1 === t.nodeType;\n        },\n        isVoid: T,\n        isPara: E,\n        isPurePara: function (t) {\n          return E(t) && !N(t);\n        },\n        isHeading: function (t) {\n          return t && /^H[1-7]/.test(t.nodeName.toUpperCase());\n        },\n        isInline: R,\n        isBlock: v.not(R),\n        isBodyInline: function (t) {\n          return R(t) && !W(t, E);\n        },\n        isBody: z,\n        isParaInline: function (t) {\n          return R(t) && !!W(t, E);\n        },\n        isPre: $,\n        isList: L,\n        isTable: I,\n        isData: P,\n        isCell: F,\n        isBlockquote: D,\n        isBodyContainer: H,\n        isAnchor: B,\n        isDiv: x(\"DIV\"),\n        isLi: N,\n        isBR: x(\"BR\"),\n        isSpan: x(\"SPAN\"),\n        isB: x(\"B\"),\n        isU: x(\"U\"),\n        isS: x(\"S\"),\n        isI: x(\"I\"),\n        isImg: x(\"IMG\"),\n        isTextarea: ut,\n        deepestChildIsEmpty: function (t) {\n          do {\n            if (null === t.firstElementChild || \"\" === t.firstElementChild.innerHTML) break;\n          } while (t = t.firstElementChild);\n          return j(t);\n        },\n        isEmpty: j,\n        isEmptyAnchor: v.and(B, j),\n        isClosestSibling: function (t, e) {\n          return t.nextSibling === e || t.previousSibling === e;\n        },\n        withClosestSiblings: function (t, e) {\n          e = e || v.ok;\n          var o = [];\n          return t.previousSibling && e(t.previousSibling) && o.push(t.previousSibling), o.push(t), t.nextSibling && e(t.nextSibling) && o.push(t.nextSibling), o;\n        },\n        nodeLength: O,\n        isLeftEdgePoint: G,\n        isRightEdgePoint: Y,\n        isEdgePoint: Z,\n        isLeftEdgeOf: X,\n        isRightEdgeOf: Q,\n        isLeftEdgePointOf: function (t, e) {\n          return G(t) && X(t.node, e);\n        },\n        isRightEdgePointOf: function (t, e) {\n          return Y(t) && Q(t.node, e);\n        },\n        prevPoint: et,\n        nextPoint: ot,\n        nextPointWithEmptyNode: nt,\n        isSamePoint: rt,\n        isVisiblePoint: function (t) {\n          if (S(t.node) || !tt(t.node) || j(t.node)) return !0;\n          var e = t.node.childNodes[t.offset - 1],\n            o = t.node.childNodes[t.offset];\n          return !((e && !T(e) || o && !T(o)) && !I(o));\n        },\n        prevPointUntil: function (t, e) {\n          for (; t;) {\n            if (e(t)) return t;\n            t = et(t);\n          }\n          return null;\n        },\n        nextPointUntil: function (t, e) {\n          for (; t;) {\n            if (e(t)) return t;\n            t = ot(t);\n          }\n          return null;\n        },\n        isCharPoint: function (t) {\n          if (!S(t.node)) return !1;\n          var e = t.node.nodeValue.charAt(t.offset - 1);\n          return e && \" \" !== e && e !== w;\n        },\n        isSpacePoint: function (t) {\n          if (!S(t.node)) return !1;\n          var e = t.node.nodeValue.charAt(t.offset - 1);\n          return \" \" === e || e === w;\n        },\n        walkPoint: function (t, e, o, n) {\n          for (var i = t; i && (o(i), !rt(i, e));) {\n            i = nt(i, n && t.node !== i.node && e.node !== i.node);\n          }\n        },\n        ancestor: W,\n        singleChildAncestor: function (t, e) {\n          for (t = t.parentNode; t && 1 === O(t);) {\n            if (e(t)) return t;\n            if (C(t)) break;\n            t = t.parentNode;\n          }\n          return null;\n        },\n        listAncestor: K,\n        lastAncestor: function (t, e) {\n          var o = K(t);\n          return y.last(o.filter(e));\n        },\n        listNext: V,\n        listPrev: function (t, e) {\n          e = e || v.fail;\n          for (var o = []; t && !e(t);) o.push(t), t = t.previousSibling;\n          return o;\n        },\n        listDescendant: function (t, e) {\n          var o = [];\n          return e = e || v.ok, function n(i) {\n            t !== i && e(i) && o.push(i);\n            for (var r = 0, a = i.childNodes.length; r < a; r++) n(i.childNodes[r]);\n          }(t), o;\n        },\n        commonAncestor: function (t, e) {\n          for (var o = K(t), n = e; n; n = n.parentNode) if (o.indexOf(n) > -1) return n;\n          return null;\n        },\n        wrap: function (t, o) {\n          var n = t.parentNode,\n            i = e()(\"<\" + o + \">\")[0];\n          return n.insertBefore(i, t), i.appendChild(t), i;\n        },\n        insertAfter: q,\n        appendChildNodes: _,\n        position: J,\n        hasChildren: tt,\n        makeOffsetPath: function (t, e) {\n          return K(e, v.eq(t)).map(J).reverse();\n        },\n        fromOffsetPath: function (t, e) {\n          for (var o = t, n = 0, i = e.length; n < i; n++) o = o.childNodes.length <= e[n] ? o.childNodes[o.childNodes.length - 1] : o.childNodes[e[n]];\n          return o;\n        },\n        splitTree: st,\n        splitPoint: function (t, e) {\n          var o,\n            n,\n            i = e ? E : H,\n            r = K(t.node, i),\n            a = y.last(r) || t.node;\n          i(a) ? (o = r[r.length - 2], n = a) : n = (o = a).parentNode;\n          var s = o && st(o, t, {\n            isSkipPaddingBlankHTML: e,\n            isNotSplitEdgePoint: e\n          });\n          return s || n !== t.node || (s = t.node.childNodes[t.offset]), {\n            rightNode: s,\n            container: n\n          };\n        },\n        create: lt,\n        createText: function (t) {\n          return document.createTextNode(t);\n        },\n        remove: ct,\n        removeWhile: function (t, e) {\n          for (; t && !C(t) && e(t);) {\n            var o = t.parentNode;\n            ct(t), t = o;\n          }\n        },\n        replace: function (t, e) {\n          if (t.nodeName.toUpperCase() === e.toUpperCase()) return t;\n          var o = lt(e);\n          return t.style.cssText && (o.style.cssText = t.style.cssText), _(o, y.from(t.childNodes)), q(o, t), ct(t), o;\n        },\n        html: function (t, e) {\n          var o = dt(t);\n          if (e) {\n            o = (o = o.replace(/<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g, function (t, e, o) {\n              o = o.toUpperCase();\n              var n = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(o) && !!e,\n                i = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(o);\n              return t + (n || i ? \"\\n\" : \"\");\n            })).trim();\n          }\n          return o;\n        },\n        value: dt,\n        posFromPlaceholder: function (t) {\n          var o = e()(t),\n            n = o.offset(),\n            i = o.outerHeight(!0);\n          return {\n            left: n.left,\n            top: n.top + i\n          };\n        },\n        attachEvents: function (t, e) {\n          Object.keys(e).forEach(function (o) {\n            t.on(o, e[o]);\n          });\n        },\n        detachEvents: function (t, e) {\n          Object.keys(e).forEach(function (o) {\n            t.off(o, e[o]);\n          });\n        },\n        isCustomStyleTag: function (t) {\n          return t && !S(t) && y.contains(t.classList, \"note-styletag\");\n        }\n      };\n      function ft(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var pt = function () {\n        function t(o, n) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.$note = o, this.memos = {}, this.modules = {}, this.layoutInfo = {}, this.options = e().extend(!0, {}, n), e().summernote.ui = e().summernote.ui_template(this.options), this.ui = e().summernote.ui, this.initialize();\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"initialize\",\n          value: function () {\n            return this.layoutInfo = this.ui.createLayout(this.$note), this._initialize(), this.$note.hide(), this;\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this._destroy(), this.$note.removeData(\"summernote\"), this.ui.removeLayout(this.$note, this.layoutInfo);\n          }\n        }, {\n          key: \"reset\",\n          value: function () {\n            var t = this.isDisabled();\n            this.code(ht.emptyPara), this._destroy(), this._initialize(), t && this.disable();\n          }\n        }, {\n          key: \"_initialize\",\n          value: function () {\n            var t = this;\n            this.options.id = v.uniqueId(e().now()), this.options.container = this.options.container || this.layoutInfo.editor;\n            var o = e().extend({}, this.options.buttons);\n            Object.keys(o).forEach(function (e) {\n              t.memo(\"button.\" + e, o[e]);\n            });\n            var n = e().extend({}, this.options.modules, e().summernote.plugins || {});\n            Object.keys(n).forEach(function (e) {\n              t.module(e, n[e], !0);\n            }), Object.keys(this.modules).forEach(function (e) {\n              t.initializeModule(e);\n            });\n          }\n        }, {\n          key: \"_destroy\",\n          value: function () {\n            var t = this;\n            Object.keys(this.modules).reverse().forEach(function (e) {\n              t.removeModule(e);\n            }), Object.keys(this.memos).forEach(function (e) {\n              t.removeMemo(e);\n            }), this.triggerEvent(\"destroy\", this);\n          }\n        }, {\n          key: \"code\",\n          value: function (t) {\n            var e = this.invoke(\"codeview.isActivated\");\n            if (void 0 === t) return this.invoke(\"codeview.sync\"), e ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n            e ? this.invoke(\"codeview.sync\", t) : this.layoutInfo.editable.html(t), this.$note.val(t), this.triggerEvent(\"change\", t, this.layoutInfo.editable);\n          }\n        }, {\n          key: \"isDisabled\",\n          value: function () {\n            return \"false\" === this.layoutInfo.editable.attr(\"contenteditable\");\n          }\n        }, {\n          key: \"enable\",\n          value: function () {\n            this.layoutInfo.editable.attr(\"contenteditable\", !0), this.invoke(\"toolbar.activate\", !0), this.triggerEvent(\"disable\", !1), this.options.editing = !0;\n          }\n        }, {\n          key: \"disable\",\n          value: function () {\n            this.invoke(\"codeview.isActivated\") && this.invoke(\"codeview.deactivate\"), this.layoutInfo.editable.attr(\"contenteditable\", !1), this.options.editing = !1, this.invoke(\"toolbar.deactivate\", !0), this.triggerEvent(\"disable\", !0);\n          }\n        }, {\n          key: \"triggerEvent\",\n          value: function () {\n            var t = y.head(arguments),\n              e = y.tail(y.from(arguments)),\n              o = this.options.callbacks[v.namespaceToCamel(t, \"on\")];\n            o && o.apply(this.$note[0], e), this.$note.trigger(\"summernote.\" + t, e);\n          }\n        }, {\n          key: \"initializeModule\",\n          value: function (t) {\n            var e = this.modules[t];\n            e.shouldInitialize = e.shouldInitialize || v.ok, e.shouldInitialize() && (e.initialize && e.initialize(), e.events && ht.attachEvents(this.$note, e.events));\n          }\n        }, {\n          key: \"module\",\n          value: function (t, e, o) {\n            if (1 === arguments.length) return this.modules[t];\n            this.modules[t] = new e(this), o || this.initializeModule(t);\n          }\n        }, {\n          key: \"removeModule\",\n          value: function (t) {\n            var e = this.modules[t];\n            e.shouldInitialize() && (e.events && ht.detachEvents(this.$note, e.events), e.destroy && e.destroy()), delete this.modules[t];\n          }\n        }, {\n          key: \"memo\",\n          value: function (t, e) {\n            if (1 === arguments.length) return this.memos[t];\n            this.memos[t] = e;\n          }\n        }, {\n          key: \"removeMemo\",\n          value: function (t) {\n            this.memos[t] && this.memos[t].destroy && this.memos[t].destroy(), delete this.memos[t];\n          }\n        }, {\n          key: \"createInvokeHandlerAndUpdateState\",\n          value: function (t, e) {\n            var o = this;\n            return function (n) {\n              o.createInvokeHandler(t, e)(n), o.invoke(\"buttons.updateCurrentStyle\");\n            };\n          }\n        }, {\n          key: \"createInvokeHandler\",\n          value: function (t, o) {\n            var n = this;\n            return function (i) {\n              i.preventDefault();\n              var r = e()(i.target);\n              n.invoke(t, o || r.closest(\"[data-value]\").data(\"value\"), r);\n            };\n          }\n        }, {\n          key: \"invoke\",\n          value: function () {\n            var t = y.head(arguments),\n              e = y.tail(y.from(arguments)),\n              o = t.split(\".\"),\n              n = o.length > 1,\n              i = n && y.head(o),\n              r = n ? y.last(o) : y.head(o),\n              a = this.modules[i || \"editor\"];\n            return !i && this[r] ? this[r].apply(this, e) : a && a[r] && a.shouldInitialize() ? a[r].apply(a, e) : void 0;\n          }\n        }], n && ft(o.prototype, n), i && ft(o, i), t;\n      }();\n      function vt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      function mt(t, e) {\n        var o,\n          n,\n          i = t.parentElement(),\n          r = document.body.createTextRange(),\n          a = y.from(i.childNodes);\n        for (o = 0; o < a.length; o++) if (!ht.isText(a[o])) {\n          if (r.moveToElementText(a[o]), r.compareEndPoints(\"StartToStart\", t) >= 0) break;\n          n = a[o];\n        }\n        if (0 !== o && ht.isText(a[o - 1])) {\n          var s = document.body.createTextRange(),\n            l = null;\n          s.moveToElementText(n || i), s.collapse(!n), l = n ? n.nextSibling : i.firstChild;\n          var c = t.duplicate();\n          c.setEndPoint(\"StartToStart\", s);\n          for (var u = c.text.replace(/[\\r\\n]/g, \"\").length; u > l.nodeValue.length && l.nextSibling;) u -= l.nodeValue.length, l = l.nextSibling;\n          l.nodeValue;\n          e && l.nextSibling && ht.isText(l.nextSibling) && u === l.nodeValue.length && (u -= l.nodeValue.length, l = l.nextSibling), i = l, o = u;\n        }\n        return {\n          cont: i,\n          offset: o\n        };\n      }\n      function gt(t) {\n        var e = document.body.createTextRange(),\n          o = function t(e, o) {\n            var n, i;\n            if (ht.isText(e)) {\n              var r = ht.listPrev(e, v.not(ht.isText)),\n                a = y.last(r).previousSibling;\n              n = a || e.parentNode, o += y.sum(y.tail(r), ht.nodeLength), i = !a;\n            } else {\n              if (n = e.childNodes[o] || e, ht.isText(n)) return t(n, 0);\n              o = 0, i = !1;\n            }\n            return {\n              node: n,\n              collapseToStart: i,\n              offset: o\n            };\n          }(t.node, t.offset);\n        return e.moveToElementText(o.node), e.collapse(o.collapseToStart), e.moveStart(\"character\", o.offset), e;\n      }\n      e().fn.extend({\n        summernote: function () {\n          var t = e().type(y.head(arguments)),\n            o = \"string\" === t,\n            n = \"object\" === t,\n            i = e().extend({}, e().summernote.options, n ? y.head(arguments) : {});\n          i.langInfo = e().extend(!0, {}, e().summernote.lang[\"en-US\"], e().summernote.lang[i.lang]), i.icons = e().extend(!0, {}, e().summernote.options.icons, i.icons), i.tooltip = \"auto\" === i.tooltip ? !f.isSupportTouch : i.tooltip, this.each(function (t, o) {\n            var n = e()(o);\n            if (!n.data(\"summernote\")) {\n              var r = new pt(n, i);\n              n.data(\"summernote\", r), n.data(\"summernote\").triggerEvent(\"init\", r.layoutInfo);\n            }\n          });\n          var r = this.first();\n          if (r.length) {\n            var a = r.data(\"summernote\");\n            if (o) return a.invoke.apply(a, y.from(arguments));\n            i.focus && a.invoke(\"editor.focus\");\n          }\n          return this;\n        }\n      });\n      var bt = function () {\n        function t(e, o, n, i) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.sc = e, this.so = o, this.ec = n, this.eo = i, this.isOnEditable = this.makeIsOn(ht.isEditable), this.isOnList = this.makeIsOn(ht.isList), this.isOnAnchor = this.makeIsOn(ht.isAnchor), this.isOnCell = this.makeIsOn(ht.isCell), this.isOnData = this.makeIsOn(ht.isData);\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"nativeRange\",\n          value: function () {\n            if (f.isW3CRangeSupport) {\n              var t = document.createRange();\n              return t.setStart(this.sc, this.so), t.setEnd(this.ec, this.eo), t;\n            }\n            var e = gt({\n              node: this.sc,\n              offset: this.so\n            });\n            return e.setEndPoint(\"EndToEnd\", gt({\n              node: this.ec,\n              offset: this.eo\n            })), e;\n          }\n        }, {\n          key: \"getPoints\",\n          value: function () {\n            return {\n              sc: this.sc,\n              so: this.so,\n              ec: this.ec,\n              eo: this.eo\n            };\n          }\n        }, {\n          key: \"getStartPoint\",\n          value: function () {\n            return {\n              node: this.sc,\n              offset: this.so\n            };\n          }\n        }, {\n          key: \"getEndPoint\",\n          value: function () {\n            return {\n              node: this.ec,\n              offset: this.eo\n            };\n          }\n        }, {\n          key: \"select\",\n          value: function () {\n            var t = this.nativeRange();\n            if (f.isW3CRangeSupport) {\n              var e = document.getSelection();\n              e.rangeCount > 0 && e.removeAllRanges(), e.addRange(t);\n            } else t.select();\n            return this;\n          }\n        }, {\n          key: \"scrollIntoView\",\n          value: function (t) {\n            var o = e()(t).height();\n            return t.scrollTop + o < this.sc.offsetTop && (t.scrollTop += Math.abs(t.scrollTop + o - this.sc.offsetTop)), this;\n          }\n        }, {\n          key: \"normalize\",\n          value: function () {\n            var e = function (t, e) {\n                if (!t) return t;\n                if (ht.isVisiblePoint(t) && (!ht.isEdgePoint(t) || ht.isRightEdgePoint(t) && !e || ht.isLeftEdgePoint(t) && e || ht.isRightEdgePoint(t) && e && ht.isVoid(t.node.nextSibling) || ht.isLeftEdgePoint(t) && !e && ht.isVoid(t.node.previousSibling) || ht.isBlock(t.node) && ht.isEmpty(t.node))) return t;\n                var o = ht.ancestor(t.node, ht.isBlock),\n                  n = !1;\n                if (!n) {\n                  var i = ht.prevPoint(t) || {\n                    node: null\n                  };\n                  n = (ht.isLeftEdgePointOf(t, o) || ht.isVoid(i.node)) && !e;\n                }\n                var r = !1;\n                if (!r) {\n                  var a = ht.nextPoint(t) || {\n                    node: null\n                  };\n                  r = (ht.isRightEdgePointOf(t, o) || ht.isVoid(a.node)) && e;\n                }\n                if (n || r) {\n                  if (ht.isVisiblePoint(t)) return t;\n                  e = !e;\n                }\n                return (e ? ht.nextPointUntil(ht.nextPoint(t), ht.isVisiblePoint) : ht.prevPointUntil(ht.prevPoint(t), ht.isVisiblePoint)) || t;\n              },\n              o = e(this.getEndPoint(), !1),\n              n = this.isCollapsed() ? o : e(this.getStartPoint(), !0);\n            return new t(n.node, n.offset, o.node, o.offset);\n          }\n        }, {\n          key: \"nodes\",\n          value: function (t, e) {\n            t = t || v.ok;\n            var o = e && e.includeAncestor,\n              n = e && e.fullyContains,\n              i = this.getStartPoint(),\n              r = this.getEndPoint(),\n              a = [],\n              s = [];\n            return ht.walkPoint(i, r, function (e) {\n              var i;\n              ht.isEditable(e.node) || (n ? (ht.isLeftEdgePoint(e) && s.push(e.node), ht.isRightEdgePoint(e) && y.contains(s, e.node) && (i = e.node)) : i = o ? ht.ancestor(e.node, t) : e.node, i && t(i) && a.push(i));\n            }, !0), y.unique(a);\n          }\n        }, {\n          key: \"commonAncestor\",\n          value: function () {\n            return ht.commonAncestor(this.sc, this.ec);\n          }\n        }, {\n          key: \"expand\",\n          value: function (e) {\n            var o = ht.ancestor(this.sc, e),\n              n = ht.ancestor(this.ec, e);\n            if (!o && !n) return new t(this.sc, this.so, this.ec, this.eo);\n            var i = this.getPoints();\n            return o && (i.sc = o, i.so = 0), n && (i.ec = n, i.eo = ht.nodeLength(n)), new t(i.sc, i.so, i.ec, i.eo);\n          }\n        }, {\n          key: \"collapse\",\n          value: function (e) {\n            return e ? new t(this.sc, this.so, this.sc, this.so) : new t(this.ec, this.eo, this.ec, this.eo);\n          }\n        }, {\n          key: \"splitText\",\n          value: function () {\n            var e = this.sc === this.ec,\n              o = this.getPoints();\n            return ht.isText(this.ec) && !ht.isEdgePoint(this.getEndPoint()) && this.ec.splitText(this.eo), ht.isText(this.sc) && !ht.isEdgePoint(this.getStartPoint()) && (o.sc = this.sc.splitText(this.so), o.so = 0, e && (o.ec = o.sc, o.eo = this.eo - this.so)), new t(o.sc, o.so, o.ec, o.eo);\n          }\n        }, {\n          key: \"deleteContents\",\n          value: function () {\n            if (this.isCollapsed()) return this;\n            var o = this.splitText(),\n              n = o.nodes(null, {\n                fullyContains: !0\n              }),\n              i = ht.prevPointUntil(o.getStartPoint(), function (t) {\n                return !y.contains(n, t.node);\n              }),\n              r = [];\n            return e().each(n, function (t, e) {\n              var o = e.parentNode;\n              i.node !== o && 1 === ht.nodeLength(o) && r.push(o), ht.remove(e, !1);\n            }), e().each(r, function (t, e) {\n              ht.remove(e, !1);\n            }), new t(i.node, i.offset, i.node, i.offset).normalize();\n          }\n        }, {\n          key: \"makeIsOn\",\n          value: function (t) {\n            return function () {\n              var e = ht.ancestor(this.sc, t);\n              return !!e && e === ht.ancestor(this.ec, t);\n            };\n          }\n        }, {\n          key: \"isLeftEdgeOf\",\n          value: function (t) {\n            if (!ht.isLeftEdgePoint(this.getStartPoint())) return !1;\n            var e = ht.ancestor(this.sc, t);\n            return e && ht.isLeftEdgeOf(this.sc, e);\n          }\n        }, {\n          key: \"isCollapsed\",\n          value: function () {\n            return this.sc === this.ec && this.so === this.eo;\n          }\n        }, {\n          key: \"wrapBodyInlineWithPara\",\n          value: function () {\n            if (ht.isBodyContainer(this.sc) && ht.isEmpty(this.sc)) return this.sc.innerHTML = ht.emptyPara, new t(this.sc.firstChild, 0, this.sc.firstChild, 0);\n            var e,\n              o = this.normalize();\n            if (ht.isParaInline(this.sc) || ht.isPara(this.sc)) return o;\n            if (ht.isInline(o.sc)) {\n              var n = ht.listAncestor(o.sc, v.not(ht.isInline));\n              e = y.last(n), ht.isInline(e) || (e = n[n.length - 2] || o.sc.childNodes[o.so]);\n            } else e = o.sc.childNodes[o.so > 0 ? o.so - 1 : 0];\n            if (e) {\n              var i = ht.listPrev(e, ht.isParaInline).reverse();\n              if ((i = i.concat(ht.listNext(e.nextSibling, ht.isParaInline))).length) {\n                var r = ht.wrap(y.head(i), \"p\");\n                ht.appendChildNodes(r, y.tail(i));\n              }\n            }\n            return this.normalize();\n          }\n        }, {\n          key: \"insertNode\",\n          value: function (t) {\n            var e = this;\n            (ht.isText(t) || ht.isInline(t)) && (e = this.wrapBodyInlineWithPara().deleteContents());\n            var o = ht.splitPoint(e.getStartPoint(), ht.isInline(t));\n            return o.rightNode ? (o.rightNode.parentNode.insertBefore(t, o.rightNode), ht.isEmpty(o.rightNode) && ht.isPara(t) && o.rightNode.parentNode.removeChild(o.rightNode)) : o.container.appendChild(t), t;\n          }\n        }, {\n          key: \"pasteHTML\",\n          value: function (t) {\n            t = e().trim(t);\n            var o = e()(\"<div></div>\").html(t)[0],\n              n = y.from(o.childNodes),\n              i = this,\n              r = !1;\n            return i.so >= 0 && (n = n.reverse(), r = !0), n = n.map(function (t) {\n              return i.insertNode(t);\n            }), r && (n = n.reverse()), n;\n          }\n        }, {\n          key: \"toString\",\n          value: function () {\n            var t = this.nativeRange();\n            return f.isW3CRangeSupport ? t.toString() : t.text;\n          }\n        }, {\n          key: \"getWordRange\",\n          value: function (e) {\n            var o = this.getEndPoint();\n            if (!ht.isCharPoint(o)) return this;\n            var n = ht.prevPointUntil(o, function (t) {\n              return !ht.isCharPoint(t);\n            });\n            return e && (o = ht.nextPointUntil(o, function (t) {\n              return !ht.isCharPoint(t);\n            })), new t(n.node, n.offset, o.node, o.offset);\n          }\n        }, {\n          key: \"getWordsRange\",\n          value: function (e) {\n            var o = this.getEndPoint(),\n              n = function (t) {\n                return !ht.isCharPoint(t) && !ht.isSpacePoint(t);\n              };\n            if (n(o)) return this;\n            var i = ht.prevPointUntil(o, n);\n            return e && (o = ht.nextPointUntil(o, n)), new t(i.node, i.offset, o.node, o.offset);\n          }\n        }, {\n          key: \"getWordsMatchRange\",\n          value: function (e) {\n            var o = this.getEndPoint(),\n              n = ht.prevPointUntil(o, function (n) {\n                if (!ht.isCharPoint(n) && !ht.isSpacePoint(n)) return !0;\n                var i = new t(n.node, n.offset, o.node, o.offset),\n                  r = e.exec(i.toString());\n                return r && 0 === r.index;\n              }),\n              i = new t(n.node, n.offset, o.node, o.offset),\n              r = i.toString(),\n              a = e.exec(r);\n            return a && a[0].length === r.length ? i : null;\n          }\n        }, {\n          key: \"bookmark\",\n          value: function (t) {\n            return {\n              s: {\n                path: ht.makeOffsetPath(t, this.sc),\n                offset: this.so\n              },\n              e: {\n                path: ht.makeOffsetPath(t, this.ec),\n                offset: this.eo\n              }\n            };\n          }\n        }, {\n          key: \"paraBookmark\",\n          value: function (t) {\n            return {\n              s: {\n                path: y.tail(ht.makeOffsetPath(y.head(t), this.sc)),\n                offset: this.so\n              },\n              e: {\n                path: y.tail(ht.makeOffsetPath(y.last(t), this.ec)),\n                offset: this.eo\n              }\n            };\n          }\n        }, {\n          key: \"getClientRects\",\n          value: function () {\n            return this.nativeRange().getClientRects();\n          }\n        }], n && vt(o.prototype, n), i && vt(o, i), t;\n      }();\n      const kt = {\n        create: function (t, e, o, n) {\n          if (4 === arguments.length) return new bt(t, e, o, n);\n          if (2 === arguments.length) return new bt(t, e, o = t, n = e);\n          var i = this.createFromSelection();\n          if (!i && 1 === arguments.length) {\n            var r = arguments[0];\n            return ht.isEditable(r) && (r = r.lastChild), this.createFromBodyElement(r, ht.emptyPara === arguments[0].innerHTML);\n          }\n          return i;\n        },\n        createFromBodyElement: function (t) {\n          var e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1],\n            o = this.createFromNode(t);\n          return o.collapse(e);\n        },\n        createFromSelection: function () {\n          var t, e, o, n;\n          if (f.isW3CRangeSupport) {\n            var i = document.getSelection();\n            if (!i || 0 === i.rangeCount) return null;\n            if (ht.isBody(i.anchorNode)) return null;\n            var r = i.getRangeAt(0);\n            t = r.startContainer, e = r.startOffset, o = r.endContainer, n = r.endOffset;\n          } else {\n            var a = document.selection.createRange(),\n              s = a.duplicate();\n            s.collapse(!1);\n            var l = a;\n            l.collapse(!0);\n            var c = mt(l, !0),\n              u = mt(s, !1);\n            ht.isText(c.node) && ht.isLeftEdgePoint(c) && ht.isTextNode(u.node) && ht.isRightEdgePoint(u) && u.node.nextSibling === c.node && (c = u), t = c.cont, e = c.offset, o = u.cont, n = u.offset;\n          }\n          return new bt(t, e, o, n);\n        },\n        createFromNode: function (t) {\n          var e = t,\n            o = 0,\n            n = t,\n            i = ht.nodeLength(n);\n          return ht.isVoid(e) && (o = ht.listPrev(e).length - 1, e = e.parentNode), ht.isBR(n) ? (i = ht.listPrev(n).length - 1, n = n.parentNode) : ht.isVoid(n) && (i = ht.listPrev(n).length, n = n.parentNode), this.create(e, o, n, i);\n        },\n        createFromNodeBefore: function (t) {\n          return this.createFromNode(t).collapse(!0);\n        },\n        createFromNodeAfter: function (t) {\n          return this.createFromNode(t).collapse();\n        },\n        createFromBookmark: function (t, e) {\n          var o = ht.fromOffsetPath(t, e.s.path),\n            n = e.s.offset,\n            i = ht.fromOffsetPath(t, e.e.path),\n            r = e.e.offset;\n          return new bt(o, n, i, r);\n        },\n        createFromParaBookmark: function (t, e) {\n          var o = t.s.offset,\n            n = t.e.offset,\n            i = ht.fromOffsetPath(y.head(e), t.s.path),\n            r = ht.fromOffsetPath(y.last(e), t.e.path);\n          return new bt(i, o, r, n);\n        }\n      };\n      var yt = {\n        BACKSPACE: 8,\n        TAB: 9,\n        ENTER: 13,\n        ESCAPE: 27,\n        SPACE: 32,\n        DELETE: 46,\n        LEFT: 37,\n        UP: 38,\n        RIGHT: 39,\n        DOWN: 40,\n        NUM0: 48,\n        NUM1: 49,\n        NUM2: 50,\n        NUM3: 51,\n        NUM4: 52,\n        NUM5: 53,\n        NUM6: 54,\n        NUM7: 55,\n        NUM8: 56,\n        B: 66,\n        E: 69,\n        I: 73,\n        J: 74,\n        K: 75,\n        L: 76,\n        R: 82,\n        S: 83,\n        U: 85,\n        V: 86,\n        Y: 89,\n        Z: 90,\n        SLASH: 191,\n        LEFTBRACKET: 219,\n        BACKSLASH: 220,\n        RIGHTBRACKET: 221,\n        HOME: 36,\n        END: 35,\n        PAGEUP: 33,\n        PAGEDOWN: 34\n      };\n      const wt = {\n        isEdit: function (t) {\n          return y.contains([yt.BACKSPACE, yt.TAB, yt.ENTER, yt.SPACE, yt.DELETE], t);\n        },\n        isMove: function (t) {\n          return y.contains([yt.LEFT, yt.UP, yt.RIGHT, yt.DOWN], t);\n        },\n        isNavigation: function (t) {\n          return y.contains([yt.HOME, yt.END, yt.PAGEUP, yt.PAGEDOWN], t);\n        },\n        nameFromCode: v.invertObject(yt),\n        code: yt\n      };\n      function Ct(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var xt = function () {\n        function t(e) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.stack = [], this.stackOffset = -1, this.context = e, this.$editable = e.layoutInfo.editable, this.editable = this.$editable[0];\n        }\n        var e, o, n;\n        return e = t, (o = [{\n          key: \"makeSnapshot\",\n          value: function () {\n            var t = kt.create(this.editable);\n            return {\n              contents: this.$editable.html(),\n              bookmark: t && t.isOnEditable() ? t.bookmark(this.editable) : {\n                s: {\n                  path: [],\n                  offset: 0\n                },\n                e: {\n                  path: [],\n                  offset: 0\n                }\n              }\n            };\n          }\n        }, {\n          key: \"applySnapshot\",\n          value: function (t) {\n            null !== t.contents && this.$editable.html(t.contents), null !== t.bookmark && kt.createFromBookmark(this.editable, t.bookmark).select();\n          }\n        }, {\n          key: \"rewind\",\n          value: function () {\n            this.$editable.html() !== this.stack[this.stackOffset].contents && this.recordUndo(), this.stackOffset = 0, this.applySnapshot(this.stack[this.stackOffset]);\n          }\n        }, {\n          key: \"commit\",\n          value: function () {\n            this.stack = [], this.stackOffset = -1, this.recordUndo();\n          }\n        }, {\n          key: \"reset\",\n          value: function () {\n            this.stack = [], this.stackOffset = -1, this.$editable.html(\"\"), this.recordUndo();\n          }\n        }, {\n          key: \"undo\",\n          value: function () {\n            this.$editable.html() !== this.stack[this.stackOffset].contents && this.recordUndo(), this.stackOffset > 0 && (this.stackOffset--, this.applySnapshot(this.stack[this.stackOffset]));\n          }\n        }, {\n          key: \"redo\",\n          value: function () {\n            this.stack.length - 1 > this.stackOffset && (this.stackOffset++, this.applySnapshot(this.stack[this.stackOffset]));\n          }\n        }, {\n          key: \"recordUndo\",\n          value: function () {\n            this.stackOffset++, this.stack.length > this.stackOffset && (this.stack = this.stack.slice(0, this.stackOffset)), this.stack.push(this.makeSnapshot()), this.stack.length > this.context.options.historyLimit && (this.stack.shift(), this.stackOffset -= 1);\n          }\n        }]) && Ct(e.prototype, o), n && Ct(e, n), t;\n      }();\n      function St(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Tt = function () {\n        function t() {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t);\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"jQueryCSS\",\n          value: function (t, o) {\n            var n = {};\n            return e().each(o, function (e, o) {\n              n[o] = t.css(o);\n            }), n;\n          }\n        }, {\n          key: \"fromNode\",\n          value: function (t) {\n            var e = this.jQueryCSS(t, [\"font-family\", \"font-size\", \"text-align\", \"list-style-type\", \"line-height\"]) || {},\n              o = t[0].style.fontSize || e[\"font-size\"];\n            return e[\"font-size\"] = parseInt(o, 10), e[\"font-size-unit\"] = o.match(/[a-z%]+$/), e;\n          }\n        }, {\n          key: \"stylePara\",\n          value: function (t, o) {\n            e().each(t.nodes(ht.isPara, {\n              includeAncestor: !0\n            }), function (t, n) {\n              e()(n).css(o);\n            });\n          }\n        }, {\n          key: \"styleNodes\",\n          value: function (t, o) {\n            t = t.splitText();\n            var n = o && o.nodeName || \"SPAN\",\n              i = !(!o || !o.expandClosestSibling),\n              r = !(!o || !o.onlyPartialContains);\n            if (t.isCollapsed()) return [t.insertNode(ht.create(n))];\n            var a = ht.makePredByNodeName(n),\n              s = t.nodes(ht.isText, {\n                fullyContains: !0\n              }).map(function (t) {\n                return ht.singleChildAncestor(t, a) || ht.wrap(t, n);\n              });\n            if (i) {\n              if (r) {\n                var l = t.nodes();\n                a = v.and(a, function (t) {\n                  return y.contains(l, t);\n                });\n              }\n              return s.map(function (t) {\n                var o = ht.withClosestSiblings(t, a),\n                  n = y.head(o),\n                  i = y.tail(o);\n                return e().each(i, function (t, e) {\n                  ht.appendChildNodes(n, e.childNodes), ht.remove(e);\n                }), y.head(o);\n              });\n            }\n            return s;\n          }\n        }, {\n          key: \"current\",\n          value: function (t) {\n            var o = e()(ht.isElement(t.sc) ? t.sc : t.sc.parentNode),\n              n = this.fromNode(o);\n            try {\n              n = e().extend(n, {\n                \"font-bold\": document.queryCommandState(\"bold\") ? \"bold\" : \"normal\",\n                \"font-italic\": document.queryCommandState(\"italic\") ? \"italic\" : \"normal\",\n                \"font-underline\": document.queryCommandState(\"underline\") ? \"underline\" : \"normal\",\n                \"font-subscript\": document.queryCommandState(\"subscript\") ? \"subscript\" : \"normal\",\n                \"font-superscript\": document.queryCommandState(\"superscript\") ? \"superscript\" : \"normal\",\n                \"font-strikethrough\": document.queryCommandState(\"strikethrough\") ? \"strikethrough\" : \"normal\",\n                \"font-family\": document.queryCommandValue(\"fontname\") || n[\"font-family\"]\n              });\n            } catch (t) {}\n            if (t.isOnList()) {\n              var i = [\"circle\", \"disc\", \"disc-leading-zero\", \"square\"].indexOf(n[\"list-style-type\"]) > -1;\n              n[\"list-style\"] = i ? \"unordered\" : \"ordered\";\n            } else n[\"list-style\"] = \"none\";\n            var r = ht.ancestor(t.sc, ht.isPara);\n            if (r && r.style[\"line-height\"]) n[\"line-height\"] = r.style.lineHeight;else {\n              var a = parseInt(n[\"line-height\"], 10) / parseInt(n[\"font-size\"], 10);\n              n[\"line-height\"] = a.toFixed(1);\n            }\n            return n.anchor = t.isOnAnchor() && ht.ancestor(t.sc, ht.isAnchor), n.ancestors = ht.listAncestor(t.sc, ht.isEditable), n.range = t, n;\n          }\n        }], n && St(o.prototype, n), i && St(o, i), t;\n      }();\n      function Et(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var $t = function () {\n        function t() {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t);\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"insertOrderedList\",\n          value: function (t) {\n            this.toggleList(\"OL\", t);\n          }\n        }, {\n          key: \"insertUnorderedList\",\n          value: function (t) {\n            this.toggleList(\"UL\", t);\n          }\n        }, {\n          key: \"indent\",\n          value: function (t) {\n            var o = this,\n              n = kt.create(t).wrapBodyInlineWithPara(),\n              i = n.nodes(ht.isPara, {\n                includeAncestor: !0\n              }),\n              r = y.clusterBy(i, v.peq2(\"parentNode\"));\n            e().each(r, function (t, n) {\n              var i = y.head(n);\n              if (ht.isLi(i)) {\n                var r = o.findList(i.previousSibling);\n                r ? n.map(function (t) {\n                  return r.appendChild(t);\n                }) : (o.wrapList(n, i.parentNode.nodeName), n.map(function (t) {\n                  return t.parentNode;\n                }).map(function (t) {\n                  return o.appendToPrevious(t);\n                }));\n              } else e().each(n, function (t, o) {\n                e()(o).css(\"marginLeft\", function (t, e) {\n                  return (parseInt(e, 10) || 0) + 25;\n                });\n              });\n            }), n.select();\n          }\n        }, {\n          key: \"outdent\",\n          value: function (t) {\n            var o = this,\n              n = kt.create(t).wrapBodyInlineWithPara(),\n              i = n.nodes(ht.isPara, {\n                includeAncestor: !0\n              }),\n              r = y.clusterBy(i, v.peq2(\"parentNode\"));\n            e().each(r, function (t, n) {\n              var i = y.head(n);\n              ht.isLi(i) ? o.releaseList([n]) : e().each(n, function (t, o) {\n                e()(o).css(\"marginLeft\", function (t, e) {\n                  return (e = parseInt(e, 10) || 0) > 25 ? e - 25 : \"\";\n                });\n              });\n            }), n.select();\n          }\n        }, {\n          key: \"toggleList\",\n          value: function (t, o) {\n            var n = this,\n              i = kt.create(o).wrapBodyInlineWithPara(),\n              r = i.nodes(ht.isPara, {\n                includeAncestor: !0\n              }),\n              a = i.paraBookmark(r),\n              s = y.clusterBy(r, v.peq2(\"parentNode\"));\n            if (y.find(r, ht.isPurePara)) {\n              var l = [];\n              e().each(s, function (e, o) {\n                l = l.concat(n.wrapList(o, t));\n              }), r = l;\n            } else {\n              var c = i.nodes(ht.isList, {\n                includeAncestor: !0\n              }).filter(function (o) {\n                return !e().nodeName(o, t);\n              });\n              c.length ? e().each(c, function (e, o) {\n                ht.replace(o, t);\n              }) : r = this.releaseList(s, !0);\n            }\n            kt.createFromParaBookmark(a, r).select();\n          }\n        }, {\n          key: \"wrapList\",\n          value: function (t, e) {\n            var o = y.head(t),\n              n = y.last(t),\n              i = ht.isList(o.previousSibling) && o.previousSibling,\n              r = ht.isList(n.nextSibling) && n.nextSibling,\n              a = i || ht.insertAfter(ht.create(e || \"UL\"), n);\n            return t = t.map(function (t) {\n              return ht.isPurePara(t) ? ht.replace(t, \"LI\") : t;\n            }), ht.appendChildNodes(a, t), r && (ht.appendChildNodes(a, y.from(r.childNodes)), ht.remove(r)), t;\n          }\n        }, {\n          key: \"releaseList\",\n          value: function (t, o) {\n            var n = this,\n              i = [];\n            return e().each(t, function (t, r) {\n              var a = y.head(r),\n                s = y.last(r),\n                l = o ? ht.lastAncestor(a, ht.isList) : a.parentNode,\n                c = l.parentNode;\n              if (\"LI\" === l.parentNode.nodeName) r.map(function (t) {\n                var e = n.findNextSiblings(t);\n                c.nextSibling ? c.parentNode.insertBefore(t, c.nextSibling) : c.parentNode.appendChild(t), e.length && (n.wrapList(e, l.nodeName), t.appendChild(e[0].parentNode));\n              }), 0 === l.children.length && c.removeChild(l), 0 === c.childNodes.length && c.parentNode.removeChild(c);else {\n                var u = l.childNodes.length > 1 ? ht.splitTree(l, {\n                    node: s.parentNode,\n                    offset: ht.position(s) + 1\n                  }, {\n                    isSkipPaddingBlankHTML: !0\n                  }) : null,\n                  d = ht.splitTree(l, {\n                    node: a.parentNode,\n                    offset: ht.position(a)\n                  }, {\n                    isSkipPaddingBlankHTML: !0\n                  });\n                r = o ? ht.listDescendant(d, ht.isLi) : y.from(d.childNodes).filter(ht.isLi), !o && ht.isList(l.parentNode) || (r = r.map(function (t) {\n                  return ht.replace(t, \"P\");\n                })), e().each(y.from(r).reverse(), function (t, e) {\n                  ht.insertAfter(e, l);\n                });\n                var h = y.compact([l, d, u]);\n                e().each(h, function (t, o) {\n                  var n = [o].concat(ht.listDescendant(o, ht.isList));\n                  e().each(n.reverse(), function (t, e) {\n                    ht.nodeLength(e) || ht.remove(e, !0);\n                  });\n                });\n              }\n              i = i.concat(r);\n            }), i;\n          }\n        }, {\n          key: \"appendToPrevious\",\n          value: function (t) {\n            return t.previousSibling ? ht.appendChildNodes(t.previousSibling, [t]) : this.wrapList([t], \"LI\");\n          }\n        }, {\n          key: \"findList\",\n          value: function (t) {\n            return t ? y.find(t.children, function (t) {\n              return [\"OL\", \"UL\"].indexOf(t.nodeName) > -1;\n            }) : null;\n          }\n        }, {\n          key: \"findNextSiblings\",\n          value: function (t) {\n            for (var e = []; t.nextSibling;) e.push(t.nextSibling), t = t.nextSibling;\n            return e;\n          }\n        }], n && Et(o.prototype, n), i && Et(o, i), t;\n      }();\n      function Nt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var It = function () {\n        function t(e) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.bullet = new $t(), this.options = e.options;\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"insertTab\",\n          value: function (t, e) {\n            var o = ht.createText(new Array(e + 1).join(ht.NBSP_CHAR));\n            (t = t.deleteContents()).insertNode(o, !0), (t = kt.create(o, e)).select();\n          }\n        }, {\n          key: \"insertParagraph\",\n          value: function (t, o) {\n            o = (o = (o = o || kt.create(t)).deleteContents()).wrapBodyInlineWithPara();\n            var n,\n              i = ht.ancestor(o.sc, ht.isPara);\n            if (i) {\n              if (ht.isLi(i) && (ht.isEmpty(i) || ht.deepestChildIsEmpty(i))) return void this.bullet.toggleList(i.parentNode.nodeName);\n              var r = null;\n              if (1 === this.options.blockquoteBreakingLevel ? r = ht.ancestor(i, ht.isBlockquote) : 2 === this.options.blockquoteBreakingLevel && (r = ht.lastAncestor(i, ht.isBlockquote)), r) {\n                n = e()(ht.emptyPara)[0], ht.isRightEdgePoint(o.getStartPoint()) && ht.isBR(o.sc.nextSibling) && e()(o.sc.nextSibling).remove();\n                var a = ht.splitTree(r, o.getStartPoint(), {\n                  isDiscardEmptySplits: !0\n                });\n                a ? a.parentNode.insertBefore(n, a) : ht.insertAfter(n, r);\n              } else {\n                n = ht.splitTree(i, o.getStartPoint());\n                var s = ht.listDescendant(i, ht.isEmptyAnchor);\n                s = s.concat(ht.listDescendant(n, ht.isEmptyAnchor)), e().each(s, function (t, e) {\n                  ht.remove(e);\n                }), (ht.isHeading(n) || ht.isPre(n) || ht.isCustomStyleTag(n)) && ht.isEmpty(n) && (n = ht.replace(n, \"p\"));\n              }\n            } else {\n              var l = o.sc.childNodes[o.so];\n              n = e()(ht.emptyPara)[0], l ? o.sc.insertBefore(n, l) : o.sc.appendChild(n);\n            }\n            kt.create(n, 0).normalize().select().scrollIntoView(t);\n          }\n        }], n && Nt(o.prototype, n), i && Nt(o, i), t;\n      }();\n      function Pt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Rt = function t(e, o, n, i) {\n        var r = {\n            colPos: 0,\n            rowPos: 0\n          },\n          a = [],\n          s = [];\n        function l(t, e, o, n, i, r, s) {\n          var l = {\n            baseRow: o,\n            baseCell: n,\n            isRowSpan: i,\n            isColSpan: r,\n            isVirtual: s\n          };\n          a[t] || (a[t] = []), a[t][e] = l;\n        }\n        function c(t, e, o, n) {\n          return {\n            baseCell: t.baseCell,\n            action: e,\n            virtualTable: {\n              rowIndex: o,\n              cellIndex: n\n            }\n          };\n        }\n        function u(t, e) {\n          if (!a[t]) return e;\n          if (!a[t][e]) return e;\n          for (var o = e; a[t][o];) if (o++, !a[t][o]) return o;\n        }\n        function d(t, e) {\n          var o = u(t.rowIndex, e.cellIndex),\n            n = e.colSpan > 1,\n            i = e.rowSpan > 1,\n            a = t.rowIndex === r.rowPos && e.cellIndex === r.colPos;\n          l(t.rowIndex, o, t, e, i, n, !1);\n          var s = e.attributes.rowSpan ? parseInt(e.attributes.rowSpan.value, 10) : 0;\n          if (s > 1) for (var c = 1; c < s; c++) {\n            var d = t.rowIndex + c;\n            h(d, o, e, a), l(d, o, t, e, !0, n, !0);\n          }\n          var f = e.attributes.colSpan ? parseInt(e.attributes.colSpan.value, 10) : 0;\n          if (f > 1) for (var p = 1; p < f; p++) {\n            var v = u(t.rowIndex, o + p);\n            h(t.rowIndex, v, e, a), l(t.rowIndex, v, t, e, i, !0, !0);\n          }\n        }\n        function h(t, e, o, n) {\n          t === r.rowPos && r.colPos >= o.cellIndex && o.cellIndex <= e && !n && r.colPos++;\n        }\n        function f(e) {\n          switch (o) {\n            case t.where.Column:\n              if (e.isColSpan) return t.resultAction.SubtractSpanCount;\n              break;\n            case t.where.Row:\n              if (!e.isVirtual && e.isRowSpan) return t.resultAction.AddCell;\n              if (e.isRowSpan) return t.resultAction.SubtractSpanCount;\n          }\n          return t.resultAction.RemoveCell;\n        }\n        function p(e) {\n          switch (o) {\n            case t.where.Column:\n              if (e.isColSpan) return t.resultAction.SumSpanCount;\n              if (e.isRowSpan && e.isVirtual) return t.resultAction.Ignore;\n              break;\n            case t.where.Row:\n              if (e.isRowSpan) return t.resultAction.SumSpanCount;\n              if (e.isColSpan && e.isVirtual) return t.resultAction.Ignore;\n          }\n          return t.resultAction.AddCell;\n        }\n        this.getActionList = function () {\n          for (var e = o === t.where.Row ? r.rowPos : -1, i = o === t.where.Column ? r.colPos : -1, l = 0, u = !0; u;) {\n            var d = e >= 0 ? e : l,\n              h = i >= 0 ? i : l,\n              v = a[d];\n            if (!v) return u = !1, s;\n            var m = v[h];\n            if (!m) return u = !1, s;\n            var g = t.resultAction.Ignore;\n            switch (n) {\n              case t.requestAction.Add:\n                g = p(m);\n                break;\n              case t.requestAction.Delete:\n                g = f(m);\n            }\n            s.push(c(m, g, d, h)), l++;\n          }\n          return s;\n        }, e && e.tagName && (\"td\" === e.tagName.toLowerCase() || \"th\" === e.tagName.toLowerCase()) && (r.colPos = e.cellIndex, e.parentElement && e.parentElement.tagName && \"tr\" === e.parentElement.tagName.toLowerCase() && (r.rowPos = e.parentElement.rowIndex)), function () {\n          for (var t = i.rows, e = 0; e < t.length; e++) for (var o = t[e].cells, n = 0; n < o.length; n++) d(t[e], o[n]);\n        }();\n      };\n      Rt.where = {\n        Row: 0,\n        Column: 1\n      }, Rt.requestAction = {\n        Add: 0,\n        Delete: 1\n      }, Rt.resultAction = {\n        Ignore: 0,\n        SubtractSpanCount: 1,\n        RemoveCell: 2,\n        AddCell: 3,\n        SumSpanCount: 4\n      };\n      var Lt = function () {\n        function t() {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t);\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"tab\",\n          value: function (t, e) {\n            var o = ht.ancestor(t.commonAncestor(), ht.isCell),\n              n = ht.ancestor(o, ht.isTable),\n              i = ht.listDescendant(n, ht.isCell),\n              r = y[e ? \"prev\" : \"next\"](i, o);\n            r && kt.create(r, 0).select();\n          }\n        }, {\n          key: \"addRow\",\n          value: function (t, o) {\n            for (var n = ht.ancestor(t.commonAncestor(), ht.isCell), i = e()(n).closest(\"tr\"), r = this.recoverAttributes(i), a = e()(\"<tr\" + r + \"></tr>\"), s = new Rt(n, Rt.where.Row, Rt.requestAction.Add, e()(i).closest(\"table\")[0]).getActionList(), l = 0; l < s.length; l++) {\n              var c = s[l],\n                u = this.recoverAttributes(c.baseCell);\n              switch (c.action) {\n                case Rt.resultAction.AddCell:\n                  a.append(\"<td\" + u + \">\" + ht.blank + \"</td>\");\n                  break;\n                case Rt.resultAction.SumSpanCount:\n                  if (\"top\" === o && (c.baseCell.parent ? c.baseCell.closest(\"tr\").rowIndex : 0) <= i[0].rowIndex) {\n                    var d = e()(\"<div></div>\").append(e()(\"<td\" + u + \">\" + ht.blank + \"</td>\").removeAttr(\"rowspan\")).html();\n                    a.append(d);\n                    break;\n                  }\n                  var h = parseInt(c.baseCell.rowSpan, 10);\n                  h++, c.baseCell.setAttribute(\"rowSpan\", h);\n              }\n            }\n            if (\"top\" === o) i.before(a);else {\n              if (n.rowSpan > 1) {\n                var f = i[0].rowIndex + (n.rowSpan - 2);\n                return void e()(e()(i).parent().find(\"tr\")[f]).after(e()(a));\n              }\n              i.after(a);\n            }\n          }\n        }, {\n          key: \"addCol\",\n          value: function (t, o) {\n            var n = ht.ancestor(t.commonAncestor(), ht.isCell),\n              i = e()(n).closest(\"tr\");\n            e()(i).siblings().push(i);\n            for (var r = new Rt(n, Rt.where.Column, Rt.requestAction.Add, e()(i).closest(\"table\")[0]).getActionList(), a = 0; a < r.length; a++) {\n              var s = r[a],\n                l = this.recoverAttributes(s.baseCell);\n              switch (s.action) {\n                case Rt.resultAction.AddCell:\n                  \"right\" === o ? e()(s.baseCell).after(\"<td\" + l + \">\" + ht.blank + \"</td>\") : e()(s.baseCell).before(\"<td\" + l + \">\" + ht.blank + \"</td>\");\n                  break;\n                case Rt.resultAction.SumSpanCount:\n                  if (\"right\" === o) {\n                    var c = parseInt(s.baseCell.colSpan, 10);\n                    c++, s.baseCell.setAttribute(\"colSpan\", c);\n                  } else e()(s.baseCell).before(\"<td\" + l + \">\" + ht.blank + \"</td>\");\n              }\n            }\n          }\n        }, {\n          key: \"recoverAttributes\",\n          value: function (t) {\n            var e = \"\";\n            if (!t) return e;\n            for (var o = t.attributes || [], n = 0; n < o.length; n++) \"id\" !== o[n].name.toLowerCase() && o[n].specified && (e += \" \" + o[n].name + \"='\" + o[n].value + \"'\");\n            return e;\n          }\n        }, {\n          key: \"deleteRow\",\n          value: function (t) {\n            for (var o = ht.ancestor(t.commonAncestor(), ht.isCell), n = e()(o).closest(\"tr\"), i = n.children(\"td, th\").index(e()(o)), r = n[0].rowIndex, a = new Rt(o, Rt.where.Row, Rt.requestAction.Delete, e()(n).closest(\"table\")[0]).getActionList(), s = 0; s < a.length; s++) if (a[s]) {\n              var l = a[s].baseCell,\n                c = a[s].virtualTable,\n                u = l.rowSpan && l.rowSpan > 1,\n                d = u ? parseInt(l.rowSpan, 10) : 0;\n              switch (a[s].action) {\n                case Rt.resultAction.Ignore:\n                  continue;\n                case Rt.resultAction.AddCell:\n                  var h = n.next(\"tr\")[0];\n                  if (!h) continue;\n                  var f = n[0].cells[i];\n                  u && (d > 2 ? (d--, h.insertBefore(f, h.cells[i]), h.cells[i].setAttribute(\"rowSpan\", d), h.cells[i].innerHTML = \"\") : 2 === d && (h.insertBefore(f, h.cells[i]), h.cells[i].removeAttribute(\"rowSpan\"), h.cells[i].innerHTML = \"\"));\n                  continue;\n                case Rt.resultAction.SubtractSpanCount:\n                  u && (d > 2 ? (d--, l.setAttribute(\"rowSpan\", d), c.rowIndex !== r && l.cellIndex === i && (l.innerHTML = \"\")) : 2 === d && (l.removeAttribute(\"rowSpan\"), c.rowIndex !== r && l.cellIndex === i && (l.innerHTML = \"\")));\n                  continue;\n                case Rt.resultAction.RemoveCell:\n                  continue;\n              }\n            }\n            n.remove();\n          }\n        }, {\n          key: \"deleteCol\",\n          value: function (t) {\n            for (var o = ht.ancestor(t.commonAncestor(), ht.isCell), n = e()(o).closest(\"tr\"), i = n.children(\"td, th\").index(e()(o)), r = new Rt(o, Rt.where.Column, Rt.requestAction.Delete, e()(n).closest(\"table\")[0]).getActionList(), a = 0; a < r.length; a++) if (r[a]) switch (r[a].action) {\n              case Rt.resultAction.Ignore:\n                continue;\n              case Rt.resultAction.SubtractSpanCount:\n                var s = r[a].baseCell;\n                if (s.colSpan && s.colSpan > 1) {\n                  var l = s.colSpan ? parseInt(s.colSpan, 10) : 0;\n                  l > 2 ? (l--, s.setAttribute(\"colSpan\", l), s.cellIndex === i && (s.innerHTML = \"\")) : 2 === l && (s.removeAttribute(\"colSpan\"), s.cellIndex === i && (s.innerHTML = \"\"));\n                }\n                continue;\n              case Rt.resultAction.RemoveCell:\n                ht.remove(r[a].baseCell, !0);\n                continue;\n            }\n          }\n        }, {\n          key: \"createTable\",\n          value: function (t, o, n) {\n            for (var i, r = [], a = 0; a < t; a++) r.push(\"<td>\" + ht.blank + \"</td>\");\n            i = r.join(\"\");\n            for (var s, l = [], c = 0; c < o; c++) l.push(\"<tr>\" + i + \"</tr>\");\n            s = l.join(\"\");\n            var u = e()(\"<table>\" + s + \"</table>\");\n            return n && n.tableClassName && u.addClass(n.tableClassName), u[0];\n          }\n        }, {\n          key: \"deleteTable\",\n          value: function (t) {\n            var o = ht.ancestor(t.commonAncestor(), ht.isCell);\n            e()(o).closest(\"table\").remove();\n          }\n        }], n && Pt(o.prototype, n), i && Pt(o, i), t;\n      }();\n      function At(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Ft = function () {\n        function t(o) {\n          var n = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.$note = o.layoutInfo.note, this.$editor = o.layoutInfo.editor, this.$editable = o.layoutInfo.editable, this.options = o.options, this.lang = this.options.langInfo, this.editable = this.$editable[0], this.lastRange = null, this.snapshot = null, this.style = new Tt(), this.table = new Lt(), this.typing = new It(o), this.bullet = new $t(), this.history = new xt(o), this.context.memo(\"help.escape\", this.lang.help.escape), this.context.memo(\"help.undo\", this.lang.help.undo), this.context.memo(\"help.redo\", this.lang.help.redo), this.context.memo(\"help.tab\", this.lang.help.tab), this.context.memo(\"help.untab\", this.lang.help.untab), this.context.memo(\"help.insertParagraph\", this.lang.help.insertParagraph), this.context.memo(\"help.insertOrderedList\", this.lang.help.insertOrderedList), this.context.memo(\"help.insertUnorderedList\", this.lang.help.insertUnorderedList), this.context.memo(\"help.indent\", this.lang.help.indent), this.context.memo(\"help.outdent\", this.lang.help.outdent), this.context.memo(\"help.formatPara\", this.lang.help.formatPara), this.context.memo(\"help.insertHorizontalRule\", this.lang.help.insertHorizontalRule), this.context.memo(\"help.fontName\", this.lang.help.fontName);\n          for (var i = [\"bold\", \"italic\", \"underline\", \"strikethrough\", \"superscript\", \"subscript\", \"justifyLeft\", \"justifyCenter\", \"justifyRight\", \"justifyFull\", \"formatBlock\", \"removeFormat\", \"backColor\"], r = 0, a = i.length; r < a; r++) this[i[r]] = function (t) {\n            return function (e) {\n              n.beforeCommand(), document.execCommand(t, !1, e), n.afterCommand(!0);\n            };\n          }(i[r]), this.context.memo(\"help.\" + i[r], this.lang.help[i[r]]);\n          this.fontName = this.wrapCommand(function (t) {\n            return n.fontStyling(\"font-family\", f.validFontName(t));\n          }), this.fontSize = this.wrapCommand(function (t) {\n            var e = n.currentStyle()[\"font-size-unit\"];\n            return n.fontStyling(\"font-size\", t + e);\n          }), this.fontSizeUnit = this.wrapCommand(function (t) {\n            var e = n.currentStyle()[\"font-size\"];\n            return n.fontStyling(\"font-size\", e + t);\n          });\n          for (var s = 1; s <= 6; s++) this[\"formatH\" + s] = function (t) {\n            return function () {\n              n.formatBlock(\"H\" + t);\n            };\n          }(s), this.context.memo(\"help.formatH\" + s, this.lang.help[\"formatH\" + s]);\n          this.insertParagraph = this.wrapCommand(function () {\n            n.typing.insertParagraph(n.editable);\n          }), this.insertOrderedList = this.wrapCommand(function () {\n            n.bullet.insertOrderedList(n.editable);\n          }), this.insertUnorderedList = this.wrapCommand(function () {\n            n.bullet.insertUnorderedList(n.editable);\n          }), this.indent = this.wrapCommand(function () {\n            n.bullet.indent(n.editable);\n          }), this.outdent = this.wrapCommand(function () {\n            n.bullet.outdent(n.editable);\n          }), this.insertNode = this.wrapCommand(function (t) {\n            n.isLimited(e()(t).text().length) || (n.getLastRange().insertNode(t), n.setLastRange(kt.createFromNodeAfter(t).select()));\n          }), this.insertText = this.wrapCommand(function (t) {\n            if (!n.isLimited(t.length)) {\n              var e = n.getLastRange().insertNode(ht.createText(t));\n              n.setLastRange(kt.create(e, ht.nodeLength(e)).select());\n            }\n          }), this.pasteHTML = this.wrapCommand(function (t) {\n            if (!n.isLimited(t.length)) {\n              t = n.context.invoke(\"codeview.purify\", t);\n              var e = n.getLastRange().pasteHTML(t);\n              n.setLastRange(kt.createFromNodeAfter(y.last(e)).select());\n            }\n          }), this.formatBlock = this.wrapCommand(function (t, e) {\n            var o = n.options.callbacks.onApplyCustomStyle;\n            o ? o.call(n, e, n.context, n.onFormatBlock) : n.onFormatBlock(t, e);\n          }), this.insertHorizontalRule = this.wrapCommand(function () {\n            var t = n.getLastRange().insertNode(ht.create(\"HR\"));\n            t.nextSibling && n.setLastRange(kt.create(t.nextSibling, 0).normalize().select());\n          }), this.lineHeight = this.wrapCommand(function (t) {\n            n.style.stylePara(n.getLastRange(), {\n              lineHeight: t\n            });\n          }), this.createLink = this.wrapCommand(function (t) {\n            var o = t.url,\n              i = t.text,\n              r = t.isNewWindow,\n              a = t.checkProtocol,\n              s = t.range || n.getLastRange(),\n              l = i.length - s.toString().length;\n            if (!(l > 0 && n.isLimited(l))) {\n              var c = s.toString() !== i;\n              \"string\" == typeof o && (o = o.trim()), n.options.onCreateLink ? o = n.options.onCreateLink(o) : a && (o = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/.test(o) ? o : n.options.defaultProtocol + o);\n              var u = [];\n              if (c) {\n                var d = (s = s.deleteContents()).insertNode(e()(\"<A>\" + i + \"</A>\")[0]);\n                u.push(d);\n              } else u = n.style.styleNodes(s, {\n                nodeName: \"A\",\n                expandClosestSibling: !0,\n                onlyPartialContains: !0\n              });\n              e().each(u, function (t, n) {\n                e()(n).attr(\"href\", o), r ? e()(n).attr(\"target\", \"_blank\") : e()(n).removeAttr(\"target\");\n              }), n.setLastRange(n.createRangeFromList(u).select());\n            }\n          }), this.color = this.wrapCommand(function (t) {\n            var e = t.foreColor,\n              o = t.backColor;\n            e && document.execCommand(\"foreColor\", !1, e), o && document.execCommand(\"backColor\", !1, o);\n          }), this.foreColor = this.wrapCommand(function (t) {\n            document.execCommand(\"foreColor\", !1, t);\n          }), this.insertTable = this.wrapCommand(function (t) {\n            var e = t.split(\"x\");\n            n.getLastRange().deleteContents().insertNode(n.table.createTable(e[0], e[1], n.options));\n          }), this.removeMedia = this.wrapCommand(function () {\n            var t = e()(n.restoreTarget()).parent();\n            t.closest(\"figure\").length ? t.closest(\"figure\").remove() : t = e()(n.restoreTarget()).detach(), n.context.triggerEvent(\"media.delete\", t, n.$editable);\n          }), this.floatMe = this.wrapCommand(function (t) {\n            var o = e()(n.restoreTarget());\n            o.toggleClass(\"note-float-left\", \"left\" === t), o.toggleClass(\"note-float-right\", \"right\" === t), o.css(\"float\", \"none\" === t ? \"\" : t);\n          }), this.resize = this.wrapCommand(function (t) {\n            var o = e()(n.restoreTarget());\n            0 === (t = parseFloat(t)) ? o.css(\"width\", \"\") : o.css({\n              width: 100 * t + \"%\",\n              height: \"\"\n            });\n          });\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"initialize\",\n          value: function () {\n            var t = this;\n            this.$editable.on(\"keydown\", function (e) {\n              if (e.keyCode === wt.code.ENTER && t.context.triggerEvent(\"enter\", e), t.context.triggerEvent(\"keydown\", e), t.snapshot = t.history.makeSnapshot(), t.hasKeyShortCut = !1, e.isDefaultPrevented() || (t.options.shortcuts ? t.hasKeyShortCut = t.handleKeyMap(e) : t.preventDefaultEditableShortCuts(e)), t.isLimited(1, e)) {\n                var o = t.getLastRange();\n                if (o.eo - o.so == 0) return !1;\n              }\n              t.setLastRange(), t.options.recordEveryKeystroke && !1 === t.hasKeyShortCut && t.history.recordUndo();\n            }).on(\"keyup\", function (e) {\n              t.setLastRange(), t.context.triggerEvent(\"keyup\", e);\n            }).on(\"focus\", function (e) {\n              t.setLastRange(), t.context.triggerEvent(\"focus\", e);\n            }).on(\"blur\", function (e) {\n              t.context.triggerEvent(\"blur\", e);\n            }).on(\"mousedown\", function (e) {\n              t.context.triggerEvent(\"mousedown\", e);\n            }).on(\"mouseup\", function (e) {\n              t.setLastRange(), t.history.recordUndo(), t.context.triggerEvent(\"mouseup\", e);\n            }).on(\"scroll\", function (e) {\n              t.context.triggerEvent(\"scroll\", e);\n            }).on(\"paste\", function (e) {\n              t.setLastRange(), t.context.triggerEvent(\"paste\", e);\n            }).on(\"input\", function () {\n              t.isLimited(0) && t.snapshot && t.history.applySnapshot(t.snapshot);\n            }), this.$editable.attr(\"spellcheck\", this.options.spellCheck), this.$editable.attr(\"autocorrect\", this.options.spellCheck), this.options.disableGrammar && this.$editable.attr(\"data-gramm\", !1), this.$editable.html(ht.html(this.$note) || ht.emptyPara), this.$editable.on(f.inputEventName, v.debounce(function () {\n              t.context.triggerEvent(\"change\", t.$editable.html(), t.$editable);\n            }, 10)), this.$editable.on(\"focusin\", function (e) {\n              t.context.triggerEvent(\"focusin\", e);\n            }).on(\"focusout\", function (e) {\n              t.context.triggerEvent(\"focusout\", e);\n            }), this.options.airMode ? this.options.overrideContextMenu && this.$editor.on(\"contextmenu\", function (e) {\n              return t.context.triggerEvent(\"contextmenu\", e), !1;\n            }) : (this.options.width && this.$editor.outerWidth(this.options.width), this.options.height && this.$editable.outerHeight(this.options.height), this.options.maxHeight && this.$editable.css(\"max-height\", this.options.maxHeight), this.options.minHeight && this.$editable.css(\"min-height\", this.options.minHeight)), this.history.recordUndo(), this.setLastRange();\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$editable.off();\n          }\n        }, {\n          key: \"handleKeyMap\",\n          value: function (t) {\n            var e = this.options.keyMap[f.isMac ? \"mac\" : \"pc\"],\n              o = [];\n            t.metaKey && o.push(\"CMD\"), t.ctrlKey && !t.altKey && o.push(\"CTRL\"), t.shiftKey && o.push(\"SHIFT\");\n            var n = wt.nameFromCode[t.keyCode];\n            n && o.push(n);\n            var i = e[o.join(\"+\")];\n            if (\"TAB\" !== n || this.options.tabDisable) {\n              if (i) {\n                if (!1 !== this.context.invoke(i)) return t.preventDefault(), !0;\n              } else wt.isEdit(t.keyCode) && this.afterCommand();\n            } else this.afterCommand();\n            return !1;\n          }\n        }, {\n          key: \"preventDefaultEditableShortCuts\",\n          value: function (t) {\n            (t.ctrlKey || t.metaKey) && y.contains([66, 73, 85], t.keyCode) && t.preventDefault();\n          }\n        }, {\n          key: \"isLimited\",\n          value: function (t, e) {\n            return t = t || 0, (void 0 === e || !(wt.isMove(e.keyCode) || wt.isNavigation(e.keyCode) || e.ctrlKey || e.metaKey || y.contains([wt.code.BACKSPACE, wt.code.DELETE], e.keyCode))) && this.options.maxTextLength > 0 && this.$editable.text().length + t > this.options.maxTextLength;\n          }\n        }, {\n          key: \"createRange\",\n          value: function () {\n            return this.focus(), this.setLastRange(), this.getLastRange();\n          }\n        }, {\n          key: \"createRangeFromList\",\n          value: function (t) {\n            var e = kt.createFromNodeBefore(y.head(t)).getStartPoint(),\n              o = kt.createFromNodeAfter(y.last(t)).getEndPoint();\n            return kt.create(e.node, e.offset, o.node, o.offset);\n          }\n        }, {\n          key: \"setLastRange\",\n          value: function (t) {\n            t ? this.lastRange = t : (this.lastRange = kt.create(this.editable), 0 === e()(this.lastRange.sc).closest(\".note-editable\").length && (this.lastRange = kt.createFromBodyElement(this.editable)));\n          }\n        }, {\n          key: \"getLastRange\",\n          value: function () {\n            return this.lastRange || this.setLastRange(), this.lastRange;\n          }\n        }, {\n          key: \"saveRange\",\n          value: function (t) {\n            t && this.getLastRange().collapse().select();\n          }\n        }, {\n          key: \"restoreRange\",\n          value: function () {\n            this.lastRange && (this.lastRange.select(), this.focus());\n          }\n        }, {\n          key: \"saveTarget\",\n          value: function (t) {\n            this.$editable.data(\"target\", t);\n          }\n        }, {\n          key: \"clearTarget\",\n          value: function () {\n            this.$editable.removeData(\"target\");\n          }\n        }, {\n          key: \"restoreTarget\",\n          value: function () {\n            return this.$editable.data(\"target\");\n          }\n        }, {\n          key: \"currentStyle\",\n          value: function () {\n            var t = kt.create();\n            return t && (t = t.normalize()), t ? this.style.current(t) : this.style.fromNode(this.$editable);\n          }\n        }, {\n          key: \"styleFromNode\",\n          value: function (t) {\n            return this.style.fromNode(t);\n          }\n        }, {\n          key: \"undo\",\n          value: function () {\n            this.context.triggerEvent(\"before.command\", this.$editable.html()), this.history.undo(), this.context.triggerEvent(\"change\", this.$editable.html(), this.$editable);\n          }\n        }, {\n          key: \"commit\",\n          value: function () {\n            this.context.triggerEvent(\"before.command\", this.$editable.html()), this.history.commit(), this.context.triggerEvent(\"change\", this.$editable.html(), this.$editable);\n          }\n        }, {\n          key: \"redo\",\n          value: function () {\n            this.context.triggerEvent(\"before.command\", this.$editable.html()), this.history.redo(), this.context.triggerEvent(\"change\", this.$editable.html(), this.$editable);\n          }\n        }, {\n          key: \"beforeCommand\",\n          value: function () {\n            this.context.triggerEvent(\"before.command\", this.$editable.html()), document.execCommand(\"styleWithCSS\", !1, this.options.styleWithCSS), this.focus();\n          }\n        }, {\n          key: \"afterCommand\",\n          value: function (t) {\n            this.normalizeContent(), this.history.recordUndo(), t || this.context.triggerEvent(\"change\", this.$editable.html(), this.$editable);\n          }\n        }, {\n          key: \"tab\",\n          value: function () {\n            var t = this.getLastRange();\n            if (t.isCollapsed() && t.isOnCell()) this.table.tab(t);else {\n              if (0 === this.options.tabSize) return !1;\n              this.isLimited(this.options.tabSize) || (this.beforeCommand(), this.typing.insertTab(t, this.options.tabSize), this.afterCommand());\n            }\n          }\n        }, {\n          key: \"untab\",\n          value: function () {\n            var t = this.getLastRange();\n            if (t.isCollapsed() && t.isOnCell()) this.table.tab(t, !0);else if (0 === this.options.tabSize) return !1;\n          }\n        }, {\n          key: \"wrapCommand\",\n          value: function (t) {\n            return function () {\n              this.beforeCommand(), t.apply(this, arguments), this.afterCommand();\n            };\n          }\n        }, {\n          key: \"insertImage\",\n          value: function (t, o) {\n            var n,\n              i = this;\n            return (n = t, e().Deferred(function (t) {\n              var o = e()(\"<img>\");\n              o.one(\"load\", function () {\n                o.off(\"error abort\"), t.resolve(o);\n              }).one(\"error abort\", function () {\n                o.off(\"load\").detach(), t.reject(o);\n              }).css({\n                display: \"none\"\n              }).appendTo(document.body).attr(\"src\", n);\n            }).promise()).then(function (t) {\n              i.beforeCommand(), \"function\" == typeof o ? o(t) : (\"string\" == typeof o && t.attr(\"data-filename\", o), t.css(\"width\", Math.min(i.$editable.width(), t.width()))), t.show(), i.getLastRange().insertNode(t[0]), i.setLastRange(kt.createFromNodeAfter(t[0]).select()), i.afterCommand();\n            }).fail(function (t) {\n              i.context.triggerEvent(\"image.upload.error\", t);\n            });\n          }\n        }, {\n          key: \"insertImagesAsDataURL\",\n          value: function (t) {\n            var o = this;\n            e().each(t, function (t, n) {\n              var i = n.name;\n              o.options.maximumImageFileSize && o.options.maximumImageFileSize < n.size ? o.context.triggerEvent(\"image.upload.error\", o.lang.image.maximumFileSizeError) : function (t) {\n                return e().Deferred(function (o) {\n                  e().extend(new FileReader(), {\n                    onload: function (t) {\n                      var e = t.target.result;\n                      o.resolve(e);\n                    },\n                    onerror: function (t) {\n                      o.reject(t);\n                    }\n                  }).readAsDataURL(t);\n                }).promise();\n              }(n).then(function (t) {\n                return o.insertImage(t, i);\n              }).fail(function () {\n                o.context.triggerEvent(\"image.upload.error\");\n              });\n            });\n          }\n        }, {\n          key: \"insertImagesOrCallback\",\n          value: function (t) {\n            this.options.callbacks.onImageUpload ? this.context.triggerEvent(\"image.upload\", t) : this.insertImagesAsDataURL(t);\n          }\n        }, {\n          key: \"getSelectedText\",\n          value: function () {\n            var t = this.getLastRange();\n            return t.isOnAnchor() && (t = kt.createFromNode(ht.ancestor(t.sc, ht.isAnchor))), t.toString();\n          }\n        }, {\n          key: \"onFormatBlock\",\n          value: function (t, o) {\n            if (document.execCommand(\"FormatBlock\", !1, f.isMSIE ? \"<\" + t + \">\" : t), o && o.length && (o[0].tagName.toUpperCase() !== t.toUpperCase() && (o = o.find(t)), o && o.length)) {\n              var n = this.createRange(),\n                i = e()([n.sc, n.ec]).closest(t);\n              i.removeClass();\n              var r = o[0].className || \"\";\n              r && i.addClass(r);\n            }\n          }\n        }, {\n          key: \"formatPara\",\n          value: function () {\n            this.formatBlock(\"P\");\n          }\n        }, {\n          key: \"fontStyling\",\n          value: function (t, o) {\n            var n = this.getLastRange();\n            if (\"\" !== n) {\n              var i = this.style.styleNodes(n);\n              if (this.$editor.find(\".note-status-output\").html(\"\"), e()(i).css(t, o), n.isCollapsed()) {\n                var r = y.head(i);\n                r && !ht.nodeLength(r) && (r.innerHTML = ht.ZERO_WIDTH_NBSP_CHAR, kt.createFromNode(r.firstChild).select(), this.setLastRange(), this.$editable.data(\"bogus\", r));\n              } else this.setLastRange(this.createRangeFromList(i).select());\n            } else {\n              var a = e().now();\n              this.$editor.find(\".note-status-output\").html('<div id=\"note-status-output-' + a + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + \"</div>\"), setTimeout(function () {\n                e()(\"#note-status-output-\" + a).remove();\n              }, 5e3);\n            }\n          }\n        }, {\n          key: \"unlink\",\n          value: function () {\n            var t = this.getLastRange();\n            if (t.isOnAnchor()) {\n              var e = ht.ancestor(t.sc, ht.isAnchor);\n              (t = kt.createFromNode(e)).select(), this.setLastRange(), this.beforeCommand(), document.execCommand(\"unlink\"), this.afterCommand();\n            }\n          }\n        }, {\n          key: \"getLinkInfo\",\n          value: function () {\n            var t = this.getLastRange().expand(ht.isAnchor),\n              o = e()(y.head(t.nodes(ht.isAnchor))),\n              n = {\n                range: t,\n                text: t.toString(),\n                url: o.length ? o.attr(\"href\") : \"\"\n              };\n            return o.length && (n.isNewWindow = \"_blank\" === o.attr(\"target\")), n;\n          }\n        }, {\n          key: \"addRow\",\n          value: function (t) {\n            var e = this.getLastRange(this.$editable);\n            e.isCollapsed() && e.isOnCell() && (this.beforeCommand(), this.table.addRow(e, t), this.afterCommand());\n          }\n        }, {\n          key: \"addCol\",\n          value: function (t) {\n            var e = this.getLastRange(this.$editable);\n            e.isCollapsed() && e.isOnCell() && (this.beforeCommand(), this.table.addCol(e, t), this.afterCommand());\n          }\n        }, {\n          key: \"deleteRow\",\n          value: function () {\n            var t = this.getLastRange(this.$editable);\n            t.isCollapsed() && t.isOnCell() && (this.beforeCommand(), this.table.deleteRow(t), this.afterCommand());\n          }\n        }, {\n          key: \"deleteCol\",\n          value: function () {\n            var t = this.getLastRange(this.$editable);\n            t.isCollapsed() && t.isOnCell() && (this.beforeCommand(), this.table.deleteCol(t), this.afterCommand());\n          }\n        }, {\n          key: \"deleteTable\",\n          value: function () {\n            var t = this.getLastRange(this.$editable);\n            t.isCollapsed() && t.isOnCell() && (this.beforeCommand(), this.table.deleteTable(t), this.afterCommand());\n          }\n        }, {\n          key: \"resizeTo\",\n          value: function (t, e, o) {\n            var n;\n            if (o) {\n              var i = t.y / t.x,\n                r = e.data(\"ratio\");\n              n = {\n                width: r > i ? t.x : t.y / r,\n                height: r > i ? t.x * r : t.y\n              };\n            } else n = {\n              width: t.x,\n              height: t.y\n            };\n            e.css(n);\n          }\n        }, {\n          key: \"hasFocus\",\n          value: function () {\n            return this.$editable.is(\":focus\");\n          }\n        }, {\n          key: \"focus\",\n          value: function () {\n            this.hasFocus() || this.$editable.focus();\n          }\n        }, {\n          key: \"isEmpty\",\n          value: function () {\n            return ht.isEmpty(this.$editable[0]) || ht.emptyPara === this.$editable.html();\n          }\n        }, {\n          key: \"empty\",\n          value: function () {\n            this.context.invoke(\"code\", ht.emptyPara);\n          }\n        }, {\n          key: \"normalizeContent\",\n          value: function () {\n            this.$editable[0].normalize();\n          }\n        }], n && At(o.prototype, n), i && At(o, i), t;\n      }();\n      function Dt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Ht = function () {\n        function t(e) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = e, this.$editable = e.layoutInfo.editable;\n        }\n        var e, o, n;\n        return e = t, (o = [{\n          key: \"initialize\",\n          value: function () {\n            this.$editable.on(\"paste\", this.pasteByEvent.bind(this));\n          }\n        }, {\n          key: \"pasteByEvent\",\n          value: function (t) {\n            var e = this,\n              o = t.originalEvent.clipboardData;\n            if (o && o.items && o.items.length) {\n              var n = o.items.length > 1 ? o.items[1] : y.head(o.items);\n              \"file\" === n.kind && -1 !== n.type.indexOf(\"image/\") ? (this.context.invoke(\"editor.insertImagesOrCallback\", [n.getAsFile()]), t.preventDefault()) : \"string\" === n.kind && this.context.invoke(\"editor.isLimited\", o.getData(\"Text\").length) && t.preventDefault();\n            } else if (window.clipboardData) {\n              var i = window.clipboardData.getData(\"text\");\n              this.context.invoke(\"editor.isLimited\", i.length) && t.preventDefault();\n            }\n            setTimeout(function () {\n              e.context.invoke(\"editor.afterCommand\");\n            }, 10);\n          }\n        }]) && Dt(e.prototype, o), n && Dt(e, n), t;\n      }();\n      function Bt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var zt = function () {\n        function t(o) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.$eventListener = e()(document), this.$editor = o.layoutInfo.editor, this.$editable = o.layoutInfo.editable, this.options = o.options, this.lang = this.options.langInfo, this.documentEventHandlers = {}, this.$dropzone = e()(['<div class=\"note-dropzone\">', '<div class=\"note-dropzone-message\"></div>', \"</div>\"].join(\"\")).prependTo(this.$editor);\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"initialize\",\n          value: function () {\n            this.options.disableDragAndDrop ? (this.documentEventHandlers.onDrop = function (t) {\n              t.preventDefault();\n            }, this.$eventListener = this.$dropzone, this.$eventListener.on(\"drop\", this.documentEventHandlers.onDrop)) : this.attachDragAndDropEvent();\n          }\n        }, {\n          key: \"attachDragAndDropEvent\",\n          value: function () {\n            var t = this,\n              o = e()(),\n              n = this.$dropzone.find(\".note-dropzone-message\");\n            this.documentEventHandlers.onDragenter = function (e) {\n              var i = t.context.invoke(\"codeview.isActivated\"),\n                r = t.$editor.width() > 0 && t.$editor.height() > 0;\n              i || o.length || !r || (t.$editor.addClass(\"dragover\"), t.$dropzone.width(t.$editor.width()), t.$dropzone.height(t.$editor.height()), n.text(t.lang.image.dragImageHere)), o = o.add(e.target);\n            }, this.documentEventHandlers.onDragleave = function (n) {\n              (o = o.not(n.target)).length && \"BODY\" !== n.target.nodeName || (o = e()(), t.$editor.removeClass(\"dragover\"));\n            }, this.documentEventHandlers.onDrop = function () {\n              o = e()(), t.$editor.removeClass(\"dragover\");\n            }, this.$eventListener.on(\"dragenter\", this.documentEventHandlers.onDragenter).on(\"dragleave\", this.documentEventHandlers.onDragleave).on(\"drop\", this.documentEventHandlers.onDrop), this.$dropzone.on(\"dragenter\", function () {\n              t.$dropzone.addClass(\"hover\"), n.text(t.lang.image.dropImage);\n            }).on(\"dragleave\", function () {\n              t.$dropzone.removeClass(\"hover\"), n.text(t.lang.image.dragImageHere);\n            }), this.$dropzone.on(\"drop\", function (o) {\n              var n = o.originalEvent.dataTransfer;\n              o.preventDefault(), n && n.files && n.files.length ? (t.$editable.focus(), t.context.invoke(\"editor.insertImagesOrCallback\", n.files)) : e().each(n.types, function (o, i) {\n                if (!(i.toLowerCase().indexOf(\"_moz_\") > -1)) {\n                  var r = n.getData(i);\n                  i.toLowerCase().indexOf(\"text\") > -1 ? t.context.invoke(\"editor.pasteHTML\", r) : e()(r).each(function (e, o) {\n                    t.context.invoke(\"editor.insertNode\", o);\n                  });\n                }\n              });\n            }).on(\"dragover\", !1);\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            var t = this;\n            Object.keys(this.documentEventHandlers).forEach(function (e) {\n              t.$eventListener.off(e.substr(2).toLowerCase(), t.documentEventHandlers[e]);\n            }), this.documentEventHandlers = {};\n          }\n        }], n && Bt(o.prototype, n), i && Bt(o, i), t;\n      }();\n      function Mt(t, e) {\n        var o = \"undefined\" != typeof Symbol && t[Symbol.iterator] || t[\"@@iterator\"];\n        if (!o) {\n          if (Array.isArray(t) || (o = function (t, e) {\n            if (!t) return;\n            if (\"string\" == typeof t) return Ot(t, e);\n            var o = Object.prototype.toString.call(t).slice(8, -1);\n            \"Object\" === o && t.constructor && (o = t.constructor.name);\n            if (\"Map\" === o || \"Set\" === o) return Array.from(t);\n            if (\"Arguments\" === o || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)) return Ot(t, e);\n          }(t)) || e && t && \"number\" == typeof t.length) {\n            o && (t = o);\n            var n = 0,\n              i = function () {};\n            return {\n              s: i,\n              n: function () {\n                return n >= t.length ? {\n                  done: !0\n                } : {\n                  done: !1,\n                  value: t[n++]\n                };\n              },\n              e: function (t) {\n                throw t;\n              },\n              f: i\n            };\n          }\n          throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n        }\n        var r,\n          a = !0,\n          s = !1;\n        return {\n          s: function () {\n            o = o.call(t);\n          },\n          n: function () {\n            var t = o.next();\n            return a = t.done, t;\n          },\n          e: function (t) {\n            s = !0, r = t;\n          },\n          f: function () {\n            try {\n              a || null == o.return || o.return();\n            } finally {\n              if (s) throw r;\n            }\n          }\n        };\n      }\n      function Ot(t, e) {\n        (null == e || e > t.length) && (e = t.length);\n        for (var o = 0, n = new Array(e); o < e; o++) n[o] = t[o];\n        return n;\n      }\n      function jt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Ut = function () {\n        function t(e) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = e, this.$editor = e.layoutInfo.editor, this.$editable = e.layoutInfo.editable, this.$codable = e.layoutInfo.codable, this.options = e.options, this.CodeMirrorConstructor = window.CodeMirror, this.options.codemirror.CodeMirrorConstructor && (this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor);\n        }\n        var e, o, n;\n        return e = t, o = [{\n          key: \"sync\",\n          value: function (t) {\n            var e = this.isActivated(),\n              o = this.CodeMirrorConstructor;\n            e && (t ? o ? this.$codable.data(\"cmEditor\").getDoc().setValue(t) : this.$codable.val(t) : o && this.$codable.data(\"cmEditor\").save());\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            var t = this;\n            this.$codable.on(\"keyup\", function (e) {\n              e.keyCode === wt.code.ESCAPE && t.deactivate();\n            });\n          }\n        }, {\n          key: \"isActivated\",\n          value: function () {\n            return this.$editor.hasClass(\"codeview\");\n          }\n        }, {\n          key: \"toggle\",\n          value: function () {\n            this.isActivated() ? this.deactivate() : this.activate(), this.context.triggerEvent(\"codeview.toggled\");\n          }\n        }, {\n          key: \"purify\",\n          value: function (t) {\n            if (this.options.codeviewFilter && (t = t.replace(this.options.codeviewFilterRegex, \"\"), this.options.codeviewIframeFilter)) {\n              var e = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n              t = t.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function (t) {\n                if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(t)) return \"\";\n                var o,\n                  n = Mt(e);\n                try {\n                  for (n.s(); !(o = n.n()).done;) {\n                    var i = o.value;\n                    if (new RegExp('src=\"(https?:)?//' + i.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\") + '/(.+)\"').test(t)) return t;\n                  }\n                } catch (t) {\n                  n.e(t);\n                } finally {\n                  n.f();\n                }\n                return \"\";\n              });\n            }\n            return t;\n          }\n        }, {\n          key: \"activate\",\n          value: function () {\n            var t = this,\n              e = this.CodeMirrorConstructor;\n            if (this.$codable.val(ht.html(this.$editable, this.options.prettifyHtml)), this.$codable.height(this.$editable.height()), this.context.invoke(\"toolbar.updateCodeview\", !0), this.context.invoke(\"airPopover.updateCodeview\", !0), this.$editor.addClass(\"codeview\"), this.$codable.focus(), e) {\n              var o = e.fromTextArea(this.$codable[0], this.options.codemirror);\n              if (this.options.codemirror.tern) {\n                var n = new e.TernServer(this.options.codemirror.tern);\n                o.ternServer = n, o.on(\"cursorActivity\", function (t) {\n                  n.updateArgHints(t);\n                });\n              }\n              o.on(\"blur\", function (e) {\n                t.context.triggerEvent(\"blur.codeview\", o.getValue(), e);\n              }), o.on(\"change\", function () {\n                t.context.triggerEvent(\"change.codeview\", o.getValue(), o);\n              }), o.setSize(null, this.$editable.outerHeight()), this.$codable.data(\"cmEditor\", o);\n            } else this.$codable.on(\"blur\", function (e) {\n              t.context.triggerEvent(\"blur.codeview\", t.$codable.val(), e);\n            }), this.$codable.on(\"input\", function () {\n              t.context.triggerEvent(\"change.codeview\", t.$codable.val(), t.$codable);\n            });\n          }\n        }, {\n          key: \"deactivate\",\n          value: function () {\n            if (this.CodeMirrorConstructor) {\n              var t = this.$codable.data(\"cmEditor\");\n              this.$codable.val(t.getValue()), t.toTextArea();\n            }\n            var e = this.purify(ht.value(this.$codable, this.options.prettifyHtml) || ht.emptyPara),\n              o = this.$editable.html() !== e;\n            this.$editable.html(e), this.$editable.height(this.options.height ? this.$codable.height() : \"auto\"), this.$editor.removeClass(\"codeview\"), o && this.context.triggerEvent(\"change\", this.$editable.html(), this.$editable), this.$editable.focus(), this.context.invoke(\"toolbar.updateCodeview\", !1), this.context.invoke(\"airPopover.updateCodeview\", !1);\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.isActivated() && this.deactivate();\n          }\n        }], o && jt(e.prototype, o), n && jt(e, n), t;\n      }();\n      function Wt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Kt = function () {\n        function t(o) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.$document = e()(document), this.$statusbar = o.layoutInfo.statusbar, this.$editable = o.layoutInfo.editable, this.$codable = o.layoutInfo.codable, this.options = o.options;\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"initialize\",\n          value: function () {\n            var t = this;\n            this.options.airMode || this.options.disableResizeEditor ? this.destroy() : this.$statusbar.on(\"mousedown\", function (e) {\n              e.preventDefault(), e.stopPropagation();\n              var o = t.$editable.offset().top - t.$document.scrollTop(),\n                n = t.$codable.offset().top - t.$document.scrollTop(),\n                i = function (e) {\n                  var i = e.clientY - (o + 24),\n                    r = e.clientY - (n + 24);\n                  i = t.options.minheight > 0 ? Math.max(i, t.options.minheight) : i, i = t.options.maxHeight > 0 ? Math.min(i, t.options.maxHeight) : i, r = t.options.minheight > 0 ? Math.max(r, t.options.minheight) : r, r = t.options.maxHeight > 0 ? Math.min(r, t.options.maxHeight) : r, t.$editable.height(i), t.$codable.height(r);\n                };\n              t.$document.on(\"mousemove\", i).one(\"mouseup\", function () {\n                t.$document.off(\"mousemove\", i);\n              });\n            });\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$statusbar.off(), this.$statusbar.addClass(\"locked\");\n          }\n        }]) && Wt(o.prototype, n), i && Wt(o, i), t;\n      }();\n      function Vt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var qt = function () {\n        function t(o) {\n          var n = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.$editor = o.layoutInfo.editor, this.$toolbar = o.layoutInfo.toolbar, this.$editable = o.layoutInfo.editable, this.$codable = o.layoutInfo.codable, this.$window = e()(window), this.$scrollbar = e()(\"html, body\"), this.scrollbarClassName = \"note-fullscreen-body\", this.onResize = function () {\n            n.resizeTo({\n              h: n.$window.height() - n.$toolbar.outerHeight()\n            });\n          };\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"resizeTo\",\n          value: function (t) {\n            this.$editable.css(\"height\", t.h), this.$codable.css(\"height\", t.h), this.$codable.data(\"cmeditor\") && this.$codable.data(\"cmeditor\").setsize(null, t.h);\n          }\n        }, {\n          key: \"toggle\",\n          value: function () {\n            this.$editor.toggleClass(\"fullscreen\");\n            var t = this.isFullscreen();\n            this.$scrollbar.toggleClass(this.scrollbarClassName, t), t ? (this.$editable.data(\"orgHeight\", this.$editable.css(\"height\")), this.$editable.data(\"orgMaxHeight\", this.$editable.css(\"maxHeight\")), this.$editable.css(\"maxHeight\", \"\"), this.$window.on(\"resize\", this.onResize).trigger(\"resize\")) : (this.$window.off(\"resize\", this.onResize), this.resizeTo({\n              h: this.$editable.data(\"orgHeight\")\n            }), this.$editable.css(\"maxHeight\", this.$editable.css(\"orgMaxHeight\"))), this.context.invoke(\"toolbar.updateFullscreen\", t);\n          }\n        }, {\n          key: \"isFullscreen\",\n          value: function () {\n            return this.$editor.hasClass(\"fullscreen\");\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$scrollbar.removeClass(this.scrollbarClassName);\n          }\n        }]) && Vt(o.prototype, n), i && Vt(o, i), t;\n      }();\n      function _t(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Gt = function () {\n        function t(o) {\n          var n = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.$document = e()(document), this.$editingArea = o.layoutInfo.editingArea, this.options = o.options, this.lang = this.options.langInfo, this.events = {\n            \"summernote.mousedown\": function (t, e) {\n              n.update(e.target, e) && e.preventDefault();\n            },\n            \"summernote.keyup summernote.scroll summernote.change summernote.dialog.shown\": function () {\n              n.update();\n            },\n            \"summernote.disable summernote.blur\": function () {\n              n.hide();\n            },\n            \"summernote.codeview.toggled\": function () {\n              n.update();\n            }\n          };\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"initialize\",\n          value: function () {\n            var t = this;\n            this.$handle = e()(['<div class=\"note-handle\">', '<div class=\"note-control-selection\">', '<div class=\"note-control-selection-bg\"></div>', '<div class=\"note-control-holder note-control-nw\"></div>', '<div class=\"note-control-holder note-control-ne\"></div>', '<div class=\"note-control-holder note-control-sw\"></div>', '<div class=\"', this.options.disableResizeImage ? \"note-control-holder\" : \"note-control-sizing\", ' note-control-se\"></div>', this.options.disableResizeImage ? \"\" : '<div class=\"note-control-selection-info\"></div>', \"</div>\", \"</div>\"].join(\"\")).prependTo(this.$editingArea), this.$handle.on(\"mousedown\", function (e) {\n              if (ht.isControlSizing(e.target)) {\n                e.preventDefault(), e.stopPropagation();\n                var o = t.$handle.find(\".note-control-selection\").data(\"target\"),\n                  n = o.offset(),\n                  i = t.$document.scrollTop(),\n                  r = function (e) {\n                    t.context.invoke(\"editor.resizeTo\", {\n                      x: e.clientX - n.left,\n                      y: e.clientY - (n.top - i)\n                    }, o, !e.shiftKey), t.update(o[0], e);\n                  };\n                t.$document.on(\"mousemove\", r).one(\"mouseup\", function (e) {\n                  e.preventDefault(), t.$document.off(\"mousemove\", r), t.context.invoke(\"editor.afterCommand\");\n                }), o.data(\"ratio\") || o.data(\"ratio\", o.height() / o.width());\n              }\n            }), this.$handle.on(\"wheel\", function (e) {\n              e.preventDefault(), t.update();\n            });\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$handle.remove();\n          }\n        }, {\n          key: \"update\",\n          value: function (t, o) {\n            if (this.context.isDisabled()) return !1;\n            var n = ht.isImg(t),\n              i = this.$handle.find(\".note-control-selection\");\n            if (this.context.invoke(\"imagePopover.update\", t, o), n) {\n              var r = e()(t),\n                a = r.position(),\n                s = {\n                  left: a.left + parseInt(r.css(\"marginLeft\"), 10),\n                  top: a.top + parseInt(r.css(\"marginTop\"), 10)\n                },\n                l = {\n                  w: r.outerWidth(!1),\n                  h: r.outerHeight(!1)\n                };\n              i.css({\n                display: \"block\",\n                left: s.left,\n                top: s.top,\n                width: l.w,\n                height: l.h\n              }).data(\"target\", r);\n              var c = new Image();\n              c.src = r.attr(\"src\");\n              var u = l.w + \"x\" + l.h + \" (\" + this.lang.image.original + \": \" + c.width + \"x\" + c.height + \")\";\n              i.find(\".note-control-selection-info\").text(u), this.context.invoke(\"editor.saveTarget\", t);\n            } else this.hide();\n            return n;\n          }\n        }, {\n          key: \"hide\",\n          value: function () {\n            this.context.invoke(\"editor.clearTarget\"), this.$handle.children().hide();\n          }\n        }], n && _t(o.prototype, n), i && _t(o, i), t;\n      }();\n      function Yt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Zt = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@|xmpp:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i,\n        Xt = function () {\n          function t(e) {\n            var o = this;\n            !function (t, e) {\n              if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n            }(this, t), this.context = e, this.options = e.options, this.events = {\n              \"summernote.keyup\": function (t, e) {\n                e.isDefaultPrevented() || o.handleKeyup(e);\n              },\n              \"summernote.keydown\": function (t, e) {\n                o.handleKeydown(e);\n              }\n            };\n          }\n          var o, n, i;\n          return o = t, (n = [{\n            key: \"initialize\",\n            value: function () {\n              this.lastWordRange = null;\n            }\n          }, {\n            key: \"destroy\",\n            value: function () {\n              this.lastWordRange = null;\n            }\n          }, {\n            key: \"replace\",\n            value: function () {\n              if (this.lastWordRange) {\n                var t = this.lastWordRange.toString(),\n                  o = t.match(Zt);\n                if (o && (o[1] || o[2])) {\n                  var n = o[1] ? t : \"http://\" + t,\n                    i = this.options.showDomainOnlyForAutolink ? t.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:xmpp?:?)?(?:www\\.)?/i, \"\").split(\"/\")[0] : t,\n                    r = e()(\"<a></a>\").html(i).attr(\"href\", n)[0];\n                  this.context.options.linkTargetBlank && e()(r).attr(\"target\", \"_blank\"), this.lastWordRange.insertNode(r), this.lastWordRange = null, this.context.invoke(\"editor.focus\");\n                }\n              }\n            }\n          }, {\n            key: \"handleKeydown\",\n            value: function (t) {\n              if (y.contains([wt.code.ENTER, wt.code.SPACE], t.keyCode)) {\n                var e = this.context.invoke(\"editor.createRange\").getWordRange();\n                this.lastWordRange = e;\n              }\n            }\n          }, {\n            key: \"handleKeyup\",\n            value: function (t) {\n              y.contains([wt.code.ENTER, wt.code.SPACE], t.keyCode) && this.replace();\n            }\n          }]) && Yt(o.prototype, n), i && Yt(o, i), t;\n        }();\n      function Qt(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Jt = function () {\n        function t(e) {\n          var o = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.$note = e.layoutInfo.note, this.events = {\n            \"summernote.change\": function () {\n              o.$note.val(e.invoke(\"code\"));\n            }\n          };\n        }\n        var e, o, n;\n        return e = t, (o = [{\n          key: \"shouldInitialize\",\n          value: function () {\n            return ht.isTextarea(this.$note[0]);\n          }\n        }]) && Qt(e.prototype, o), n && Qt(e, n), t;\n      }();\n      function te(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var ee = function () {\n        function t(e) {\n          var o = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = e, this.options = e.options.replace || {}, this.keys = [wt.code.ENTER, wt.code.SPACE, wt.code.PERIOD, wt.code.COMMA, wt.code.SEMICOLON, wt.code.SLASH], this.previousKeydownCode = null, this.events = {\n            \"summernote.keyup\": function (t, e) {\n              e.isDefaultPrevented() || o.handleKeyup(e);\n            },\n            \"summernote.keydown\": function (t, e) {\n              o.handleKeydown(e);\n            }\n          };\n        }\n        var e, o, n;\n        return e = t, (o = [{\n          key: \"shouldInitialize\",\n          value: function () {\n            return !!this.options.match;\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            this.lastWord = null;\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.lastWord = null;\n          }\n        }, {\n          key: \"replace\",\n          value: function () {\n            if (this.lastWord) {\n              var t = this,\n                e = this.lastWord.toString();\n              this.options.match(e, function (e) {\n                if (e) {\n                  var o = \"\";\n                  if (\"string\" == typeof e ? o = ht.createText(e) : e instanceof jQuery ? o = e[0] : e instanceof Node && (o = e), !o) return;\n                  t.lastWord.insertNode(o), t.lastWord = null, t.context.invoke(\"editor.focus\");\n                }\n              });\n            }\n          }\n        }, {\n          key: \"handleKeydown\",\n          value: function (t) {\n            if (this.previousKeydownCode && y.contains(this.keys, this.previousKeydownCode)) this.previousKeydownCode = t.keyCode;else {\n              if (y.contains(this.keys, t.keyCode)) {\n                var e = this.context.invoke(\"editor.createRange\").getWordRange();\n                this.lastWord = e;\n              }\n              this.previousKeydownCode = t.keyCode;\n            }\n          }\n        }, {\n          key: \"handleKeyup\",\n          value: function (t) {\n            y.contains(this.keys, t.keyCode) && this.replace();\n          }\n        }]) && te(e.prototype, o), n && te(e, n), t;\n      }();\n      function oe(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var ne = function () {\n        function t(e) {\n          var o = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = e, this.$editingArea = e.layoutInfo.editingArea, this.options = e.options, !0 === this.options.inheritPlaceholder && (this.options.placeholder = this.context.$note.attr(\"placeholder\") || this.options.placeholder), this.events = {\n            \"summernote.init summernote.change\": function () {\n              o.update();\n            },\n            \"summernote.codeview.toggled\": function () {\n              o.update();\n            }\n          };\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"shouldInitialize\",\n          value: function () {\n            return !!this.options.placeholder;\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            var t = this;\n            this.$placeholder = e()('<div class=\"note-placeholder\"></div>'), this.$placeholder.on(\"click\", function () {\n              t.context.invoke(\"focus\");\n            }).html(this.options.placeholder).prependTo(this.$editingArea), this.update();\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$placeholder.remove();\n          }\n        }, {\n          key: \"update\",\n          value: function () {\n            var t = !this.context.invoke(\"codeview.isActivated\") && this.context.invoke(\"editor.isEmpty\");\n            this.$placeholder.toggle(t);\n          }\n        }]) && oe(o.prototype, n), i && oe(o, i), t;\n      }();\n      function ie(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var re = function () {\n        function t(o) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.ui = e().summernote.ui, this.context = o, this.$toolbar = o.layoutInfo.toolbar, this.options = o.options, this.lang = this.options.langInfo, this.invertedKeyMap = v.invertObject(this.options.keyMap[f.isMac ? \"mac\" : \"pc\"]);\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"representShortcut\",\n          value: function (t) {\n            var e = this.invertedKeyMap[t];\n            return this.options.shortcuts && e ? (f.isMac && (e = e.replace(\"CMD\", \"⌘\").replace(\"SHIFT\", \"⇧\")), \" (\" + (e = e.replace(\"BACKSLASH\", \"\\\\\").replace(\"SLASH\", \"/\").replace(\"LEFTBRACKET\", \"[\").replace(\"RIGHTBRACKET\", \"]\")) + \")\") : \"\";\n          }\n        }, {\n          key: \"button\",\n          value: function (t) {\n            return !this.options.tooltip && t.tooltip && delete t.tooltip, t.container = this.options.container, this.ui.button(t);\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            this.addToolbarButtons(), this.addImagePopoverButtons(), this.addLinkPopoverButtons(), this.addTablePopoverButtons(), this.fontInstalledMap = {};\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            delete this.fontInstalledMap;\n          }\n        }, {\n          key: \"isFontInstalled\",\n          value: function (t) {\n            return Object.prototype.hasOwnProperty.call(this.fontInstalledMap, t) || (this.fontInstalledMap[t] = f.isFontInstalled(t) || y.contains(this.options.fontNamesIgnoreCheck, t)), this.fontInstalledMap[t];\n          }\n        }, {\n          key: \"isFontDeservedToAdd\",\n          value: function (t) {\n            return \"\" !== (t = t.toLowerCase()) && this.isFontInstalled(t) && -1 === f.genericFontFamilies.indexOf(t);\n          }\n        }, {\n          key: \"colorPalette\",\n          value: function (t, o, n, i) {\n            var r = this;\n            return this.ui.buttonGroup({\n              className: \"note-color \" + t,\n              children: [this.button({\n                className: \"note-current-color-button\",\n                contents: this.ui.icon(this.options.icons.font + \" note-recent-color\"),\n                tooltip: o,\n                click: function (t) {\n                  var o = e()(t.currentTarget);\n                  n && i ? r.context.invoke(\"editor.color\", {\n                    backColor: o.attr(\"data-backColor\"),\n                    foreColor: o.attr(\"data-foreColor\")\n                  }) : n ? r.context.invoke(\"editor.color\", {\n                    backColor: o.attr(\"data-backColor\")\n                  }) : i && r.context.invoke(\"editor.color\", {\n                    foreColor: o.attr(\"data-foreColor\")\n                  });\n                },\n                callback: function (t) {\n                  var e = t.find(\".note-recent-color\");\n                  n && (e.css(\"background-color\", r.options.colorButton.backColor), t.attr(\"data-backColor\", r.options.colorButton.backColor)), i ? (e.css(\"color\", r.options.colorButton.foreColor), t.attr(\"data-foreColor\", r.options.colorButton.foreColor)) : e.css(\"color\", \"transparent\");\n                }\n              }), this.button({\n                className: \"dropdown-toggle\",\n                contents: this.ui.dropdownButtonContents(\"\", this.options),\n                tooltip: this.lang.color.more,\n                data: {\n                  toggle: \"dropdown\"\n                }\n              }), this.ui.dropdown({\n                items: (n ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.background + \"</div>\", \"<div>\", '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">', this.lang.color.transparent, \"</button>\", \"</div>\", '<div class=\"note-holder\" data-event=\"backColor\">\\x3c!-- back colors --\\x3e</div>', \"<div>\", '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, \"</button>\", '<input type=\"color\" id=\"backColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette-' + this.options.id + '\">', \"</div>\", '<div class=\"note-holder-custom\" id=\"backColorPalette-' + this.options.id + '\" data-event=\"backColor\"></div>', \"</div>\"].join(\"\") : \"\") + (i ? ['<div class=\"note-palette\">', '<div class=\"note-palette-title\">' + this.lang.color.foreground + \"</div>\", \"<div>\", '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">', this.lang.color.resetToDefault, \"</button>\", \"</div>\", '<div class=\"note-holder\" data-event=\"foreColor\">\\x3c!-- fore colors --\\x3e</div>', \"<div>\", '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker-' + this.options.id + '\">', this.lang.color.cpSelect, \"</button>\", '<input type=\"color\" id=\"foreColorPicker-' + this.options.id + '\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette-' + this.options.id + '\">', \"</div>\", '<div class=\"note-holder-custom\" id=\"foreColorPalette-' + this.options.id + '\" data-event=\"foreColor\"></div>', \"</div>\"].join(\"\") : \"\"),\n                callback: function (t) {\n                  t.find(\".note-holder\").each(function (t, o) {\n                    var n = e()(o);\n                    n.append(r.ui.palette({\n                      colors: r.options.colors,\n                      colorsName: r.options.colorsName,\n                      eventName: n.data(\"event\"),\n                      container: r.options.container,\n                      tooltip: r.options.tooltip\n                    }).render());\n                  });\n                  var o = [[\"#FFFFFF\", \"#FFFFFF\", \"#FFFFFF\", \"#FFFFFF\", \"#FFFFFF\", \"#FFFFFF\", \"#FFFFFF\", \"#FFFFFF\"]];\n                  t.find(\".note-holder-custom\").each(function (t, n) {\n                    var i = e()(n);\n                    i.append(r.ui.palette({\n                      colors: o,\n                      colorsName: o,\n                      eventName: i.data(\"event\"),\n                      container: r.options.container,\n                      tooltip: r.options.tooltip\n                    }).render());\n                  }), t.find(\"input[type=color]\").each(function (o, n) {\n                    e()(n).change(function () {\n                      var o = t.find(\"#\" + e()(this).data(\"event\")).find(\".note-color-btn\").first(),\n                        n = this.value.toUpperCase();\n                      o.css(\"background-color\", n).attr(\"aria-label\", n).attr(\"data-value\", n).attr(\"data-original-title\", n), o.click();\n                    });\n                  });\n                },\n                click: function (o) {\n                  o.stopPropagation();\n                  var n = e()(\".\" + t).find(\".note-dropdown-menu\"),\n                    i = e()(o.target),\n                    a = i.data(\"event\"),\n                    s = i.attr(\"data-value\");\n                  if (\"openPalette\" === a) {\n                    var l = n.find(\"#\" + s),\n                      c = e()(n.find(\"#\" + l.data(\"event\")).find(\".note-color-row\")[0]),\n                      u = c.find(\".note-color-btn\").last().detach(),\n                      d = l.val();\n                    u.css(\"background-color\", d).attr(\"aria-label\", d).attr(\"data-value\", d).attr(\"data-original-title\", d), c.prepend(u), l.click();\n                  } else {\n                    if (y.contains([\"backColor\", \"foreColor\"], a)) {\n                      var h = \"backColor\" === a ? \"background-color\" : \"color\",\n                        f = i.closest(\".note-color\").find(\".note-recent-color\"),\n                        p = i.closest(\".note-color\").find(\".note-current-color-button\");\n                      f.css(h, s), p.attr(\"data-\" + a, s);\n                    }\n                    r.context.invoke(\"editor.\" + a, s);\n                  }\n                }\n              })]\n            }).render();\n          }\n        }, {\n          key: \"addToolbarButtons\",\n          value: function () {\n            var t = this;\n            this.context.memo(\"button.style\", function () {\n              return t.ui.buttonGroup([t.button({\n                className: \"dropdown-toggle\",\n                contents: t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.magic), t.options),\n                tooltip: t.lang.style.style,\n                data: {\n                  toggle: \"dropdown\"\n                }\n              }), t.ui.dropdown({\n                className: \"dropdown-style\",\n                items: t.options.styleTags,\n                title: t.lang.style.style,\n                template: function (e) {\n                  \"string\" == typeof e && (e = {\n                    tag: e,\n                    title: Object.prototype.hasOwnProperty.call(t.lang.style, e) ? t.lang.style[e] : e\n                  });\n                  var o = e.tag,\n                    n = e.title;\n                  return \"<\" + o + (e.style ? ' style=\"' + e.style + '\" ' : \"\") + (e.className ? ' class=\"' + e.className + '\"' : \"\") + \">\" + n + \"</\" + o + \">\";\n                },\n                click: t.context.createInvokeHandler(\"editor.formatBlock\")\n              })]).render();\n            });\n            for (var o = function (e, o) {\n                var n = t.options.styleTags[e];\n                t.context.memo(\"button.style.\" + n, function () {\n                  return t.button({\n                    className: \"note-btn-style-\" + n,\n                    contents: '<div data-value=\"' + n + '\">' + n.toUpperCase() + \"</div>\",\n                    tooltip: t.lang.style[n],\n                    click: t.context.createInvokeHandler(\"editor.formatBlock\")\n                  }).render();\n                });\n              }, n = 0, i = this.options.styleTags.length; n < i; n++) o(n);\n            this.context.memo(\"button.bold\", function () {\n              return t.button({\n                className: \"note-btn-bold\",\n                contents: t.ui.icon(t.options.icons.bold),\n                tooltip: t.lang.font.bold + t.representShortcut(\"bold\"),\n                click: t.context.createInvokeHandlerAndUpdateState(\"editor.bold\")\n              }).render();\n            }), this.context.memo(\"button.italic\", function () {\n              return t.button({\n                className: \"note-btn-italic\",\n                contents: t.ui.icon(t.options.icons.italic),\n                tooltip: t.lang.font.italic + t.representShortcut(\"italic\"),\n                click: t.context.createInvokeHandlerAndUpdateState(\"editor.italic\")\n              }).render();\n            }), this.context.memo(\"button.underline\", function () {\n              return t.button({\n                className: \"note-btn-underline\",\n                contents: t.ui.icon(t.options.icons.underline),\n                tooltip: t.lang.font.underline + t.representShortcut(\"underline\"),\n                click: t.context.createInvokeHandlerAndUpdateState(\"editor.underline\")\n              }).render();\n            }), this.context.memo(\"button.clear\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.eraser),\n                tooltip: t.lang.font.clear + t.representShortcut(\"removeFormat\"),\n                click: t.context.createInvokeHandler(\"editor.removeFormat\")\n              }).render();\n            }), this.context.memo(\"button.strikethrough\", function () {\n              return t.button({\n                className: \"note-btn-strikethrough\",\n                contents: t.ui.icon(t.options.icons.strikethrough),\n                tooltip: t.lang.font.strikethrough + t.representShortcut(\"strikethrough\"),\n                click: t.context.createInvokeHandlerAndUpdateState(\"editor.strikethrough\")\n              }).render();\n            }), this.context.memo(\"button.superscript\", function () {\n              return t.button({\n                className: \"note-btn-superscript\",\n                contents: t.ui.icon(t.options.icons.superscript),\n                tooltip: t.lang.font.superscript,\n                click: t.context.createInvokeHandlerAndUpdateState(\"editor.superscript\")\n              }).render();\n            }), this.context.memo(\"button.subscript\", function () {\n              return t.button({\n                className: \"note-btn-subscript\",\n                contents: t.ui.icon(t.options.icons.subscript),\n                tooltip: t.lang.font.subscript,\n                click: t.context.createInvokeHandlerAndUpdateState(\"editor.subscript\")\n              }).render();\n            }), this.context.memo(\"button.fontname\", function () {\n              var o = t.context.invoke(\"editor.currentStyle\");\n              return t.options.addDefaultFonts && e().each(o[\"font-family\"].split(\",\"), function (e, o) {\n                o = o.trim().replace(/['\"]+/g, \"\"), t.isFontDeservedToAdd(o) && -1 === t.options.fontNames.indexOf(o) && t.options.fontNames.push(o);\n              }), t.ui.buttonGroup([t.button({\n                className: \"dropdown-toggle\",\n                contents: t.ui.dropdownButtonContents('<span class=\"note-current-fontname\"></span>', t.options),\n                tooltip: t.lang.font.name,\n                data: {\n                  toggle: \"dropdown\"\n                }\n              }), t.ui.dropdownCheck({\n                className: \"dropdown-fontname\",\n                checkClassName: t.options.icons.menuCheck,\n                items: t.options.fontNames.filter(t.isFontInstalled.bind(t)),\n                title: t.lang.font.name,\n                template: function (t) {\n                  return '<span style=\"font-family: ' + f.validFontName(t) + '\">' + t + \"</span>\";\n                },\n                click: t.context.createInvokeHandlerAndUpdateState(\"editor.fontName\")\n              })]).render();\n            }), this.context.memo(\"button.fontsize\", function () {\n              return t.ui.buttonGroup([t.button({\n                className: \"dropdown-toggle\",\n                contents: t.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', t.options),\n                tooltip: t.lang.font.size,\n                data: {\n                  toggle: \"dropdown\"\n                }\n              }), t.ui.dropdownCheck({\n                className: \"dropdown-fontsize\",\n                checkClassName: t.options.icons.menuCheck,\n                items: t.options.fontSizes,\n                title: t.lang.font.size,\n                click: t.context.createInvokeHandlerAndUpdateState(\"editor.fontSize\")\n              })]).render();\n            }), this.context.memo(\"button.fontsizeunit\", function () {\n              return t.ui.buttonGroup([t.button({\n                className: \"dropdown-toggle\",\n                contents: t.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', t.options),\n                tooltip: t.lang.font.sizeunit,\n                data: {\n                  toggle: \"dropdown\"\n                }\n              }), t.ui.dropdownCheck({\n                className: \"dropdown-fontsizeunit\",\n                checkClassName: t.options.icons.menuCheck,\n                items: t.options.fontSizeUnits,\n                title: t.lang.font.sizeunit,\n                click: t.context.createInvokeHandlerAndUpdateState(\"editor.fontSizeUnit\")\n              })]).render();\n            }), this.context.memo(\"button.color\", function () {\n              return t.colorPalette(\"note-color-all\", t.lang.color.recent, !0, !0);\n            }), this.context.memo(\"button.forecolor\", function () {\n              return t.colorPalette(\"note-color-fore\", t.lang.color.foreground, !1, !0);\n            }), this.context.memo(\"button.backcolor\", function () {\n              return t.colorPalette(\"note-color-back\", t.lang.color.background, !0, !1);\n            }), this.context.memo(\"button.ul\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.unorderedlist),\n                tooltip: t.lang.lists.unordered + t.representShortcut(\"insertUnorderedList\"),\n                click: t.context.createInvokeHandler(\"editor.insertUnorderedList\")\n              }).render();\n            }), this.context.memo(\"button.ol\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.orderedlist),\n                tooltip: t.lang.lists.ordered + t.representShortcut(\"insertOrderedList\"),\n                click: t.context.createInvokeHandler(\"editor.insertOrderedList\")\n              }).render();\n            });\n            var r = this.button({\n                contents: this.ui.icon(this.options.icons.alignLeft),\n                tooltip: this.lang.paragraph.left + this.representShortcut(\"justifyLeft\"),\n                click: this.context.createInvokeHandler(\"editor.justifyLeft\")\n              }),\n              a = this.button({\n                contents: this.ui.icon(this.options.icons.alignCenter),\n                tooltip: this.lang.paragraph.center + this.representShortcut(\"justifyCenter\"),\n                click: this.context.createInvokeHandler(\"editor.justifyCenter\")\n              }),\n              s = this.button({\n                contents: this.ui.icon(this.options.icons.alignRight),\n                tooltip: this.lang.paragraph.right + this.representShortcut(\"justifyRight\"),\n                click: this.context.createInvokeHandler(\"editor.justifyRight\")\n              }),\n              l = this.button({\n                contents: this.ui.icon(this.options.icons.alignJustify),\n                tooltip: this.lang.paragraph.justify + this.representShortcut(\"justifyFull\"),\n                click: this.context.createInvokeHandler(\"editor.justifyFull\")\n              }),\n              c = this.button({\n                contents: this.ui.icon(this.options.icons.outdent),\n                tooltip: this.lang.paragraph.outdent + this.representShortcut(\"outdent\"),\n                click: this.context.createInvokeHandler(\"editor.outdent\")\n              }),\n              u = this.button({\n                contents: this.ui.icon(this.options.icons.indent),\n                tooltip: this.lang.paragraph.indent + this.representShortcut(\"indent\"),\n                click: this.context.createInvokeHandler(\"editor.indent\")\n              });\n            this.context.memo(\"button.justifyLeft\", v.invoke(r, \"render\")), this.context.memo(\"button.justifyCenter\", v.invoke(a, \"render\")), this.context.memo(\"button.justifyRight\", v.invoke(s, \"render\")), this.context.memo(\"button.justifyFull\", v.invoke(l, \"render\")), this.context.memo(\"button.outdent\", v.invoke(c, \"render\")), this.context.memo(\"button.indent\", v.invoke(u, \"render\")), this.context.memo(\"button.paragraph\", function () {\n              return t.ui.buttonGroup([t.button({\n                className: \"dropdown-toggle\",\n                contents: t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.alignLeft), t.options),\n                tooltip: t.lang.paragraph.paragraph,\n                data: {\n                  toggle: \"dropdown\"\n                }\n              }), t.ui.dropdown([t.ui.buttonGroup({\n                className: \"note-align\",\n                children: [r, a, s, l]\n              }), t.ui.buttonGroup({\n                className: \"note-list\",\n                children: [c, u]\n              })])]).render();\n            }), this.context.memo(\"button.height\", function () {\n              return t.ui.buttonGroup([t.button({\n                className: \"dropdown-toggle\",\n                contents: t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.textHeight), t.options),\n                tooltip: t.lang.font.height,\n                data: {\n                  toggle: \"dropdown\"\n                }\n              }), t.ui.dropdownCheck({\n                items: t.options.lineHeights,\n                checkClassName: t.options.icons.menuCheck,\n                className: \"dropdown-line-height\",\n                title: t.lang.font.height,\n                click: t.context.createInvokeHandler(\"editor.lineHeight\")\n              })]).render();\n            }), this.context.memo(\"button.table\", function () {\n              return t.ui.buttonGroup([t.button({\n                className: \"dropdown-toggle\",\n                contents: t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.table), t.options),\n                tooltip: t.lang.table.table,\n                data: {\n                  toggle: \"dropdown\"\n                }\n              }), t.ui.dropdown({\n                title: t.lang.table.table,\n                className: \"note-table\",\n                items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', \"</div>\", '<div class=\"note-dimension-display\">1 x 1</div>'].join(\"\")\n              })], {\n                callback: function (e) {\n                  e.find(\".note-dimension-picker-mousecatcher\").css({\n                    width: t.options.insertTableMaxSize.col + \"em\",\n                    height: t.options.insertTableMaxSize.row + \"em\"\n                  }).mouseup(t.context.createInvokeHandler(\"editor.insertTable\")).on(\"mousemove\", t.tableMoveHandler.bind(t));\n                }\n              }).render();\n            }), this.context.memo(\"button.link\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.link),\n                tooltip: t.lang.link.link + t.representShortcut(\"linkDialog.show\"),\n                click: t.context.createInvokeHandler(\"linkDialog.show\")\n              }).render();\n            }), this.context.memo(\"button.picture\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.picture),\n                tooltip: t.lang.image.image,\n                click: t.context.createInvokeHandler(\"imageDialog.show\")\n              }).render();\n            }), this.context.memo(\"button.video\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.video),\n                tooltip: t.lang.video.video,\n                click: t.context.createInvokeHandler(\"videoDialog.show\")\n              }).render();\n            }), this.context.memo(\"button.hr\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.minus),\n                tooltip: t.lang.hr.insert + t.representShortcut(\"insertHorizontalRule\"),\n                click: t.context.createInvokeHandler(\"editor.insertHorizontalRule\")\n              }).render();\n            }), this.context.memo(\"button.fullscreen\", function () {\n              return t.button({\n                className: \"btn-fullscreen note-codeview-keep\",\n                contents: t.ui.icon(t.options.icons.arrowsAlt),\n                tooltip: t.lang.options.fullscreen,\n                click: t.context.createInvokeHandler(\"fullscreen.toggle\")\n              }).render();\n            }), this.context.memo(\"button.codeview\", function () {\n              return t.button({\n                className: \"btn-codeview note-codeview-keep\",\n                contents: t.ui.icon(t.options.icons.code),\n                tooltip: t.lang.options.codeview,\n                click: t.context.createInvokeHandler(\"codeview.toggle\")\n              }).render();\n            }), this.context.memo(\"button.redo\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.redo),\n                tooltip: t.lang.history.redo + t.representShortcut(\"redo\"),\n                click: t.context.createInvokeHandler(\"editor.redo\")\n              }).render();\n            }), this.context.memo(\"button.undo\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.undo),\n                tooltip: t.lang.history.undo + t.representShortcut(\"undo\"),\n                click: t.context.createInvokeHandler(\"editor.undo\")\n              }).render();\n            }), this.context.memo(\"button.help\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.question),\n                tooltip: t.lang.options.help,\n                click: t.context.createInvokeHandler(\"helpDialog.show\")\n              }).render();\n            });\n          }\n        }, {\n          key: \"addImagePopoverButtons\",\n          value: function () {\n            var t = this;\n            this.context.memo(\"button.resizeFull\", function () {\n              return t.button({\n                contents: '<span class=\"note-fontsize-10\">100%</span>',\n                tooltip: t.lang.image.resizeFull,\n                click: t.context.createInvokeHandler(\"editor.resize\", \"1\")\n              }).render();\n            }), this.context.memo(\"button.resizeHalf\", function () {\n              return t.button({\n                contents: '<span class=\"note-fontsize-10\">50%</span>',\n                tooltip: t.lang.image.resizeHalf,\n                click: t.context.createInvokeHandler(\"editor.resize\", \"0.5\")\n              }).render();\n            }), this.context.memo(\"button.resizeQuarter\", function () {\n              return t.button({\n                contents: '<span class=\"note-fontsize-10\">25%</span>',\n                tooltip: t.lang.image.resizeQuarter,\n                click: t.context.createInvokeHandler(\"editor.resize\", \"0.25\")\n              }).render();\n            }), this.context.memo(\"button.resizeNone\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.rollback),\n                tooltip: t.lang.image.resizeNone,\n                click: t.context.createInvokeHandler(\"editor.resize\", \"0\")\n              }).render();\n            }), this.context.memo(\"button.floatLeft\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.floatLeft),\n                tooltip: t.lang.image.floatLeft,\n                click: t.context.createInvokeHandler(\"editor.floatMe\", \"left\")\n              }).render();\n            }), this.context.memo(\"button.floatRight\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.floatRight),\n                tooltip: t.lang.image.floatRight,\n                click: t.context.createInvokeHandler(\"editor.floatMe\", \"right\")\n              }).render();\n            }), this.context.memo(\"button.floatNone\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.rollback),\n                tooltip: t.lang.image.floatNone,\n                click: t.context.createInvokeHandler(\"editor.floatMe\", \"none\")\n              }).render();\n            }), this.context.memo(\"button.removeMedia\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.trash),\n                tooltip: t.lang.image.remove,\n                click: t.context.createInvokeHandler(\"editor.removeMedia\")\n              }).render();\n            });\n          }\n        }, {\n          key: \"addLinkPopoverButtons\",\n          value: function () {\n            var t = this;\n            this.context.memo(\"button.linkDialogShow\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.link),\n                tooltip: t.lang.link.edit,\n                click: t.context.createInvokeHandler(\"linkDialog.show\")\n              }).render();\n            }), this.context.memo(\"button.unlink\", function () {\n              return t.button({\n                contents: t.ui.icon(t.options.icons.unlink),\n                tooltip: t.lang.link.unlink,\n                click: t.context.createInvokeHandler(\"editor.unlink\")\n              }).render();\n            });\n          }\n        }, {\n          key: \"addTablePopoverButtons\",\n          value: function () {\n            var t = this;\n            this.context.memo(\"button.addRowUp\", function () {\n              return t.button({\n                className: \"btn-md\",\n                contents: t.ui.icon(t.options.icons.rowAbove),\n                tooltip: t.lang.table.addRowAbove,\n                click: t.context.createInvokeHandler(\"editor.addRow\", \"top\")\n              }).render();\n            }), this.context.memo(\"button.addRowDown\", function () {\n              return t.button({\n                className: \"btn-md\",\n                contents: t.ui.icon(t.options.icons.rowBelow),\n                tooltip: t.lang.table.addRowBelow,\n                click: t.context.createInvokeHandler(\"editor.addRow\", \"bottom\")\n              }).render();\n            }), this.context.memo(\"button.addColLeft\", function () {\n              return t.button({\n                className: \"btn-md\",\n                contents: t.ui.icon(t.options.icons.colBefore),\n                tooltip: t.lang.table.addColLeft,\n                click: t.context.createInvokeHandler(\"editor.addCol\", \"left\")\n              }).render();\n            }), this.context.memo(\"button.addColRight\", function () {\n              return t.button({\n                className: \"btn-md\",\n                contents: t.ui.icon(t.options.icons.colAfter),\n                tooltip: t.lang.table.addColRight,\n                click: t.context.createInvokeHandler(\"editor.addCol\", \"right\")\n              }).render();\n            }), this.context.memo(\"button.deleteRow\", function () {\n              return t.button({\n                className: \"btn-md\",\n                contents: t.ui.icon(t.options.icons.rowRemove),\n                tooltip: t.lang.table.delRow,\n                click: t.context.createInvokeHandler(\"editor.deleteRow\")\n              }).render();\n            }), this.context.memo(\"button.deleteCol\", function () {\n              return t.button({\n                className: \"btn-md\",\n                contents: t.ui.icon(t.options.icons.colRemove),\n                tooltip: t.lang.table.delCol,\n                click: t.context.createInvokeHandler(\"editor.deleteCol\")\n              }).render();\n            }), this.context.memo(\"button.deleteTable\", function () {\n              return t.button({\n                className: \"btn-md\",\n                contents: t.ui.icon(t.options.icons.trash),\n                tooltip: t.lang.table.delTable,\n                click: t.context.createInvokeHandler(\"editor.deleteTable\")\n              }).render();\n            });\n          }\n        }, {\n          key: \"build\",\n          value: function (t, e) {\n            for (var o = 0, n = e.length; o < n; o++) {\n              for (var i = e[o], r = Array.isArray(i) ? i[0] : i, a = Array.isArray(i) ? 1 === i.length ? [i[0]] : i[1] : [i], s = this.ui.buttonGroup({\n                  className: \"note-\" + r\n                }).render(), l = 0, c = a.length; l < c; l++) {\n                var u = this.context.memo(\"button.\" + a[l]);\n                u && s.append(\"function\" == typeof u ? u(this.context) : u);\n              }\n              s.appendTo(t);\n            }\n          }\n        }, {\n          key: \"updateCurrentStyle\",\n          value: function (t) {\n            var o = t || this.$toolbar,\n              n = this.context.invoke(\"editor.currentStyle\");\n            if (this.updateBtnStates(o, {\n              \".note-btn-bold\": function () {\n                return \"bold\" === n[\"font-bold\"];\n              },\n              \".note-btn-italic\": function () {\n                return \"italic\" === n[\"font-italic\"];\n              },\n              \".note-btn-underline\": function () {\n                return \"underline\" === n[\"font-underline\"];\n              },\n              \".note-btn-subscript\": function () {\n                return \"subscript\" === n[\"font-subscript\"];\n              },\n              \".note-btn-superscript\": function () {\n                return \"superscript\" === n[\"font-superscript\"];\n              },\n              \".note-btn-strikethrough\": function () {\n                return \"strikethrough\" === n[\"font-strikethrough\"];\n              }\n            }), n[\"font-family\"]) {\n              var i = n[\"font-family\"].split(\",\").map(function (t) {\n                  return t.replace(/[\\'\\\"]/g, \"\").replace(/\\s+$/, \"\").replace(/^\\s+/, \"\");\n                }),\n                r = y.find(i, this.isFontInstalled.bind(this));\n              o.find(\".dropdown-fontname a\").each(function (t, o) {\n                var n = e()(o),\n                  i = n.data(\"value\") + \"\" == r + \"\";\n                n.toggleClass(\"checked\", i);\n              }), o.find(\".note-current-fontname\").text(r).css(\"font-family\", r);\n            }\n            if (n[\"font-size\"]) {\n              var a = n[\"font-size\"];\n              o.find(\".dropdown-fontsize a\").each(function (t, o) {\n                var n = e()(o),\n                  i = n.data(\"value\") + \"\" == a + \"\";\n                n.toggleClass(\"checked\", i);\n              }), o.find(\".note-current-fontsize\").text(a);\n              var s = n[\"font-size-unit\"];\n              o.find(\".dropdown-fontsizeunit a\").each(function (t, o) {\n                var n = e()(o),\n                  i = n.data(\"value\") + \"\" == s + \"\";\n                n.toggleClass(\"checked\", i);\n              }), o.find(\".note-current-fontsizeunit\").text(s);\n            }\n            if (n[\"line-height\"]) {\n              var l = n[\"line-height\"];\n              o.find(\".dropdown-line-height a\").each(function (t, o) {\n                var n = e()(o),\n                  i = e()(o).data(\"value\") + \"\" == l + \"\";\n                n.toggleClass(\"checked\", i);\n              }), o.find(\".note-current-line-height\").text(l);\n            }\n          }\n        }, {\n          key: \"updateBtnStates\",\n          value: function (t, o) {\n            var n = this;\n            e().each(o, function (e, o) {\n              n.ui.toggleBtnActive(t.find(e), o());\n            });\n          }\n        }, {\n          key: \"tableMoveHandler\",\n          value: function (t) {\n            var o,\n              n = e()(t.target.parentNode),\n              i = n.next(),\n              r = n.find(\".note-dimension-picker-mousecatcher\"),\n              a = n.find(\".note-dimension-picker-highlighted\"),\n              s = n.find(\".note-dimension-picker-unhighlighted\");\n            if (void 0 === t.offsetX) {\n              var l = e()(t.target).offset();\n              o = {\n                x: t.pageX - l.left,\n                y: t.pageY - l.top\n              };\n            } else o = {\n              x: t.offsetX,\n              y: t.offsetY\n            };\n            var c = Math.ceil(o.x / 18) || 1,\n              u = Math.ceil(o.y / 18) || 1;\n            a.css({\n              width: c + \"em\",\n              height: u + \"em\"\n            }), r.data(\"value\", c + \"x\" + u), c > 3 && c < this.options.insertTableMaxSize.col && s.css({\n              width: c + 1 + \"em\"\n            }), u > 3 && u < this.options.insertTableMaxSize.row && s.css({\n              height: u + 1 + \"em\"\n            }), i.html(c + \" x \" + u);\n          }\n        }], n && ie(o.prototype, n), i && ie(o, i), t;\n      }();\n      function ae(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var se = function () {\n        function t(o) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.$window = e()(window), this.$document = e()(document), this.ui = e().summernote.ui, this.$note = o.layoutInfo.note, this.$editor = o.layoutInfo.editor, this.$toolbar = o.layoutInfo.toolbar, this.$editable = o.layoutInfo.editable, this.$statusbar = o.layoutInfo.statusbar, this.options = o.options, this.isFollowing = !1, this.followScroll = this.followScroll.bind(this);\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"shouldInitialize\",\n          value: function () {\n            return !this.options.airMode;\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            var t = this;\n            this.options.toolbar = this.options.toolbar || [], this.options.toolbar.length ? this.context.invoke(\"buttons.build\", this.$toolbar, this.options.toolbar) : this.$toolbar.hide(), this.options.toolbarContainer && this.$toolbar.appendTo(this.options.toolbarContainer), this.changeContainer(!1), this.$note.on(\"summernote.keyup summernote.mouseup summernote.change\", function () {\n              t.context.invoke(\"buttons.updateCurrentStyle\");\n            }), this.context.invoke(\"buttons.updateCurrentStyle\"), this.options.followingToolbar && this.$window.on(\"scroll resize\", this.followScroll);\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$toolbar.children().remove(), this.options.followingToolbar && this.$window.off(\"scroll resize\", this.followScroll);\n          }\n        }, {\n          key: \"followScroll\",\n          value: function () {\n            if (this.$editor.hasClass(\"fullscreen\")) return !1;\n            var t = this.$editor.outerHeight(),\n              o = this.$editor.width(),\n              n = this.$toolbar.height(),\n              i = this.$statusbar.height(),\n              r = 0;\n            this.options.otherStaticBar && (r = e()(this.options.otherStaticBar).outerHeight());\n            var a = this.$document.scrollTop(),\n              s = this.$editor.offset().top,\n              l = s - r,\n              c = s + t - r - n - i;\n            !this.isFollowing && a > l && a < c - n ? (this.isFollowing = !0, this.$editable.css({\n              marginTop: this.$toolbar.outerHeight()\n            }), this.$toolbar.css({\n              position: \"fixed\",\n              top: r,\n              width: o,\n              zIndex: 1e3\n            })) : this.isFollowing && (a < l || a > c) && (this.isFollowing = !1, this.$toolbar.css({\n              position: \"relative\",\n              top: 0,\n              width: \"100%\",\n              zIndex: \"auto\"\n            }), this.$editable.css({\n              marginTop: \"\"\n            }));\n          }\n        }, {\n          key: \"changeContainer\",\n          value: function (t) {\n            t ? this.$toolbar.prependTo(this.$editor) : this.options.toolbarContainer && this.$toolbar.appendTo(this.options.toolbarContainer), this.options.followingToolbar && this.followScroll();\n          }\n        }, {\n          key: \"updateFullscreen\",\n          value: function (t) {\n            this.ui.toggleBtnActive(this.$toolbar.find(\".btn-fullscreen\"), t), this.changeContainer(t);\n          }\n        }, {\n          key: \"updateCodeview\",\n          value: function (t) {\n            this.ui.toggleBtnActive(this.$toolbar.find(\".btn-codeview\"), t), t ? this.deactivate() : this.activate();\n          }\n        }, {\n          key: \"activate\",\n          value: function (t) {\n            var e = this.$toolbar.find(\"button\");\n            t || (e = e.not(\".note-codeview-keep\")), this.ui.toggleBtn(e, !0);\n          }\n        }, {\n          key: \"deactivate\",\n          value: function (t) {\n            var e = this.$toolbar.find(\"button\");\n            t || (e = e.not(\".note-codeview-keep\")), this.ui.toggleBtn(e, !1);\n          }\n        }]) && ae(o.prototype, n), i && ae(o, i), t;\n      }();\n      function le(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var ce = function () {\n        function t(o) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.ui = e().summernote.ui, this.$body = e()(document.body), this.$editor = o.layoutInfo.editor, this.options = o.options, this.lang = this.options.langInfo, o.memo(\"help.linkDialog.show\", this.options.langInfo.help[\"linkDialog.show\"]);\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"initialize\",\n          value: function () {\n            var t = this.options.dialogsInBody ? this.$body : this.options.container,\n              o = ['<div class=\"form-group note-form-group\">', '<label for=\"note-dialog-link-txt-'.concat(this.options.id, '\" class=\"note-form-label\">').concat(this.lang.link.textToDisplay, \"</label>\"), '<input id=\"note-dialog-link-txt-'.concat(this.options.id, '\" class=\"note-link-text form-control note-form-control note-input\" type=\"text\"/>'), \"</div>\", '<div class=\"form-group note-form-group\">', '<label for=\"note-dialog-link-url-'.concat(this.options.id, '\" class=\"note-form-label\">').concat(this.lang.link.url, \"</label>\"), '<input id=\"note-dialog-link-url-'.concat(this.options.id, '\" class=\"note-link-url form-control note-form-control note-input\" type=\"text\" value=\"http://\"/>'), \"</div>\", this.options.disableLinkTarget ? \"\" : e()(\"<div></div>\").append(this.ui.checkbox({\n                className: \"sn-checkbox-open-in-new-window\",\n                text: this.lang.link.openInNewWindow,\n                checked: !0\n              }).render()).html(), e()(\"<div></div>\").append(this.ui.checkbox({\n                className: \"sn-checkbox-use-protocol\",\n                text: this.lang.link.useProtocol,\n                checked: !0\n              }).render()).html()].join(\"\"),\n              n = '<input type=\"button\" href=\"#\" class=\"'.concat(\"btn btn-primary note-btn note-btn-primary note-link-btn\", '\" value=\"').concat(this.lang.link.insert, '\" disabled>');\n            this.$dialog = this.ui.dialog({\n              className: \"link-dialog\",\n              title: this.lang.link.insert,\n              fade: this.options.dialogsFade,\n              body: o,\n              footer: n\n            }).render().appendTo(t);\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.ui.hideDialog(this.$dialog), this.$dialog.remove();\n          }\n        }, {\n          key: \"bindEnterKey\",\n          value: function (t, e) {\n            t.on(\"keypress\", function (t) {\n              t.keyCode === wt.code.ENTER && (t.preventDefault(), e.trigger(\"click\"));\n            });\n          }\n        }, {\n          key: \"toggleLinkBtn\",\n          value: function (t, e, o) {\n            this.ui.toggleBtn(t, e.val() && o.val());\n          }\n        }, {\n          key: \"showLinkDialog\",\n          value: function (t) {\n            var o = this;\n            return e().Deferred(function (e) {\n              var n = o.$dialog.find(\".note-link-text\"),\n                i = o.$dialog.find(\".note-link-url\"),\n                r = o.$dialog.find(\".note-link-btn\"),\n                a = o.$dialog.find(\".sn-checkbox-open-in-new-window input[type=checkbox]\"),\n                s = o.$dialog.find(\".sn-checkbox-use-protocol input[type=checkbox]\");\n              o.ui.onDialogShown(o.$dialog, function () {\n                o.context.triggerEvent(\"dialog.shown\"), !t.url && v.isValidUrl(t.text) && (t.url = t.text), n.on(\"input paste propertychange\", function () {\n                  t.text = n.val(), o.toggleLinkBtn(r, n, i);\n                }).val(t.text), i.on(\"input paste propertychange\", function () {\n                  t.text || n.val(i.val()), o.toggleLinkBtn(r, n, i);\n                }).val(t.url), f.isSupportTouch || i.trigger(\"focus\"), o.toggleLinkBtn(r, n, i), o.bindEnterKey(i, r), o.bindEnterKey(n, r);\n                var l = void 0 !== t.isNewWindow ? t.isNewWindow : o.context.options.linkTargetBlank;\n                a.prop(\"checked\", l);\n                var c = !t.url && o.context.options.useProtocol;\n                s.prop(\"checked\", c), r.one(\"click\", function (r) {\n                  r.preventDefault(), e.resolve({\n                    range: t.range,\n                    url: i.val(),\n                    text: n.val(),\n                    isNewWindow: a.is(\":checked\"),\n                    checkProtocol: s.is(\":checked\")\n                  }), o.ui.hideDialog(o.$dialog);\n                });\n              }), o.ui.onDialogHidden(o.$dialog, function () {\n                n.off(), i.off(), r.off(), \"pending\" === e.state() && e.reject();\n              }), o.ui.showDialog(o.$dialog);\n            }).promise();\n          }\n        }, {\n          key: \"show\",\n          value: function () {\n            var t = this,\n              e = this.context.invoke(\"editor.getLinkInfo\");\n            this.context.invoke(\"editor.saveRange\"), this.showLinkDialog(e).then(function (e) {\n              t.context.invoke(\"editor.restoreRange\"), t.context.invoke(\"editor.createLink\", e);\n            }).fail(function () {\n              t.context.invoke(\"editor.restoreRange\");\n            });\n          }\n        }]) && le(o.prototype, n), i && le(o, i), t;\n      }();\n      function ue(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var de = function () {\n        function t(o) {\n          var n = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.ui = e().summernote.ui, this.options = o.options, this.events = {\n            \"summernote.keyup summernote.mouseup summernote.change summernote.scroll\": function () {\n              n.update();\n            },\n            \"summernote.disable summernote.dialog.shown\": function () {\n              n.hide();\n            },\n            \"summernote.blur\": function (t, e) {\n              e.originalEvent && e.originalEvent.relatedTarget && n.$popover[0].contains(e.originalEvent.relatedTarget) || n.hide();\n            }\n          };\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"shouldInitialize\",\n          value: function () {\n            return !y.isEmpty(this.options.popover.link);\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            this.$popover = this.ui.popover({\n              className: \"note-link-popover\",\n              callback: function (t) {\n                t.find(\".popover-content,.note-popover-content\").prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n              }\n            }).render().appendTo(this.options.container);\n            var t = this.$popover.find(\".popover-content,.note-popover-content\");\n            this.context.invoke(\"buttons.build\", t, this.options.popover.link), this.$popover.on(\"mousedown\", function (t) {\n              t.preventDefault();\n            });\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$popover.remove();\n          }\n        }, {\n          key: \"update\",\n          value: function () {\n            if (this.context.invoke(\"editor.hasFocus\")) {\n              var t = this.context.invoke(\"editor.getLastRange\");\n              if (t.isCollapsed() && t.isOnAnchor()) {\n                var o = ht.ancestor(t.sc, ht.isAnchor),\n                  n = e()(o).attr(\"href\");\n                this.$popover.find(\"a\").attr(\"href\", n).text(n);\n                var i = ht.posFromPlaceholder(o),\n                  r = e()(this.options.container).offset();\n                i.top -= r.top, i.left -= r.left, this.$popover.css({\n                  display: \"block\",\n                  left: i.left,\n                  top: i.top\n                });\n              } else this.hide();\n            } else this.hide();\n          }\n        }, {\n          key: \"hide\",\n          value: function () {\n            this.$popover.hide();\n          }\n        }]) && ue(o.prototype, n), i && ue(o, i), t;\n      }();\n      function he(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var fe = function () {\n        function t(o) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.ui = e().summernote.ui, this.$body = e()(document.body), this.$editor = o.layoutInfo.editor, this.options = o.options, this.lang = this.options.langInfo;\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"initialize\",\n          value: function () {\n            var t = \"\";\n            if (this.options.maximumImageFileSize) {\n              var e = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024)),\n                o = 1 * (this.options.maximumImageFileSize / Math.pow(1024, e)).toFixed(2) + \" \" + \" KMGTP\"[e] + \"B\";\n              t = \"<small>\".concat(this.lang.image.maximumFileSize + \" : \" + o, \"</small>\");\n            }\n            var n = this.options.dialogsInBody ? this.$body : this.options.container,\n              i = ['<div class=\"form-group note-form-group note-group-select-from-files\">', '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + \"</label>\", '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ', ' type=\"file\" name=\"files\" accept=\"' + this.options.acceptImageFileTypes + '\" multiple=\"multiple\"/>', t, \"</div>\", '<div class=\"form-group note-group-image-url\">', '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + \"</label>\", '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>', \"</div>\"].join(\"\"),\n              r = '<input type=\"button\" href=\"#\" class=\"'.concat(\"btn btn-primary note-btn note-btn-primary note-image-btn\", '\" value=\"').concat(this.lang.image.insert, '\" disabled>');\n            this.$dialog = this.ui.dialog({\n              title: this.lang.image.insert,\n              fade: this.options.dialogsFade,\n              body: i,\n              footer: r\n            }).render().appendTo(n);\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.ui.hideDialog(this.$dialog), this.$dialog.remove();\n          }\n        }, {\n          key: \"bindEnterKey\",\n          value: function (t, e) {\n            t.on(\"keypress\", function (t) {\n              t.keyCode === wt.code.ENTER && (t.preventDefault(), e.trigger(\"click\"));\n            });\n          }\n        }, {\n          key: \"show\",\n          value: function () {\n            var t = this;\n            this.context.invoke(\"editor.saveRange\"), this.showImageDialog().then(function (e) {\n              t.ui.hideDialog(t.$dialog), t.context.invoke(\"editor.restoreRange\"), \"string\" == typeof e ? t.options.callbacks.onImageLinkInsert ? t.context.triggerEvent(\"image.link.insert\", e) : t.context.invoke(\"editor.insertImage\", e) : t.context.invoke(\"editor.insertImagesOrCallback\", e);\n            }).fail(function () {\n              t.context.invoke(\"editor.restoreRange\");\n            });\n          }\n        }, {\n          key: \"showImageDialog\",\n          value: function () {\n            var t = this;\n            return e().Deferred(function (e) {\n              var o = t.$dialog.find(\".note-image-input\"),\n                n = t.$dialog.find(\".note-image-url\"),\n                i = t.$dialog.find(\".note-image-btn\");\n              t.ui.onDialogShown(t.$dialog, function () {\n                t.context.triggerEvent(\"dialog.shown\"), o.replaceWith(o.clone().on(\"change\", function (t) {\n                  e.resolve(t.target.files || t.target.value);\n                }).val(\"\")), n.on(\"input paste propertychange\", function () {\n                  t.ui.toggleBtn(i, n.val());\n                }).val(\"\"), f.isSupportTouch || n.trigger(\"focus\"), i.click(function (t) {\n                  t.preventDefault(), e.resolve(n.val());\n                }), t.bindEnterKey(n, i);\n              }), t.ui.onDialogHidden(t.$dialog, function () {\n                o.off(), n.off(), i.off(), \"pending\" === e.state() && e.reject();\n              }), t.ui.showDialog(t.$dialog);\n            });\n          }\n        }]) && he(o.prototype, n), i && he(o, i), t;\n      }();\n      function pe(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var ve = function () {\n        function t(o) {\n          var n = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.ui = e().summernote.ui, this.editable = o.layoutInfo.editable[0], this.options = o.options, this.events = {\n            \"summernote.disable summernote.dialog.shown\": function () {\n              n.hide();\n            },\n            \"summernote.blur\": function (t, e) {\n              e.originalEvent && e.originalEvent.relatedTarget && n.$popover[0].contains(e.originalEvent.relatedTarget) || n.hide();\n            }\n          };\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"shouldInitialize\",\n          value: function () {\n            return !y.isEmpty(this.options.popover.image);\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            this.$popover = this.ui.popover({\n              className: \"note-image-popover\"\n            }).render().appendTo(this.options.container);\n            var t = this.$popover.find(\".popover-content,.note-popover-content\");\n            this.context.invoke(\"buttons.build\", t, this.options.popover.image), this.$popover.on(\"mousedown\", function (t) {\n              t.preventDefault();\n            });\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$popover.remove();\n          }\n        }, {\n          key: \"update\",\n          value: function (t, o) {\n            if (ht.isImg(t)) {\n              var n = e()(t).offset(),\n                i = e()(this.options.container).offset(),\n                r = {};\n              this.options.popatmouse ? (r.left = o.pageX - 20, r.top = o.pageY) : r = n, r.top -= i.top, r.left -= i.left, this.$popover.css({\n                display: \"block\",\n                left: r.left,\n                top: r.top\n              });\n            } else this.hide();\n          }\n        }, {\n          key: \"hide\",\n          value: function () {\n            this.$popover.hide();\n          }\n        }], n && pe(o.prototype, n), i && pe(o, i), t;\n      }();\n      function me(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var ge = function () {\n        function t(o) {\n          var n = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.ui = e().summernote.ui, this.options = o.options, this.events = {\n            \"summernote.mousedown\": function (t, e) {\n              n.update(e.target);\n            },\n            \"summernote.keyup summernote.scroll summernote.change\": function () {\n              n.update();\n            },\n            \"summernote.disable summernote.dialog.shown\": function () {\n              n.hide();\n            },\n            \"summernote.blur\": function (t, e) {\n              e.originalEvent && e.originalEvent.relatedTarget && n.$popover[0].contains(e.originalEvent.relatedTarget) || n.hide();\n            }\n          };\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"shouldInitialize\",\n          value: function () {\n            return !y.isEmpty(this.options.popover.table);\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            this.$popover = this.ui.popover({\n              className: \"note-table-popover\"\n            }).render().appendTo(this.options.container);\n            var t = this.$popover.find(\".popover-content,.note-popover-content\");\n            this.context.invoke(\"buttons.build\", t, this.options.popover.table), f.isFF && document.execCommand(\"enableInlineTableEditing\", !1, !1), this.$popover.on(\"mousedown\", function (t) {\n              t.preventDefault();\n            });\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$popover.remove();\n          }\n        }, {\n          key: \"update\",\n          value: function (t) {\n            if (this.context.isDisabled()) return !1;\n            var o = ht.isCell(t) || ht.isCell(null == t ? void 0 : t.parentElement);\n            if (o) {\n              var n = ht.posFromPlaceholder(t),\n                i = e()(this.options.container).offset();\n              n.top -= i.top, n.left -= i.left, this.$popover.css({\n                display: \"block\",\n                left: n.left,\n                top: n.top\n              });\n            } else this.hide();\n            return o;\n          }\n        }, {\n          key: \"hide\",\n          value: function () {\n            this.$popover.hide();\n          }\n        }], n && me(o.prototype, n), i && me(o, i), t;\n      }();\n      function be(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var ke = function () {\n        function t(o) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.ui = e().summernote.ui, this.$body = e()(document.body), this.$editor = o.layoutInfo.editor, this.options = o.options, this.lang = this.options.langInfo;\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"initialize\",\n          value: function () {\n            var t = this.options.dialogsInBody ? this.$body : this.options.container,\n              e = ['<div class=\"form-group note-form-group row-fluid\">', '<label for=\"note-dialog-video-url-'.concat(this.options.id, '\" class=\"note-form-label\">').concat(this.lang.video.url, ' <small class=\"text-muted\">').concat(this.lang.video.providers, \"</small></label>\"), '<input id=\"note-dialog-video-url-'.concat(this.options.id, '\" class=\"note-video-url form-control note-form-control note-input\" type=\"text\"/>'), \"</div>\"].join(\"\"),\n              o = '<input type=\"button\" href=\"#\" class=\"'.concat(\"btn btn-primary note-btn note-btn-primary note-video-btn\", '\" value=\"').concat(this.lang.video.insert, '\" disabled>');\n            this.$dialog = this.ui.dialog({\n              title: this.lang.video.insert,\n              fade: this.options.dialogsFade,\n              body: e,\n              footer: o\n            }).render().appendTo(t);\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.ui.hideDialog(this.$dialog), this.$dialog.remove();\n          }\n        }, {\n          key: \"bindEnterKey\",\n          value: function (t, e) {\n            t.on(\"keypress\", function (t) {\n              t.keyCode === wt.code.ENTER && (t.preventDefault(), e.trigger(\"click\"));\n            });\n          }\n        }, {\n          key: \"createVideoNode\",\n          value: function (t) {\n            var o,\n              n = t.match(/\\/\\/(?:(?:www|m)\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))([\\w|-]{11})(?:(?:[\\?&]t=)(\\S+))?$/),\n              i = t.match(/(?:\\.|\\/\\/)drive\\.google\\.com\\/file\\/d\\/(.[a-zA-Z0-9_-]*)\\/view/),\n              r = t.match(/(?:www\\.|\\/\\/)instagram\\.com\\/p\\/(.[a-zA-Z0-9_-]*)/),\n              a = t.match(/\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/),\n              s = t.match(/\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/),\n              l = t.match(/.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/),\n              c = t.match(/\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/),\n              u = t.match(/\\/\\/(.*)\\/videos\\/watch\\/([^?]*)(?:\\?(?:start=(\\w*))?(?:&stop=(\\w*))?(?:&loop=([10]))?(?:&autoplay=([10]))?(?:&muted=([10]))?)?/),\n              d = t.match(/\\/\\/v\\.qq\\.com.*?vid=(.+)/),\n              h = t.match(/\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/),\n              f = t.match(/^.+.(mp4|m4v)$/),\n              p = t.match(/^.+.(ogg|ogv)$/),\n              v = t.match(/^.+.(webm)$/),\n              m = t.match(/(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/);\n            if (n && 11 === n[1].length) {\n              var g = n[1],\n                b = 0;\n              if (void 0 !== n[2]) {\n                var k = n[2].match(/^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/);\n                if (k) for (var y = [3600, 60, 1], w = 0, C = y.length; w < C; w++) b += void 0 !== k[w + 1] ? y[w] * parseInt(k[w + 1], 10) : 0;\n              }\n              o = e()(\"<iframe>\").attr(\"frameborder\", 0).attr(\"src\", \"//www.youtube.com/embed/\" + g + (b > 0 ? \"?start=\" + b : \"\")).attr(\"width\", \"640\").attr(\"height\", \"360\");\n            } else if (i && i[0].length) o = e()(\"<iframe>\").attr(\"frameborder\", 0).attr(\"src\", \"https://drive.google.com/file/d/\" + i[1] + \"/preview\").attr(\"width\", \"640\").attr(\"height\", \"480\");else if (r && r[0].length) o = e()(\"<iframe>\").attr(\"frameborder\", 0).attr(\"src\", \"https://instagram.com/p/\" + r[1] + \"/embed/\").attr(\"width\", \"612\").attr(\"height\", \"710\").attr(\"scrolling\", \"no\").attr(\"allowtransparency\", \"true\");else if (a && a[0].length) o = e()(\"<iframe>\").attr(\"frameborder\", 0).attr(\"src\", a[0] + \"/embed/simple\").attr(\"width\", \"600\").attr(\"height\", \"600\").attr(\"class\", \"vine-embed\");else if (s && s[3].length) o = e()(\"<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>\").attr(\"frameborder\", 0).attr(\"src\", \"//player.vimeo.com/video/\" + s[3]).attr(\"width\", \"640\").attr(\"height\", \"360\");else if (l && l[2].length) o = e()(\"<iframe>\").attr(\"frameborder\", 0).attr(\"src\", \"//www.dailymotion.com/embed/video/\" + l[2]).attr(\"width\", \"640\").attr(\"height\", \"360\");else if (c && c[1].length) o = e()(\"<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>\").attr(\"frameborder\", 0).attr(\"height\", \"498\").attr(\"width\", \"510\").attr(\"src\", \"//player.youku.com/embed/\" + c[1]);else if (u && u[0].length) {\n              var x = 0;\n              \"undefined\" !== u[2] && (x = u[2]);\n              var S = 0;\n              \"undefined\" !== u[3] && (S = u[3]);\n              var T = 0;\n              \"undefined\" !== u[4] && (T = u[4]);\n              var E = 0;\n              \"undefined\" !== u[5] && (E = u[5]);\n              var $ = 0;\n              \"undefined\" !== u[6] && ($ = u[6]), o = e()('<iframe allowfullscreen sandbox=\"allow-same-origin allow-scripts allow-popups\">').attr(\"frameborder\", 0).attr(\"src\", \"//\" + u[1] + \"/videos/embed/\" + u[2] + \"?loop=\" + T + \"&autoplay=\" + E + \"&muted=\" + $ + (x > 0 ? \"&start=\" + x : \"\") + (S > 0 ? \"&end=\" + b : \"\")).attr(\"width\", \"560\").attr(\"height\", \"315\");\n            } else if (d && d[1].length || h && h[2].length) {\n              var N = d && d[1].length ? d[1] : h[2];\n              o = e()(\"<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>\").attr(\"frameborder\", 0).attr(\"height\", \"310\").attr(\"width\", \"500\").attr(\"src\", \"https://v.qq.com/txp/iframe/player.html?vid=\" + N + \"&amp;auto=0\");\n            } else if (f || p || v) o = e()(\"<video controls>\").attr(\"src\", t).attr(\"width\", \"640\").attr(\"height\", \"360\");else {\n              if (!m || !m[0].length) return !1;\n              o = e()(\"<iframe>\").attr(\"frameborder\", 0).attr(\"src\", \"https://www.facebook.com/plugins/video.php?href=\" + encodeURIComponent(m[0]) + \"&show_text=0&width=560\").attr(\"width\", \"560\").attr(\"height\", \"301\").attr(\"scrolling\", \"no\").attr(\"allowtransparency\", \"true\");\n            }\n            return o.addClass(\"note-video-clip\"), o[0];\n          }\n        }, {\n          key: \"show\",\n          value: function () {\n            var t = this,\n              e = this.context.invoke(\"editor.getSelectedText\");\n            this.context.invoke(\"editor.saveRange\"), this.showVideoDialog(e).then(function (e) {\n              t.ui.hideDialog(t.$dialog), t.context.invoke(\"editor.restoreRange\");\n              var o = t.createVideoNode(e);\n              o && t.context.invoke(\"editor.insertNode\", o);\n            }).fail(function () {\n              t.context.invoke(\"editor.restoreRange\");\n            });\n          }\n        }, {\n          key: \"showVideoDialog\",\n          value: function () {\n            var t = this;\n            return e().Deferred(function (e) {\n              var o = t.$dialog.find(\".note-video-url\"),\n                n = t.$dialog.find(\".note-video-btn\");\n              t.ui.onDialogShown(t.$dialog, function () {\n                t.context.triggerEvent(\"dialog.shown\"), o.on(\"input paste propertychange\", function () {\n                  t.ui.toggleBtn(n, o.val());\n                }), f.isSupportTouch || o.trigger(\"focus\"), n.click(function (t) {\n                  t.preventDefault(), e.resolve(o.val());\n                }), t.bindEnterKey(o, n);\n              }), t.ui.onDialogHidden(t.$dialog, function () {\n                o.off(), n.off(), \"pending\" === e.state() && e.reject();\n              }), t.ui.showDialog(t.$dialog);\n            });\n          }\n        }]) && be(o.prototype, n), i && be(o, i), t;\n      }();\n      function ye(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var we = function () {\n        function t(o) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.ui = e().summernote.ui, this.$body = e()(document.body), this.$editor = o.layoutInfo.editor, this.options = o.options, this.lang = this.options.langInfo;\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"initialize\",\n          value: function () {\n            var t = this.options.dialogsInBody ? this.$body : this.options.container,\n              e = ['<p class=\"text-center\">', '<a href=\"http://summernote.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Summernote 0.8.20</a> · ', '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\" rel=\"noopener noreferrer\">Project</a> · ', '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\" rel=\"noopener noreferrer\">Issues</a>', \"</p>\"].join(\"\");\n            this.$dialog = this.ui.dialog({\n              title: this.lang.options.help,\n              fade: this.options.dialogsFade,\n              body: this.createShortcutList(),\n              footer: e,\n              callback: function (t) {\n                t.find(\".modal-body,.note-modal-body\").css({\n                  \"max-height\": 300,\n                  overflow: \"scroll\"\n                });\n              }\n            }).render().appendTo(t);\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.ui.hideDialog(this.$dialog), this.$dialog.remove();\n          }\n        }, {\n          key: \"createShortcutList\",\n          value: function () {\n            var t = this,\n              o = this.options.keyMap[f.isMac ? \"mac\" : \"pc\"];\n            return Object.keys(o).map(function (n) {\n              var i = o[n],\n                r = e()('<div><div class=\"help-list-item\"></div></div>');\n              return r.append(e()(\"<label><kbd>\" + n + \"</kdb></label>\").css({\n                width: 180,\n                \"margin-right\": 10\n              })).append(e()(\"<span></span>\").html(t.context.memo(\"help.\" + i) || i)), r.html();\n            }).join(\"\");\n          }\n        }, {\n          key: \"showHelpDialog\",\n          value: function () {\n            var t = this;\n            return e().Deferred(function (e) {\n              t.ui.onDialogShown(t.$dialog, function () {\n                t.context.triggerEvent(\"dialog.shown\"), e.resolve();\n              }), t.ui.showDialog(t.$dialog);\n            }).promise();\n          }\n        }, {\n          key: \"show\",\n          value: function () {\n            var t = this;\n            this.context.invoke(\"editor.saveRange\"), this.showHelpDialog().then(function () {\n              t.context.invoke(\"editor.restoreRange\");\n            });\n          }\n        }], n && ye(o.prototype, n), i && ye(o, i), t;\n      }();\n      function Ce(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var xe = function () {\n        function t(o) {\n          var n = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.ui = e().summernote.ui, this.options = o.options, this.hidable = !0, this.onContextmenu = !1, this.pageX = null, this.pageY = null, this.events = {\n            \"summernote.contextmenu\": function (t) {\n              n.options.editing && (t.preventDefault(), t.stopPropagation(), n.onContextmenu = !0, n.update(!0));\n            },\n            \"summernote.mousedown\": function (t, e) {\n              n.pageX = e.pageX, n.pageY = e.pageY;\n            },\n            \"summernote.keyup summernote.mouseup summernote.scroll\": function (t, e) {\n              n.options.editing && !n.onContextmenu && (n.pageX = e.pageX, n.pageY = e.pageY, n.update()), n.onContextmenu = !1;\n            },\n            \"summernote.disable summernote.change summernote.dialog.shown summernote.blur\": function () {\n              n.hide();\n            },\n            \"summernote.focusout\": function () {\n              n.$popover.is(\":active,:focus\") || n.hide();\n            }\n          };\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"shouldInitialize\",\n          value: function () {\n            return this.options.airMode && !y.isEmpty(this.options.popover.air);\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            var t = this;\n            this.$popover = this.ui.popover({\n              className: \"note-air-popover\"\n            }).render().appendTo(this.options.container);\n            var e = this.$popover.find(\".popover-content\");\n            this.context.invoke(\"buttons.build\", e, this.options.popover.air), this.$popover.on(\"mousedown\", function () {\n              t.hidable = !1;\n            }), this.$popover.on(\"mouseup\", function () {\n              t.hidable = !0;\n            });\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$popover.remove();\n          }\n        }, {\n          key: \"update\",\n          value: function (t) {\n            var o = this.context.invoke(\"editor.currentStyle\");\n            if (!o.range || o.range.isCollapsed() && !t) this.hide();else {\n              var n = {\n                  left: this.pageX,\n                  top: this.pageY\n                },\n                i = e()(this.options.container).offset();\n              n.top -= i.top, n.left -= i.left, this.$popover.css({\n                display: \"block\",\n                left: Math.max(n.left, 0) + -5,\n                top: n.top + 5\n              }), this.context.invoke(\"buttons.updateCurrentStyle\", this.$popover);\n            }\n          }\n        }, {\n          key: \"updateCodeview\",\n          value: function (t) {\n            this.ui.toggleBtnActive(this.$popover.find(\".btn-codeview\"), t), t && this.hide();\n          }\n        }, {\n          key: \"hide\",\n          value: function () {\n            this.hidable && this.$popover.hide();\n          }\n        }]) && Ce(o.prototype, n), i && Ce(o, i), t;\n      }();\n      function Se(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Te = function () {\n        function t(o) {\n          var n = this;\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.context = o, this.ui = e().summernote.ui, this.$editable = o.layoutInfo.editable, this.options = o.options, this.hint = this.options.hint || [], this.direction = this.options.hintDirection || \"bottom\", this.hints = Array.isArray(this.hint) ? this.hint : [this.hint], this.events = {\n            \"summernote.keyup\": function (t, e) {\n              e.isDefaultPrevented() || n.handleKeyup(e);\n            },\n            \"summernote.keydown\": function (t, e) {\n              n.handleKeydown(e);\n            },\n            \"summernote.disable summernote.dialog.shown summernote.blur\": function () {\n              n.hide();\n            }\n          };\n        }\n        var o, n, i;\n        return o = t, n = [{\n          key: \"shouldInitialize\",\n          value: function () {\n            return this.hints.length > 0;\n          }\n        }, {\n          key: \"initialize\",\n          value: function () {\n            var t = this;\n            this.lastWordRange = null, this.matchingWord = null, this.$popover = this.ui.popover({\n              className: \"note-hint-popover\",\n              hideArrow: !0,\n              direction: \"\"\n            }).render().appendTo(this.options.container), this.$popover.hide(), this.$content = this.$popover.find(\".popover-content,.note-popover-content\"), this.$content.on(\"click\", \".note-hint-item\", function (o) {\n              t.$content.find(\".active\").removeClass(\"active\"), e()(o.currentTarget).addClass(\"active\"), t.replace();\n            }), this.$popover.on(\"mousedown\", function (t) {\n              t.preventDefault();\n            });\n          }\n        }, {\n          key: \"destroy\",\n          value: function () {\n            this.$popover.remove();\n          }\n        }, {\n          key: \"selectItem\",\n          value: function (t) {\n            this.$content.find(\".active\").removeClass(\"active\"), t.addClass(\"active\"), this.$content[0].scrollTop = t[0].offsetTop - this.$content.innerHeight() / 2;\n          }\n        }, {\n          key: \"moveDown\",\n          value: function () {\n            var t = this.$content.find(\".note-hint-item.active\"),\n              e = t.next();\n            if (e.length) this.selectItem(e);else {\n              var o = t.parent().next();\n              o.length || (o = this.$content.find(\".note-hint-group\").first()), this.selectItem(o.find(\".note-hint-item\").first());\n            }\n          }\n        }, {\n          key: \"moveUp\",\n          value: function () {\n            var t = this.$content.find(\".note-hint-item.active\"),\n              e = t.prev();\n            if (e.length) this.selectItem(e);else {\n              var o = t.parent().prev();\n              o.length || (o = this.$content.find(\".note-hint-group\").last()), this.selectItem(o.find(\".note-hint-item\").last());\n            }\n          }\n        }, {\n          key: \"replace\",\n          value: function () {\n            var t = this.$content.find(\".note-hint-item.active\");\n            if (t.length) {\n              var o = this.nodeFromItem(t);\n              if (null !== this.matchingWord && 0 === this.matchingWord.length) this.lastWordRange.so = this.lastWordRange.eo;else if (null !== this.matchingWord && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n                var n = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n                n > 0 && (this.lastWordRange.so += n);\n              }\n              if (this.lastWordRange.insertNode(o), \"next\" === this.options.hintSelect) {\n                var i = document.createTextNode(\"\");\n                e()(o).after(i), kt.createFromNodeBefore(i).select();\n              } else kt.createFromNodeAfter(o).select();\n              this.lastWordRange = null, this.hide(), this.context.invoke(\"editor.focus\"), this.context.triggerEvent(\"change\", this.$editable.html(), this.$editable);\n            }\n          }\n        }, {\n          key: \"nodeFromItem\",\n          value: function (t) {\n            var e = this.hints[t.data(\"index\")],\n              o = t.data(\"item\"),\n              n = e.content ? e.content(o) : o;\n            return \"string\" == typeof n && (n = ht.createText(n)), n;\n          }\n        }, {\n          key: \"createItemTemplates\",\n          value: function (t, o) {\n            var n = this.hints[t];\n            return o.map(function (o) {\n              var i = e()('<div class=\"note-hint-item\"></div>');\n              return i.append(n.template ? n.template(o) : o + \"\"), i.data({\n                index: t,\n                item: o\n              }), i;\n            });\n          }\n        }, {\n          key: \"handleKeydown\",\n          value: function (t) {\n            this.$popover.is(\":visible\") && (t.keyCode === wt.code.ENTER ? (t.preventDefault(), this.replace()) : t.keyCode === wt.code.UP ? (t.preventDefault(), this.moveUp()) : t.keyCode === wt.code.DOWN && (t.preventDefault(), this.moveDown()));\n          }\n        }, {\n          key: \"searchKeyword\",\n          value: function (t, e, o) {\n            var n = this.hints[t];\n            if (n && n.match.test(e) && n.search) {\n              var i = n.match.exec(e);\n              this.matchingWord = i[0], n.search(i[1], o);\n            } else o();\n          }\n        }, {\n          key: \"createGroup\",\n          value: function (t, o) {\n            var n = this,\n              i = e()('<div class=\"note-hint-group note-hint-group-' + t + '\"></div>');\n            return this.searchKeyword(t, o, function (e) {\n              (e = e || []).length && (i.html(n.createItemTemplates(t, e)), n.show());\n            }), i;\n          }\n        }, {\n          key: \"handleKeyup\",\n          value: function (t) {\n            var o = this;\n            if (!y.contains([wt.code.ENTER, wt.code.UP, wt.code.DOWN], t.keyCode)) {\n              var n,\n                i,\n                r = this.context.invoke(\"editor.getLastRange\");\n              if (\"words\" === this.options.hintMode) {\n                if (n = r.getWordsRange(r), i = n.toString(), this.hints.forEach(function (t) {\n                  if (t.match.test(i)) return n = r.getWordsMatchRange(t.match), !1;\n                }), !n) return void this.hide();\n                i = n.toString();\n              } else n = r.getWordRange(), i = n.toString();\n              if (this.hints.length && i) {\n                this.$content.empty();\n                var a = v.rect2bnd(y.last(n.getClientRects())),\n                  s = e()(this.options.container).offset();\n                a && (a.top -= s.top, a.left -= s.left, this.$popover.hide(), this.lastWordRange = n, this.hints.forEach(function (t, e) {\n                  t.match.test(i) && o.createGroup(e, i).appendTo(o.$content);\n                }), this.$content.find(\".note-hint-item:first\").addClass(\"active\"), \"top\" === this.direction ? this.$popover.css({\n                  left: a.left,\n                  top: a.top - this.$popover.outerHeight() - 5\n                }) : this.$popover.css({\n                  left: a.left,\n                  top: a.top + a.height + 5\n                }));\n              } else this.hide();\n            }\n          }\n        }, {\n          key: \"show\",\n          value: function () {\n            this.$popover.show();\n          }\n        }, {\n          key: \"hide\",\n          value: function () {\n            this.$popover.hide();\n          }\n        }], n && Se(o.prototype, n), i && Se(o, i), t;\n      }();\n      function Ee(t) {\n        return Ee = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (t) {\n          return typeof t;\n        } : function (t) {\n          return t && \"function\" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? \"symbol\" : typeof t;\n        }, Ee(t);\n      }\n      function $e(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      e().summernote = e().extend(e().summernote, {\n        version: \"0.8.20\",\n        plugins: {},\n        dom: ht,\n        range: kt,\n        lists: y,\n        options: {\n          langInfo: e().summernote.lang[\"en-US\"],\n          editing: !0,\n          modules: {\n            editor: Ft,\n            clipboard: Ht,\n            dropzone: zt,\n            codeview: Ut,\n            statusbar: Kt,\n            fullscreen: qt,\n            handle: Gt,\n            hintPopover: Te,\n            autoLink: Xt,\n            autoSync: Jt,\n            autoReplace: ee,\n            placeholder: ne,\n            buttons: re,\n            toolbar: se,\n            linkDialog: ce,\n            linkPopover: de,\n            imageDialog: fe,\n            imagePopover: ve,\n            tablePopover: ge,\n            videoDialog: ke,\n            helpDialog: we,\n            airPopover: xe\n          },\n          buttons: {},\n          lang: \"en-US\",\n          followingToolbar: !1,\n          toolbarPosition: \"top\",\n          otherStaticBar: \"\",\n          codeviewKeepButton: !1,\n          toolbar: [[\"style\", [\"style\"]], [\"font\", [\"bold\", \"underline\", \"clear\"]], [\"fontname\", [\"fontname\"]], [\"color\", [\"color\"]], [\"para\", [\"ul\", \"ol\", \"paragraph\"]], [\"table\", [\"table\"]], [\"insert\", [\"link\", \"picture\", \"video\"]], [\"view\", [\"fullscreen\", \"codeview\", \"help\"]]],\n          popatmouse: !0,\n          popover: {\n            image: [[\"resize\", [\"resizeFull\", \"resizeHalf\", \"resizeQuarter\", \"resizeNone\"]], [\"float\", [\"floatLeft\", \"floatRight\", \"floatNone\"]], [\"remove\", [\"removeMedia\"]]],\n            link: [[\"link\", [\"linkDialogShow\", \"unlink\"]]],\n            table: [[\"add\", [\"addRowDown\", \"addRowUp\", \"addColLeft\", \"addColRight\"]], [\"delete\", [\"deleteRow\", \"deleteCol\", \"deleteTable\"]]],\n            air: [[\"color\", [\"color\"]], [\"font\", [\"bold\", \"underline\", \"clear\"]], [\"para\", [\"ul\", \"paragraph\"]], [\"table\", [\"table\"]], [\"insert\", [\"link\", \"picture\"]], [\"view\", [\"fullscreen\", \"codeview\"]]]\n          },\n          airMode: !1,\n          overrideContextMenu: !1,\n          width: null,\n          height: null,\n          linkTargetBlank: !0,\n          useProtocol: !0,\n          defaultProtocol: \"http://\",\n          focus: !1,\n          tabDisabled: !1,\n          tabSize: 4,\n          styleWithCSS: !1,\n          shortcuts: !0,\n          textareaAutoSync: !0,\n          tooltip: \"auto\",\n          container: null,\n          maxTextLength: 0,\n          blockquoteBreakingLevel: 2,\n          spellCheck: !0,\n          disableGrammar: !1,\n          placeholder: null,\n          inheritPlaceholder: !1,\n          recordEveryKeystroke: !1,\n          historyLimit: 200,\n          showDomainOnlyForAutolink: !1,\n          hintMode: \"word\",\n          hintSelect: \"after\",\n          hintDirection: \"bottom\",\n          styleTags: [\"p\", \"blockquote\", \"pre\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n          fontNames: [\"Arial\", \"Arial Black\", \"Comic Sans MS\", \"Courier New\", \"Helvetica Neue\", \"Helvetica\", \"Impact\", \"Lucida Grande\", \"Tahoma\", \"Times New Roman\", \"Verdana\"],\n          fontNamesIgnoreCheck: [],\n          addDefaultFonts: !0,\n          fontSizes: [\"8\", \"9\", \"10\", \"11\", \"12\", \"14\", \"18\", \"24\", \"36\"],\n          fontSizeUnits: [\"px\", \"pt\"],\n          colors: [[\"#000000\", \"#424242\", \"#636363\", \"#9C9C94\", \"#CEC6CE\", \"#EFEFEF\", \"#F7F7F7\", \"#FFFFFF\"], [\"#FF0000\", \"#FF9C00\", \"#FFFF00\", \"#00FF00\", \"#00FFFF\", \"#0000FF\", \"#9C00FF\", \"#FF00FF\"], [\"#F7C6CE\", \"#FFE7CE\", \"#FFEFC6\", \"#D6EFD6\", \"#CEDEE7\", \"#CEE7F7\", \"#D6D6E7\", \"#E7D6DE\"], [\"#E79C9C\", \"#FFC69C\", \"#FFE79C\", \"#B5D6A5\", \"#A5C6CE\", \"#9CC6EF\", \"#B5A5D6\", \"#D6A5BD\"], [\"#E76363\", \"#F7AD6B\", \"#FFD663\", \"#94BD7B\", \"#73A5AD\", \"#6BADDE\", \"#8C7BC6\", \"#C67BA5\"], [\"#CE0000\", \"#E79439\", \"#EFC631\", \"#6BA54A\", \"#4A7B8C\", \"#3984C6\", \"#634AA5\", \"#A54A7B\"], [\"#9C0000\", \"#B56308\", \"#BD9400\", \"#397B21\", \"#104A5A\", \"#085294\", \"#311873\", \"#731842\"], [\"#630000\", \"#7B3900\", \"#846300\", \"#295218\", \"#083139\", \"#003163\", \"#21104A\", \"#4A1031\"]],\n          colorsName: [[\"Black\", \"Tundora\", \"Dove Gray\", \"Star Dust\", \"Pale Slate\", \"Gallery\", \"Alabaster\", \"White\"], [\"Red\", \"Orange Peel\", \"Yellow\", \"Green\", \"Cyan\", \"Blue\", \"Electric Violet\", \"Magenta\"], [\"Azalea\", \"Karry\", \"Egg White\", \"Zanah\", \"Botticelli\", \"Tropical Blue\", \"Mischka\", \"Twilight\"], [\"Tonys Pink\", \"Peach Orange\", \"Cream Brulee\", \"Sprout\", \"Casper\", \"Perano\", \"Cold Purple\", \"Careys Pink\"], [\"Mandy\", \"Rajah\", \"Dandelion\", \"Olivine\", \"Gulf Stream\", \"Viking\", \"Blue Marguerite\", \"Puce\"], [\"Guardsman Red\", \"Fire Bush\", \"Golden Dream\", \"Chelsea Cucumber\", \"Smalt Blue\", \"Boston Blue\", \"Butterfly Bush\", \"Cadillac\"], [\"Sangria\", \"Mai Tai\", \"Buddha Gold\", \"Forest Green\", \"Eden\", \"Venice Blue\", \"Meteorite\", \"Claret\"], [\"Rosewood\", \"Cinnamon\", \"Olive\", \"Parsley\", \"Tiber\", \"Midnight Blue\", \"Valentino\", \"Loulou\"]],\n          colorButton: {\n            foreColor: \"#000000\",\n            backColor: \"#FFFF00\"\n          },\n          lineHeights: [\"1.0\", \"1.2\", \"1.4\", \"1.5\", \"1.6\", \"1.8\", \"2.0\", \"3.0\"],\n          tableClassName: \"table table-bordered\",\n          insertTableMaxSize: {\n            col: 10,\n            row: 10\n          },\n          dialogsInBody: !1,\n          dialogsFade: !1,\n          maximumImageFileSize: null,\n          acceptImageFileTypes: \"image/*\",\n          callbacks: {\n            onBeforeCommand: null,\n            onBlur: null,\n            onBlurCodeview: null,\n            onChange: null,\n            onChangeCodeview: null,\n            onDialogShown: null,\n            onEnter: null,\n            onFocus: null,\n            onImageLinkInsert: null,\n            onImageUpload: null,\n            onImageUploadError: null,\n            onInit: null,\n            onKeydown: null,\n            onKeyup: null,\n            onMousedown: null,\n            onMouseup: null,\n            onPaste: null,\n            onScroll: null\n          },\n          codemirror: {\n            mode: \"text/html\",\n            htmlMode: !0,\n            lineNumbers: !0\n          },\n          codeviewFilter: !0,\n          codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n          codeviewIframeFilter: !0,\n          codeviewIframeWhitelistSrc: [],\n          codeviewIframeWhitelistSrcBase: [\"www.youtube.com\", \"www.youtube-nocookie.com\", \"www.facebook.com\", \"vine.co\", \"instagram.com\", \"player.vimeo.com\", \"www.dailymotion.com\", \"player.youku.com\", \"jumpingbean.tv\", \"v.qq.com\"],\n          keyMap: {\n            pc: {\n              ESC: \"escape\",\n              ENTER: \"insertParagraph\",\n              \"CTRL+Z\": \"undo\",\n              \"CTRL+Y\": \"redo\",\n              TAB: \"tab\",\n              \"SHIFT+TAB\": \"untab\",\n              \"CTRL+B\": \"bold\",\n              \"CTRL+I\": \"italic\",\n              \"CTRL+U\": \"underline\",\n              \"CTRL+SHIFT+S\": \"strikethrough\",\n              \"CTRL+BACKSLASH\": \"removeFormat\",\n              \"CTRL+SHIFT+L\": \"justifyLeft\",\n              \"CTRL+SHIFT+E\": \"justifyCenter\",\n              \"CTRL+SHIFT+R\": \"justifyRight\",\n              \"CTRL+SHIFT+J\": \"justifyFull\",\n              \"CTRL+SHIFT+NUM7\": \"insertUnorderedList\",\n              \"CTRL+SHIFT+NUM8\": \"insertOrderedList\",\n              \"CTRL+LEFTBRACKET\": \"outdent\",\n              \"CTRL+RIGHTBRACKET\": \"indent\",\n              \"CTRL+NUM0\": \"formatPara\",\n              \"CTRL+NUM1\": \"formatH1\",\n              \"CTRL+NUM2\": \"formatH2\",\n              \"CTRL+NUM3\": \"formatH3\",\n              \"CTRL+NUM4\": \"formatH4\",\n              \"CTRL+NUM5\": \"formatH5\",\n              \"CTRL+NUM6\": \"formatH6\",\n              \"CTRL+ENTER\": \"insertHorizontalRule\",\n              \"CTRL+K\": \"linkDialog.show\"\n            },\n            mac: {\n              ESC: \"escape\",\n              ENTER: \"insertParagraph\",\n              \"CMD+Z\": \"undo\",\n              \"CMD+SHIFT+Z\": \"redo\",\n              TAB: \"tab\",\n              \"SHIFT+TAB\": \"untab\",\n              \"CMD+B\": \"bold\",\n              \"CMD+I\": \"italic\",\n              \"CMD+U\": \"underline\",\n              \"CMD+SHIFT+S\": \"strikethrough\",\n              \"CMD+BACKSLASH\": \"removeFormat\",\n              \"CMD+SHIFT+L\": \"justifyLeft\",\n              \"CMD+SHIFT+E\": \"justifyCenter\",\n              \"CMD+SHIFT+R\": \"justifyRight\",\n              \"CMD+SHIFT+J\": \"justifyFull\",\n              \"CMD+SHIFT+NUM7\": \"insertUnorderedList\",\n              \"CMD+SHIFT+NUM8\": \"insertOrderedList\",\n              \"CMD+LEFTBRACKET\": \"outdent\",\n              \"CMD+RIGHTBRACKET\": \"indent\",\n              \"CMD+NUM0\": \"formatPara\",\n              \"CMD+NUM1\": \"formatH1\",\n              \"CMD+NUM2\": \"formatH2\",\n              \"CMD+NUM3\": \"formatH3\",\n              \"CMD+NUM4\": \"formatH4\",\n              \"CMD+NUM5\": \"formatH5\",\n              \"CMD+NUM6\": \"formatH6\",\n              \"CMD+ENTER\": \"insertHorizontalRule\",\n              \"CMD+K\": \"linkDialog.show\"\n            }\n          },\n          icons: {\n            align: \"note-icon-align\",\n            alignCenter: \"note-icon-align-center\",\n            alignJustify: \"note-icon-align-justify\",\n            alignLeft: \"note-icon-align-left\",\n            alignRight: \"note-icon-align-right\",\n            rowBelow: \"note-icon-row-below\",\n            colBefore: \"note-icon-col-before\",\n            colAfter: \"note-icon-col-after\",\n            rowAbove: \"note-icon-row-above\",\n            rowRemove: \"note-icon-row-remove\",\n            colRemove: \"note-icon-col-remove\",\n            indent: \"note-icon-align-indent\",\n            outdent: \"note-icon-align-outdent\",\n            arrowsAlt: \"note-icon-arrows-alt\",\n            bold: \"note-icon-bold\",\n            caret: \"note-icon-caret\",\n            circle: \"note-icon-circle\",\n            close: \"note-icon-close\",\n            code: \"note-icon-code\",\n            eraser: \"note-icon-eraser\",\n            floatLeft: \"note-icon-float-left\",\n            floatRight: \"note-icon-float-right\",\n            font: \"note-icon-font\",\n            frame: \"note-icon-frame\",\n            italic: \"note-icon-italic\",\n            link: \"note-icon-link\",\n            unlink: \"note-icon-chain-broken\",\n            magic: \"note-icon-magic\",\n            menuCheck: \"note-icon-menu-check\",\n            minus: \"note-icon-minus\",\n            orderedlist: \"note-icon-orderedlist\",\n            pencil: \"note-icon-pencil\",\n            picture: \"note-icon-picture\",\n            question: \"note-icon-question\",\n            redo: \"note-icon-redo\",\n            rollback: \"note-icon-rollback\",\n            square: \"note-icon-square\",\n            strikethrough: \"note-icon-strikethrough\",\n            subscript: \"note-icon-subscript\",\n            superscript: \"note-icon-superscript\",\n            table: \"note-icon-table\",\n            textHeight: \"note-icon-text-height\",\n            trash: \"note-icon-trash\",\n            underline: \"note-icon-underline\",\n            undo: \"note-icon-undo\",\n            unorderedlist: \"note-icon-unorderedlist\",\n            video: \"note-icon-video\"\n          }\n        }\n      });\n      var Ne = function () {\n        function t(e, o, n, i) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.markup = e, this.children = o, this.options = n, this.callback = i;\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"render\",\n          value: function (t) {\n            var o = e()(this.markup);\n            if (this.options && this.options.contents && o.html(this.options.contents), this.options && this.options.className && o.addClass(this.options.className), this.options && this.options.data && e().each(this.options.data, function (t, e) {\n              o.attr(\"data-\" + t, e);\n            }), this.options && this.options.click && o.on(\"click\", this.options.click), this.children) {\n              var n = o.find(\".note-children-container\");\n              this.children.forEach(function (t) {\n                t.render(n.length ? n : o);\n              });\n            }\n            return this.callback && this.callback(o, this.options), this.options && this.options.callback && this.options.callback(o), t && t.append(o), o;\n          }\n        }]) && $e(o.prototype, n), i && $e(o, i), t;\n      }();\n      const Ie = function (t, e) {\n        return function () {\n          var o = \"object\" === Ee(arguments[1]) ? arguments[1] : arguments[0],\n            n = Array.isArray(arguments[0]) ? arguments[0] : [];\n          return o && o.children && (n = o.children), new Ne(t, n, o, e);\n        };\n      };\n      function Pe(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      const Re = function () {\n        function t(o, n) {\n          if (function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.$node = o, this.options = e().extend({}, {\n            title: \"\",\n            target: n.container,\n            trigger: \"hover focus\",\n            placement: \"bottom\"\n          }, n), this.$tooltip = e()(['<div class=\"note-tooltip\">', '<div class=\"note-tooltip-arrow\"></div>', '<div class=\"note-tooltip-content\"></div>', \"</div>\"].join(\"\")), \"manual\" !== this.options.trigger) {\n            var i = this.show.bind(this),\n              r = this.hide.bind(this),\n              a = this.toggle.bind(this);\n            this.options.trigger.split(\" \").forEach(function (t) {\n              \"hover\" === t ? (o.off(\"mouseenter mouseleave\"), o.on(\"mouseenter\", i).on(\"mouseleave\", r)) : \"click\" === t ? o.on(\"click\", a) : \"focus\" === t && o.on(\"focus\", i).on(\"blur\", r);\n            });\n          }\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"show\",\n          value: function () {\n            var t = this.$node,\n              o = t.offset(),\n              n = e()(this.options.target).offset();\n            o.top -= n.top, o.left -= n.left;\n            var i = this.$tooltip,\n              r = this.options.title || t.attr(\"title\") || t.data(\"title\"),\n              a = this.options.placement || t.data(\"placement\");\n            i.addClass(a), i.find(\".note-tooltip-content\").text(r), i.appendTo(this.options.target);\n            var s = t.outerWidth(),\n              l = t.outerHeight(),\n              c = i.outerWidth(),\n              u = i.outerHeight();\n            \"bottom\" === a ? i.css({\n              top: o.top + l,\n              left: o.left + (s / 2 - c / 2)\n            }) : \"top\" === a ? i.css({\n              top: o.top - u,\n              left: o.left + (s / 2 - c / 2)\n            }) : \"left\" === a ? i.css({\n              top: o.top + (l / 2 - u / 2),\n              left: o.left - c\n            }) : \"right\" === a && i.css({\n              top: o.top + (l / 2 - u / 2),\n              left: o.left + s\n            }), i.addClass(\"in\");\n          }\n        }, {\n          key: \"hide\",\n          value: function () {\n            var t = this;\n            this.$tooltip.removeClass(\"in\"), setTimeout(function () {\n              t.$tooltip.remove();\n            }, 200);\n          }\n        }, {\n          key: \"toggle\",\n          value: function () {\n            this.$tooltip.hasClass(\"in\") ? this.hide() : this.show();\n          }\n        }]) && Pe(o.prototype, n), i && Pe(o, i), t;\n      }();\n      function Le(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      var Ae = function () {\n        function t(o, n) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.$button = o, this.options = e().extend({}, {\n            target: n.container\n          }, n), this.setEvent();\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"setEvent\",\n          value: function () {\n            var t = this;\n            this.$button.on(\"click\", function (e) {\n              t.toggle(), e.stopImmediatePropagation();\n            });\n          }\n        }, {\n          key: \"clear\",\n          value: function () {\n            var t = e()(\".note-btn-group.open\");\n            t.find(\".note-btn.active\").removeClass(\"active\"), t.removeClass(\"open\");\n          }\n        }, {\n          key: \"show\",\n          value: function () {\n            this.$button.addClass(\"active\"), this.$button.parent().addClass(\"open\");\n            var t = this.$button.next(),\n              o = t.offset(),\n              n = t.outerWidth(),\n              i = e()(window).width(),\n              r = parseFloat(e()(this.options.target).css(\"margin-right\"));\n            o.left + n > i - r ? t.css(\"margin-left\", i - r - (o.left + n)) : t.css(\"margin-left\", \"\");\n          }\n        }, {\n          key: \"hide\",\n          value: function () {\n            this.$button.removeClass(\"active\"), this.$button.parent().removeClass(\"open\");\n          }\n        }, {\n          key: \"toggle\",\n          value: function () {\n            var t = this.$button.parent().hasClass(\"open\");\n            this.clear(), t ? this.hide() : this.show();\n          }\n        }]) && Le(o.prototype, n), i && Le(o, i), t;\n      }();\n      e()(document).on(\"click\", function (t) {\n        e()(t.target).closest(\".note-btn-group\").length || (e()(\".note-btn-group.open\").removeClass(\"open\"), e()(\".note-btn-group .note-btn.active\").removeClass(\"active\"));\n      }), e()(document).on(\"click.note-dropdown-menu\", function (t) {\n        e()(t.target).closest(\".note-dropdown-menu\").parent().removeClass(\"open\"), e()(t.target).closest(\".note-dropdown-menu\").parent().find(\".note-btn.active\").removeClass(\"active\");\n      });\n      const Fe = Ae;\n      function De(t, e) {\n        for (var o = 0; o < e.length; o++) {\n          var n = e[o];\n          n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);\n        }\n      }\n      const He = function () {\n        function t(o) {\n          !function (t, e) {\n            if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n          }(this, t), this.$modal = o, this.$backdrop = e()('<div class=\"note-modal-backdrop\"></div>');\n        }\n        var o, n, i;\n        return o = t, (n = [{\n          key: \"show\",\n          value: function () {\n            var t = this;\n            this.$backdrop.appendTo(document.body).show(), this.$modal.addClass(\"open\").show(), this.$modal.trigger(\"note.modal.show\"), this.$modal.off(\"click\", \".close\").on(\"click\", \".close\", this.hide.bind(this)), this.$modal.on(\"keydown\", function (e) {\n              27 === e.which && (e.preventDefault(), t.hide());\n            });\n          }\n        }, {\n          key: \"hide\",\n          value: function () {\n            this.$modal.removeClass(\"open\").hide(), this.$backdrop.hide(), this.$modal.trigger(\"note.modal.hide\"), this.$modal.off(\"keydown\");\n          }\n        }]) && De(o.prototype, n), i && De(o, i), t;\n      }();\n      var Be = Ie('<div class=\"note-editor note-frame\"></div>'),\n        ze = Ie('<div class=\"note-toolbar\" role=\"toolbar\"></div>'),\n        Me = Ie('<div class=\"note-editing-area\"></div>'),\n        Oe = Ie('<textarea class=\"note-codable\" aria-multiline=\"true\"></textarea>'),\n        je = Ie('<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>'),\n        Ue = Ie(['<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>', '<div class=\"note-statusbar\" role=\"status\">', '<div class=\"note-resizebar\" aria-label=\"resize\">', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', '<div class=\"note-icon-bar\"></div>', \"</div>\", \"</div>\"].join(\"\")),\n        We = Ie('<div class=\"note-editor note-airframe\"></div>'),\n        Ke = Ie(['<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>', '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>'].join(\"\")),\n        Ve = Ie('<div class=\"note-btn-group\"></div>'),\n        qe = Ie('<button type=\"button\" class=\"note-btn\" tabindex=\"-1\"></button>', function (t, o) {\n          o && o.tooltip && (t.attr({\n            \"aria-label\": o.tooltip\n          }), t.data(\"_lite_tooltip\", new Re(t, {\n            title: o.tooltip,\n            container: o.container\n          })).on(\"click\", function (t) {\n            e()(t.currentTarget).data(\"_lite_tooltip\").hide();\n          })), o.contents && t.html(o.contents), o && o.data && \"dropdown\" === o.data.toggle && t.data(\"_lite_dropdown\", new Fe(t, {\n            container: o.container\n          })), o && o.codeviewKeepButton && t.addClass(\"note-codeview-keep\");\n        }),\n        _e = Ie('<div class=\"note-dropdown-menu\" role=\"list\"></div>', function (t, o) {\n          var n = Array.isArray(o.items) ? o.items.map(function (t) {\n            var n = \"string\" == typeof t ? t : t.value || \"\",\n              i = o.template ? o.template(t) : t,\n              r = e()('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + n + '\" role=\"listitem\" aria-label=\"' + n + '\"></a>');\n            return r.html(i).data(\"item\", t), r;\n          }) : o.items;\n          t.html(n).attr({\n            \"aria-label\": o.title\n          }), t.on(\"click\", \"> .note-dropdown-item\", function (t) {\n            var n = e()(this),\n              i = n.data(\"item\"),\n              r = n.data(\"value\");\n            i.click ? i.click(n) : o.itemClick && o.itemClick(t, i, r);\n          }), o && o.codeviewKeepButton && t.addClass(\"note-codeview-keep\");\n        }),\n        Ge = Ie('<div class=\"note-dropdown-menu note-check\" role=\"list\"></div>', function (t, o) {\n          var n = Array.isArray(o.items) ? o.items.map(function (t) {\n            var n = \"string\" == typeof t ? t : t.value || \"\",\n              i = o.template ? o.template(t) : t,\n              r = e()('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + n + '\" role=\"listitem\" aria-label=\"' + t + '\"></a>');\n            return r.html([lo(o.checkClassName), \" \", i]).data(\"item\", t), r;\n          }) : o.items;\n          t.html(n).attr({\n            \"aria-label\": o.title\n          }), t.on(\"click\", \"> .note-dropdown-item\", function (t) {\n            var n = e()(this),\n              i = n.data(\"item\"),\n              r = n.data(\"value\");\n            i.click ? i.click(n) : o.itemClick && o.itemClick(t, i, r);\n          }), o && o.codeviewKeepButton && t.addClass(\"note-codeview-keep\");\n        }),\n        Ye = function (t, e) {\n          return t + \" \" + lo(e.icons.caret, \"span\");\n        },\n        Ze = function (t, e) {\n          return Ve([qe({\n            className: \"dropdown-toggle\",\n            contents: t.title + \" \" + lo(\"note-icon-caret\"),\n            tooltip: t.tooltip,\n            data: {\n              toggle: \"dropdown\"\n            }\n          }), _e({\n            className: t.className,\n            items: t.items,\n            template: t.template,\n            itemClick: t.itemClick\n          })], {\n            callback: e\n          }).render();\n        },\n        Xe = function (t, e) {\n          return Ve([qe({\n            className: \"dropdown-toggle\",\n            contents: t.title + \" \" + lo(\"note-icon-caret\"),\n            tooltip: t.tooltip,\n            data: {\n              toggle: \"dropdown\"\n            }\n          }), Ge({\n            className: t.className,\n            checkClassName: t.checkClassName,\n            items: t.items,\n            template: t.template,\n            itemClick: t.itemClick\n          })], {\n            callback: e\n          }).render();\n        },\n        Qe = function (t) {\n          return Ve([qe({\n            className: \"dropdown-toggle\",\n            contents: t.title + \" \" + lo(\"note-icon-caret\"),\n            tooltip: t.tooltip,\n            data: {\n              toggle: \"dropdown\"\n            }\n          }), _e([Ve({\n            className: \"note-align\",\n            children: t.items[0]\n          }), Ve({\n            className: \"note-list\",\n            children: t.items[1]\n          })])]).render();\n        },\n        Je = function (t) {\n          return Ve([qe({\n            className: \"dropdown-toggle\",\n            contents: t.title + \" \" + lo(\"note-icon-caret\"),\n            tooltip: t.tooltip,\n            data: {\n              toggle: \"dropdown\"\n            }\n          }), _e({\n            className: \"note-table\",\n            items: ['<div class=\"note-dimension-picker\">', '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>', '<div class=\"note-dimension-picker-highlighted\"></div>', '<div class=\"note-dimension-picker-unhighlighted\"></div>', \"</div>\", '<div class=\"note-dimension-display\">1 x 1</div>'].join(\"\")\n          })], {\n            callback: function (o) {\n              o.find(\".note-dimension-picker-mousecatcher\").css({\n                width: t.col + \"em\",\n                height: t.row + \"em\"\n              }).mouseup(t.itemClick).mousemove(function (o) {\n                !function (t, o, n) {\n                  var i,\n                    r = e()(t.target.parentNode),\n                    a = r.next(),\n                    s = r.find(\".note-dimension-picker-mousecatcher\"),\n                    l = r.find(\".note-dimension-picker-highlighted\"),\n                    c = r.find(\".note-dimension-picker-unhighlighted\");\n                  if (void 0 === t.offsetX) {\n                    var u = e()(t.target).offset();\n                    i = {\n                      x: t.pageX - u.left,\n                      y: t.pageY - u.top\n                    };\n                  } else i = {\n                    x: t.offsetX,\n                    y: t.offsetY\n                  };\n                  var d = Math.ceil(i.x / 18) || 1,\n                    h = Math.ceil(i.y / 18) || 1;\n                  l.css({\n                    width: d + \"em\",\n                    height: h + \"em\"\n                  }), s.data(\"value\", d + \"x\" + h), d > 3 && d < o && c.css({\n                    width: d + 1 + \"em\"\n                  }), h > 3 && h < n && c.css({\n                    height: h + 1 + \"em\"\n                  }), a.html(d + \" x \" + h);\n                }(o, t.col, t.row);\n              });\n            }\n          }).render();\n        },\n        to = Ie('<div class=\"note-color-palette\"></div>', function (t, o) {\n          for (var n = [], i = 0, r = o.colors.length; i < r; i++) {\n            for (var a = o.eventName, s = o.colors[i], l = o.colorsName[i], c = [], u = 0, d = s.length; u < d; u++) {\n              var h = s[u],\n                f = l[u];\n              c.push(['<button type=\"button\" class=\"note-btn note-color-btn\"', 'style=\"background-color:', h, '\" ', 'data-event=\"', a, '\" ', 'data-value=\"', h, '\" ', 'data-title=\"', f, '\" ', 'aria-label=\"', f, '\" ', 'data-toggle=\"button\" tabindex=\"-1\"></button>'].join(\"\"));\n            }\n            n.push('<div class=\"note-color-row\">' + c.join(\"\") + \"</div>\");\n          }\n          t.html(n.join(\"\")), t.find(\".note-color-btn\").each(function () {\n            e()(this).data(\"_lite_tooltip\", new Re(e()(this), {\n              container: o.container\n            }));\n          });\n        }),\n        eo = function (t, o) {\n          return Ve({\n            className: \"note-color\",\n            children: [qe({\n              className: \"note-current-color-button\",\n              contents: t.title,\n              tooltip: t.lang.color.recent,\n              click: t.currentClick,\n              callback: function (t) {\n                var e = t.find(\".note-recent-color\");\n                \"foreColor\" !== o && (e.css(\"background-color\", \"#FFFF00\"), t.attr(\"data-backColor\", \"#FFFF00\"));\n              }\n            }), qe({\n              className: \"dropdown-toggle\",\n              contents: lo(\"note-icon-caret\"),\n              tooltip: t.lang.color.more,\n              data: {\n                toggle: \"dropdown\"\n              }\n            }), _e({\n              items: [\"<div>\", '<div class=\"note-btn-group btn-background-color\">', '<div class=\"note-palette-title\">' + t.lang.color.background + \"</div>\", \"<div>\", '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"backColor\" data-value=\"transparent\">', t.lang.color.transparent, \"</button>\", \"</div>\", '<div class=\"note-holder\" data-event=\"backColor\"></div>', '<div class=\"btn-sm\">', '<input type=\"color\" id=\"html5bcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">', '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"backColor\" data-value=\"cpbackColor\">', t.lang.color.cpSelect, \"</button>\", \"</div>\", \"</div>\", '<div class=\"note-btn-group btn-foreground-color\">', '<div class=\"note-palette-title\">' + t.lang.color.foreground + \"</div>\", \"<div>\", '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"removeFormat\" data-value=\"foreColor\">', t.lang.color.resetToDefault, \"</button>\", \"</div>\", '<div class=\"note-holder\" data-event=\"foreColor\"></div>', '<div class=\"btn-sm\">', '<input type=\"color\" id=\"html5fcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">', '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"foreColor\" data-value=\"cpforeColor\">', t.lang.color.cpSelect, \"</button>\", \"</div>\", \"</div>\", \"</div>\"].join(\"\"),\n              callback: function (n) {\n                n.find(\".note-holder\").each(function () {\n                  var o = e()(this);\n                  o.append(to({\n                    colors: t.colors,\n                    eventName: o.data(\"event\")\n                  }).render());\n                }), \"fore\" === o ? (n.find(\".btn-background-color\").hide(), n.css({\n                  \"min-width\": \"210px\"\n                })) : \"back\" === o && (n.find(\".btn-foreground-color\").hide(), n.css({\n                  \"min-width\": \"210px\"\n                }));\n              },\n              click: function (n) {\n                var i = e()(n.target),\n                  r = i.data(\"event\"),\n                  a = i.data(\"value\"),\n                  s = document.getElementById(\"html5fcp\").value,\n                  l = document.getElementById(\"html5bcp\").value;\n                if (\"cp\" === a ? n.stopPropagation() : \"cpbackColor\" === a ? a = l : \"cpforeColor\" === a && (a = s), r && a) {\n                  var c = \"backColor\" === r ? \"background-color\" : \"color\",\n                    u = i.closest(\".note-color\").find(\".note-recent-color\"),\n                    d = i.closest(\".note-color\").find(\".note-current-color-button\");\n                  u.css(c, a), d.attr(\"data-\" + r, a), \"fore\" === o ? t.itemClick(\"foreColor\", a) : \"back\" === o ? t.itemClick(\"backColor\", a) : t.itemClick(r, a);\n                }\n              }\n            })]\n          }).render();\n        },\n        oo = Ie('<div class=\"note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"></div>', function (t, e) {\n          e.fade && t.addClass(\"fade\"), t.attr({\n            \"aria-label\": e.title\n          }), t.html(['<div class=\"note-modal-content\">', e.title ? '<div class=\"note-modal-header\"><button type=\"button\" class=\"close\" aria-label=\"Close\" aria-hidden=\"true\"><i class=\"note-icon-close\"></i></button><h4 class=\"note-modal-title\">' + e.title + \"</h4></div>\" : \"\", '<div class=\"note-modal-body\">' + e.body + \"</div>\", e.footer ? '<div class=\"note-modal-footer\">' + e.footer + \"</div>\" : \"\", \"</div>\"].join(\"\")), t.data(\"modal\", new He(t, e));\n        }),\n        no = function (t) {\n          var e = '<div class=\"note-form-group\"><label for=\"note-dialog-video-url-' + t.id + '\" class=\"note-form-label\">' + t.lang.video.url + ' <small class=\"text-muted\">' + t.lang.video.providers + '</small></label><input id=\"note-dialog-video-url-' + t.id + '\" class=\"note-video-url note-input\" type=\"text\"/></div>',\n            o = ['<button type=\"button\" href=\"#\" class=\"note-btn note-btn-primary note-video-btn disabled\" disabled>', t.lang.video.insert, \"</button>\"].join(\"\");\n          return oo({\n            title: t.lang.video.insert,\n            fade: t.fade,\n            body: e,\n            footer: o\n          }).render();\n        },\n        io = function (t) {\n          var e = '<div class=\"note-form-group note-group-select-from-files\"><label for=\"note-dialog-image-file-' + t.id + '\" class=\"note-form-label\">' + t.lang.image.selectFromFiles + '</label><input id=\"note-dialog-image-file-' + t.id + '\" class=\"note-note-image-input note-input\" type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\"/>' + t.imageLimitation + '</div><div class=\"note-form-group\"><label for=\"note-dialog-image-url-' + t.id + '\" class=\"note-form-label\">' + t.lang.image.url + '</label><input id=\"note-dialog-image-url-' + t.id + '\" class=\"note-image-url note-input\" type=\"text\"/></div>',\n            o = ['<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-btn-large note-image-btn disabled\" disabled>', t.lang.image.insert, \"</button>\"].join(\"\");\n          return oo({\n            title: t.lang.image.insert,\n            fade: t.fade,\n            body: e,\n            footer: o\n          }).render();\n        },\n        ro = function (t) {\n          var e = '<div class=\"note-form-group\"><label for=\"note-dialog-link-txt-' + t.id + '\" class=\"note-form-label\">' + t.lang.link.textToDisplay + '</label><input id=\"note-dialog-link-txt-' + t.id + '\" class=\"note-link-text note-input\" type=\"text\"/></div><div class=\"note-form-group\"><label for=\"note-dialog-link-url-' + t.id + '\" class=\"note-form-label\">' + t.lang.link.url + '</label><input id=\"note-dialog-link-url-' + t.id + '\" class=\"note-link-url note-input\" type=\"text\" value=\"http://\"/></div>' + (t.disableLinkTarget ? \"\" : '<div class=\"checkbox\"><label for=\"note-dialog-link-nw-' + t.id + '\"><input id=\"note-dialog-link-nw-' + t.id + '\" type=\"checkbox\" checked> ' + t.lang.link.openInNewWindow + \"</label></div>\") + '<div class=\"checkbox\"><label for=\"note-dialog-link-up-' + t.id + '\"><input id=\"note-dialog-link-up-' + t.id + '\" type=\"checkbox\" checked> ' + t.lang.link.useProtocol + \"</label></div>\",\n            o = ['<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-link-btn disabled\" disabled>', t.lang.link.insert, \"</button>\"].join(\"\");\n          return oo({\n            className: \"link-dialog\",\n            title: t.lang.link.insert,\n            fade: t.fade,\n            body: e,\n            footer: o\n          }).render();\n        },\n        ao = Ie(['<div class=\"note-popover bottom\">', '<div class=\"note-popover-arrow\"></div>', '<div class=\"popover-content note-children-container\"></div>', \"</div>\"].join(\"\"), function (t, e) {\n          var o = void 0 !== e.direction ? e.direction : \"bottom\";\n          t.addClass(o).hide(), e.hideArrow && t.find(\".note-popover-arrow\").hide();\n        }),\n        so = Ie('<div class=\"checkbox\"></div>', function (t, e) {\n          t.html([\"<label\" + (e.id ? ' for=\"note-' + e.id + '\"' : \"\") + \">\", '<input role=\"checkbox\" type=\"checkbox\"' + (e.id ? ' id=\"note-' + e.id + '\"' : \"\"), e.checked ? \" checked\" : \"\", ' aria-checked=\"' + (e.checked ? \"true\" : \"false\") + '\"/>', e.text ? e.text : \"\", \"</label>\"].join(\"\"));\n        }),\n        lo = function (t, e) {\n          return t.match(/^</) ? t : \"<\" + (e = e || \"i\") + ' class=\"' + t + '\"></' + e + \">\";\n        };\n      e().summernote = e().extend(e().summernote, {\n        ui_template: function (t) {\n          return {\n            editor: Be,\n            toolbar: ze,\n            editingArea: Me,\n            codable: Oe,\n            editable: je,\n            statusbar: Ue,\n            airEditor: We,\n            airEditable: Ke,\n            buttonGroup: Ve,\n            button: qe,\n            dropdown: _e,\n            dropdownCheck: Ge,\n            dropdownButton: Ze,\n            dropdownButtonContents: Ye,\n            dropdownCheckButton: Xe,\n            paragraphDropdownButton: Qe,\n            tableDropdownButton: Je,\n            colorDropdownButton: eo,\n            palette: to,\n            dialog: oo,\n            videoDialog: no,\n            imageDialog: io,\n            linkDialog: ro,\n            popover: ao,\n            checkbox: so,\n            icon: lo,\n            options: t,\n            toggleBtn: function (t, e) {\n              t.toggleClass(\"disabled\", !e), t.attr(\"disabled\", !e);\n            },\n            toggleBtnActive: function (t, e) {\n              t.toggleClass(\"active\", e);\n            },\n            check: function (t, e) {\n              t.find(\".checked\").removeClass(\"checked\"), t.find('[data-value=\"' + e + '\"]').addClass(\"checked\");\n            },\n            onDialogShown: function (t, e) {\n              t.one(\"note.modal.show\", e);\n            },\n            onDialogHidden: function (t, e) {\n              t.one(\"note.modal.hide\", e);\n            },\n            showDialog: function (t) {\n              t.data(\"modal\").show();\n            },\n            hideDialog: function (t) {\n              t.data(\"modal\").hide();\n            },\n            getPopoverContent: function (t) {\n              return t.find(\".note-popover-content\");\n            },\n            getDialogBody: function (t) {\n              return t.find(\".note-modal-body\");\n            },\n            createLayout: function (e) {\n              var o = (t.airMode ? We([Me([Oe(), Ke()])]) : \"bottom\" === t.toolbarPosition ? Be([Me([Oe(), je()]), ze(), Ue()]) : Be([ze(), Me([Oe(), je()]), Ue()])).render();\n              return o.insertAfter(e), {\n                note: e,\n                editor: o,\n                toolbar: o.find(\".note-toolbar\"),\n                editingArea: o.find(\".note-editing-area\"),\n                editable: o.find(\".note-editable\"),\n                codable: o.find(\".note-codable\"),\n                statusbar: o.find(\".note-statusbar\")\n              };\n            },\n            removeLayout: function (t, e) {\n              t.html(e.editable.html()), e.editor.remove(), t.off(\"summernote\"), t.show();\n            }\n          };\n        },\n        interface: \"lite\"\n      });\n    })(), i;\n  })();\n});","var cocoon = function ($) {\n  var cocoon_element_counter = 0;\n  var create_new_id = function () {\n    return new Date().getTime() + cocoon_element_counter++;\n  };\n  var newcontent_braced = function (id) {\n    return '[' + id + ']$1';\n  };\n  var newcontent_underscord = function (id) {\n    return '_' + id + '_$1';\n  };\n  var getInsertionNodeElem = function (insertionNode, insertionTraversal, $this) {\n    if (!insertionNode) {\n      return $this.parent();\n    }\n    if (typeof insertionNode == 'function') {\n      if (insertionTraversal) {\n        console.warn('association-insertion-traversal is ignored, because association-insertion-node is given as a function.');\n      }\n      return insertionNode($this);\n    }\n    if (typeof insertionNode == 'string') {\n      if (insertionTraversal) {\n        return $this[insertionTraversal](insertionNode);\n      } else {\n        return insertionNode == \"this\" ? $this : $(insertionNode);\n      }\n    }\n  };\n  $(document).on('click', '.add_fields', function (e) {\n    e.preventDefault();\n    var $this = $(this),\n      assoc = $this.data('association'),\n      assocs = $this.data('associations'),\n      content = $this.data('association-insertion-template'),\n      insertionMethod = $this.data('association-insertion-method') || $this.data('association-insertion-position') || 'before',\n      insertionNode = $this.data('association-insertion-node'),\n      insertionTraversal = $this.data('association-insertion-traversal'),\n      count = parseInt($this.data('count'), 10),\n      regexp_braced = new RegExp('\\\\[new_' + assoc + '\\\\](.*?\\\\s)', 'g'),\n      regexp_underscord = new RegExp('_new_' + assoc + '_(\\\\w*)', 'g'),\n      new_id = create_new_id(),\n      new_content = content.replace(regexp_braced, newcontent_braced(new_id)),\n      new_contents = [];\n    if (new_content == content) {\n      regexp_braced = new RegExp('\\\\[new_' + assocs + '\\\\](.*?\\\\s)', 'g');\n      regexp_underscord = new RegExp('_new_' + assocs + '_(\\\\w*)', 'g');\n      new_content = content.replace(regexp_braced, newcontent_braced(new_id));\n    }\n    new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));\n    new_contents = [new_content];\n    count = isNaN(count) ? 1 : Math.max(count, 1);\n    count -= 1;\n    while (count) {\n      new_id = create_new_id();\n      new_content = content.replace(regexp_braced, newcontent_braced(new_id));\n      new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));\n      new_contents.push(new_content);\n      count -= 1;\n    }\n    var insertionNodeElem = getInsertionNodeElem(insertionNode, insertionTraversal, $this);\n    if (!insertionNodeElem || insertionNodeElem.length == 0) {\n      console.warn(\"Couldn't find the element to insert the template. Make sure your `data-association-insertion-*` on `link_to_add_association` is correct.\");\n    }\n    $.each(new_contents, function (i, node) {\n      var contentNode = $(node);\n      var before_insert = $.Event('cocoon:before-insert');\n      insertionNodeElem.trigger(before_insert, [contentNode]);\n      if (!before_insert.isDefaultPrevented()) {\n        // allow any of the jquery dom manipulation methods (after, before, append, prepend, etc)\n        // to be called on the node.  allows the insertion node to be the parent of the inserted\n        // code and doesn't force it to be a sibling like after/before does. default: 'before'\n        var addedContent = insertionNodeElem[insertionMethod](contentNode);\n        insertionNodeElem.trigger('cocoon:after-insert', [contentNode]);\n      }\n    });\n  });\n  $(document).on('click', '.remove_fields.dynamic, .remove_fields.existing', function (e) {\n    var $this = $(this),\n      wrapper_class = $this.data('wrapper-class') || 'nested-fields',\n      node_to_delete = $this.closest('.' + wrapper_class),\n      trigger_node = node_to_delete.parent();\n    e.preventDefault();\n    var before_remove = $.Event('cocoon:before-remove');\n    trigger_node.trigger(before_remove, [node_to_delete]);\n    if (!before_remove.isDefaultPrevented()) {\n      var timeout = trigger_node.data('remove-timeout') || 0;\n      setTimeout(function () {\n        if ($this.hasClass('dynamic')) {\n          node_to_delete.remove();\n        } else {\n          $this.prev(\"input[type=hidden]\").val(\"1\");\n          node_to_delete.hide();\n        }\n        trigger_node.trigger('cocoon:after-remove', [node_to_delete]);\n      }, timeout);\n    }\n  });\n  $(document).on(\"ready page:load turbolinks:load\", function () {\n    $('.remove_fields.existing.destroyed').each(function (i, obj) {\n      var $this = $(this),\n        wrapper_class = $this.data('wrapper-class') || 'nested-fields';\n      $this.closest('.' + wrapper_class).hide();\n    });\n  });\n}(require(\"jquery\"));\nmodule.exports = {\n  cocoon: cocoon\n};","/* flatpickr v4.6.6, @license MIT */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.flatpickr = factory());\n})(this, function () {\n  'use strict';\n\n  /*! *****************************************************************************\r\n  Copyright (c) Microsoft Corporation.\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n  purpose with or without fee is hereby granted.\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n  AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n  PERFORMANCE OF THIS SOFTWARE.\r\n  ***************************************************************************** */\n  var __assign = function () {\n    __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n    };\n    return __assign.apply(this, arguments);\n  };\n  function __spreadArrays() {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n    return r;\n  }\n  var HOOKS = [\"onChange\", \"onClose\", \"onDayCreate\", \"onDestroy\", \"onKeyDown\", \"onMonthChange\", \"onOpen\", \"onParseConfig\", \"onReady\", \"onValueUpdate\", \"onYearChange\", \"onPreCalendarPosition\"];\n  var defaults = {\n    _disable: [],\n    _enable: [],\n    allowInput: false,\n    allowInvalidPreload: false,\n    altFormat: \"F j, Y\",\n    altInput: false,\n    altInputClass: \"form-control input\",\n    animate: typeof window === \"object\" && window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n    ariaDateFormat: \"F j, Y\",\n    autoFillDefaultTime: true,\n    clickOpens: true,\n    closeOnSelect: true,\n    conjunction: \", \",\n    dateFormat: \"Y-m-d\",\n    defaultHour: 12,\n    defaultMinute: 0,\n    defaultSeconds: 0,\n    disable: [],\n    disableMobile: false,\n    enable: [],\n    enableSeconds: false,\n    enableTime: false,\n    errorHandler: function (err) {\n      return typeof console !== \"undefined\" && console.warn(err);\n    },\n    getWeek: function (givenDate) {\n      var date = new Date(givenDate.getTime());\n      date.setHours(0, 0, 0, 0);\n      // Thursday in current week decides the year.\n      date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n      // January 4 is always in week 1.\n      var week1 = new Date(date.getFullYear(), 0, 4);\n      // Adjust to Thursday in week 1 and count number of weeks from date to week1.\n      return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n    },\n    hourIncrement: 1,\n    ignoredFocusElements: [],\n    inline: false,\n    locale: \"default\",\n    minuteIncrement: 5,\n    mode: \"single\",\n    monthSelectorType: \"dropdown\",\n    nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n    noCalendar: false,\n    now: new Date(),\n    onChange: [],\n    onClose: [],\n    onDayCreate: [],\n    onDestroy: [],\n    onKeyDown: [],\n    onMonthChange: [],\n    onOpen: [],\n    onParseConfig: [],\n    onReady: [],\n    onValueUpdate: [],\n    onYearChange: [],\n    onPreCalendarPosition: [],\n    plugins: [],\n    position: \"auto\",\n    positionElement: undefined,\n    prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n    shorthandCurrentMonth: false,\n    showMonths: 1,\n    static: false,\n    time_24hr: false,\n    weekNumbers: false,\n    wrap: false\n  };\n  var english = {\n    weekdays: {\n      shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n      longhand: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n    },\n    months: {\n      shorthand: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n      longhand: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n    },\n    daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    firstDayOfWeek: 0,\n    ordinal: function (nth) {\n      var s = nth % 100;\n      if (s > 3 && s < 21) return \"th\";\n      switch (s % 10) {\n        case 1:\n          return \"st\";\n        case 2:\n          return \"nd\";\n        case 3:\n          return \"rd\";\n        default:\n          return \"th\";\n      }\n    },\n    rangeSeparator: \" to \",\n    weekAbbreviation: \"Wk\",\n    scrollTitle: \"Scroll to increment\",\n    toggleTitle: \"Click to toggle\",\n    amPM: [\"AM\", \"PM\"],\n    yearAriaLabel: \"Year\",\n    monthAriaLabel: \"Month\",\n    hourAriaLabel: \"Hour\",\n    minuteAriaLabel: \"Minute\",\n    time_24hr: false\n  };\n  var pad = function (number, length) {\n    if (length === void 0) {\n      length = 2;\n    }\n    return (\"000\" + number).slice(length * -1);\n  };\n  var int = function (bool) {\n    return bool === true ? 1 : 0;\n  };\n  /* istanbul ignore next */\n  function debounce(func, wait, immediate) {\n    if (immediate === void 0) {\n      immediate = false;\n    }\n    var timeout;\n    return function () {\n      var context = this,\n        args = arguments;\n      timeout !== null && clearTimeout(timeout);\n      timeout = window.setTimeout(function () {\n        timeout = null;\n        if (!immediate) func.apply(context, args);\n      }, wait);\n      if (immediate && !timeout) func.apply(context, args);\n    };\n  }\n  var arrayify = function (obj) {\n    return obj instanceof Array ? obj : [obj];\n  };\n  function toggleClass(elem, className, bool) {\n    if (bool === true) return elem.classList.add(className);\n    elem.classList.remove(className);\n  }\n  function createElement(tag, className, content) {\n    var e = window.document.createElement(tag);\n    className = className || \"\";\n    content = content || \"\";\n    e.className = className;\n    if (content !== undefined) e.textContent = content;\n    return e;\n  }\n  function clearNode(node) {\n    while (node.firstChild) node.removeChild(node.firstChild);\n  }\n  function findParent(node, condition) {\n    if (condition(node)) return node;else if (node.parentNode) return findParent(node.parentNode, condition);\n    return undefined; // nothing found\n  }\n\n  function createNumberInput(inputClassName, opts) {\n    var wrapper = createElement(\"div\", \"numInputWrapper\"),\n      numInput = createElement(\"input\", \"numInput \" + inputClassName),\n      arrowUp = createElement(\"span\", \"arrowUp\"),\n      arrowDown = createElement(\"span\", \"arrowDown\");\n    if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n      numInput.type = \"number\";\n    } else {\n      numInput.type = \"text\";\n      numInput.pattern = \"\\\\d*\";\n    }\n    if (opts !== undefined) for (var key in opts) numInput.setAttribute(key, opts[key]);\n    wrapper.appendChild(numInput);\n    wrapper.appendChild(arrowUp);\n    wrapper.appendChild(arrowDown);\n    return wrapper;\n  }\n  function getEventTarget(event) {\n    try {\n      if (typeof event.composedPath === \"function\") {\n        var path = event.composedPath();\n        return path[0];\n      }\n      return event.target;\n    } catch (error) {\n      return event.target;\n    }\n  }\n  var doNothing = function () {\n    return undefined;\n  };\n  var monthToStr = function (monthNumber, shorthand, locale) {\n    return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\n  };\n  var revFormat = {\n    D: doNothing,\n    F: function (dateObj, monthName, locale) {\n      dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n    },\n    G: function (dateObj, hour) {\n      dateObj.setHours(parseFloat(hour));\n    },\n    H: function (dateObj, hour) {\n      dateObj.setHours(parseFloat(hour));\n    },\n    J: function (dateObj, day) {\n      dateObj.setDate(parseFloat(day));\n    },\n    K: function (dateObj, amPM, locale) {\n      dateObj.setHours(dateObj.getHours() % 12 + 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n    },\n    M: function (dateObj, shortMonth, locale) {\n      dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n    },\n    S: function (dateObj, seconds) {\n      dateObj.setSeconds(parseFloat(seconds));\n    },\n    U: function (_, unixSeconds) {\n      return new Date(parseFloat(unixSeconds) * 1000);\n    },\n    W: function (dateObj, weekNum, locale) {\n      var weekNumber = parseInt(weekNum);\n      var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n      date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n      return date;\n    },\n    Y: function (dateObj, year) {\n      dateObj.setFullYear(parseFloat(year));\n    },\n    Z: function (_, ISODate) {\n      return new Date(ISODate);\n    },\n    d: function (dateObj, day) {\n      dateObj.setDate(parseFloat(day));\n    },\n    h: function (dateObj, hour) {\n      dateObj.setHours(parseFloat(hour));\n    },\n    i: function (dateObj, minutes) {\n      dateObj.setMinutes(parseFloat(minutes));\n    },\n    j: function (dateObj, day) {\n      dateObj.setDate(parseFloat(day));\n    },\n    l: doNothing,\n    m: function (dateObj, month) {\n      dateObj.setMonth(parseFloat(month) - 1);\n    },\n    n: function (dateObj, month) {\n      dateObj.setMonth(parseFloat(month) - 1);\n    },\n    s: function (dateObj, seconds) {\n      dateObj.setSeconds(parseFloat(seconds));\n    },\n    u: function (_, unixMillSeconds) {\n      return new Date(parseFloat(unixMillSeconds));\n    },\n    w: doNothing,\n    y: function (dateObj, year) {\n      dateObj.setFullYear(2000 + parseFloat(year));\n    }\n  };\n  var tokenRegex = {\n    D: \"(\\\\w+)\",\n    F: \"(\\\\w+)\",\n    G: \"(\\\\d\\\\d|\\\\d)\",\n    H: \"(\\\\d\\\\d|\\\\d)\",\n    J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n    K: \"\",\n    M: \"(\\\\w+)\",\n    S: \"(\\\\d\\\\d|\\\\d)\",\n    U: \"(.+)\",\n    W: \"(\\\\d\\\\d|\\\\d)\",\n    Y: \"(\\\\d{4})\",\n    Z: \"(.+)\",\n    d: \"(\\\\d\\\\d|\\\\d)\",\n    h: \"(\\\\d\\\\d|\\\\d)\",\n    i: \"(\\\\d\\\\d|\\\\d)\",\n    j: \"(\\\\d\\\\d|\\\\d)\",\n    l: \"(\\\\w+)\",\n    m: \"(\\\\d\\\\d|\\\\d)\",\n    n: \"(\\\\d\\\\d|\\\\d)\",\n    s: \"(\\\\d\\\\d|\\\\d)\",\n    u: \"(.+)\",\n    w: \"(\\\\d\\\\d|\\\\d)\",\n    y: \"(\\\\d{2})\"\n  };\n  var formats = {\n    // get the date in UTC\n    Z: function (date) {\n      return date.toISOString();\n    },\n    // weekday name, short, e.g. Thu\n    D: function (date, locale, options) {\n      return locale.weekdays.shorthand[formats.w(date, locale, options)];\n    },\n    // full month name e.g. January\n    F: function (date, locale, options) {\n      return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n    },\n    // padded hour 1-12\n    G: function (date, locale, options) {\n      return pad(formats.h(date, locale, options));\n    },\n    // hours with leading zero e.g. 03\n    H: function (date) {\n      return pad(date.getHours());\n    },\n    // day (1-30) with ordinal suffix e.g. 1st, 2nd\n    J: function (date, locale) {\n      return locale.ordinal !== undefined ? date.getDate() + locale.ordinal(date.getDate()) : date.getDate();\n    },\n    // AM/PM\n    K: function (date, locale) {\n      return locale.amPM[int(date.getHours() > 11)];\n    },\n    // shorthand month e.g. Jan, Sep, Oct, etc\n    M: function (date, locale) {\n      return monthToStr(date.getMonth(), true, locale);\n    },\n    // seconds 00-59\n    S: function (date) {\n      return pad(date.getSeconds());\n    },\n    // unix timestamp\n    U: function (date) {\n      return date.getTime() / 1000;\n    },\n    W: function (date, _, options) {\n      return options.getWeek(date);\n    },\n    // full year e.g. 2016, padded (0001-9999)\n    Y: function (date) {\n      return pad(date.getFullYear(), 4);\n    },\n    // day in month, padded (01-30)\n    d: function (date) {\n      return pad(date.getDate());\n    },\n    // hour from 1-12 (am/pm)\n    h: function (date) {\n      return date.getHours() % 12 ? date.getHours() % 12 : 12;\n    },\n    // minutes, padded with leading zero e.g. 09\n    i: function (date) {\n      return pad(date.getMinutes());\n    },\n    // day in month (1-30)\n    j: function (date) {\n      return date.getDate();\n    },\n    // weekday name, full, e.g. Thursday\n    l: function (date, locale) {\n      return locale.weekdays.longhand[date.getDay()];\n    },\n    // padded month number (01-12)\n    m: function (date) {\n      return pad(date.getMonth() + 1);\n    },\n    // the month number (1-12)\n    n: function (date) {\n      return date.getMonth() + 1;\n    },\n    // seconds 0-59\n    s: function (date) {\n      return date.getSeconds();\n    },\n    // Unix Milliseconds\n    u: function (date) {\n      return date.getTime();\n    },\n    // number of the day of the week\n    w: function (date) {\n      return date.getDay();\n    },\n    // last two digits of year e.g. 16 for 2016\n    y: function (date) {\n      return String(date.getFullYear()).substring(2);\n    }\n  };\n  var createDateFormatter = function (_a) {\n    var _b = _a.config,\n      config = _b === void 0 ? defaults : _b,\n      _c = _a.l10n,\n      l10n = _c === void 0 ? english : _c,\n      _d = _a.isMobile,\n      isMobile = _d === void 0 ? false : _d;\n    return function (dateObj, frmt, overrideLocale) {\n      var locale = overrideLocale || l10n;\n      if (config.formatDate !== undefined && !isMobile) {\n        return config.formatDate(dateObj, frmt, locale);\n      }\n      return frmt.split(\"\").map(function (c, i, arr) {\n        return formats[c] && arr[i - 1] !== \"\\\\\" ? formats[c](dateObj, locale, config) : c !== \"\\\\\" ? c : \"\";\n      }).join(\"\");\n    };\n  };\n  var createDateParser = function (_a) {\n    var _b = _a.config,\n      config = _b === void 0 ? defaults : _b,\n      _c = _a.l10n,\n      l10n = _c === void 0 ? english : _c;\n    return function (date, givenFormat, timeless, customLocale) {\n      if (date !== 0 && !date) return undefined;\n      var locale = customLocale || l10n;\n      var parsedDate;\n      var dateOrig = date;\n      if (date instanceof Date) parsedDate = new Date(date.getTime());else if (typeof date !== \"string\" && date.toFixed !== undefined // timestamp\n      )\n        // create a copy\n        parsedDate = new Date(date);else if (typeof date === \"string\") {\n        // date string\n        var format = givenFormat || (config || defaults).dateFormat;\n        var datestr = String(date).trim();\n        if (datestr === \"today\") {\n          parsedDate = new Date();\n          timeless = true;\n        } else if (/Z$/.test(datestr) || /GMT$/.test(datestr) // datestrings w/ timezone\n        ) parsedDate = new Date(date);else if (config && config.parseDate) parsedDate = config.parseDate(date, format);else {\n          parsedDate = !config || !config.noCalendar ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0) : new Date(new Date().setHours(0, 0, 0, 0));\n          var matched = void 0,\n            ops = [];\n          for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n            var token_1 = format[i];\n            var isBackSlash = token_1 === \"\\\\\";\n            var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n            if (tokenRegex[token_1] && !escaped) {\n              regexStr += tokenRegex[token_1];\n              var match = new RegExp(regexStr).exec(date);\n              if (match && (matched = true)) {\n                ops[token_1 !== \"Y\" ? \"push\" : \"unshift\"]({\n                  fn: revFormat[token_1],\n                  val: match[++matchIndex]\n                });\n              }\n            } else if (!isBackSlash) regexStr += \".\"; // don't really care\n            ops.forEach(function (_a) {\n              var fn = _a.fn,\n                val = _a.val;\n              return parsedDate = fn(parsedDate, val, locale) || parsedDate;\n            });\n          }\n          parsedDate = matched ? parsedDate : undefined;\n        }\n      }\n      /* istanbul ignore next */\n      if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n        config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n        return undefined;\n      }\n      if (timeless === true) parsedDate.setHours(0, 0, 0, 0);\n      return parsedDate;\n    };\n  };\n  /**\n   * Compute the difference in dates, measured in ms\n   */\n  function compareDates(date1, date2, timeless) {\n    if (timeless === void 0) {\n      timeless = true;\n    }\n    if (timeless !== false) {\n      return new Date(date1.getTime()).setHours(0, 0, 0, 0) - new Date(date2.getTime()).setHours(0, 0, 0, 0);\n    }\n    return date1.getTime() - date2.getTime();\n  }\n  var isBetween = function (ts, ts1, ts2) {\n    return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n  };\n  var duration = {\n    DAY: 86400000\n  };\n  if (typeof Object.assign !== \"function\") {\n    Object.assign = function (target) {\n      var args = [];\n      for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n      }\n      if (!target) {\n        throw TypeError(\"Cannot convert undefined or null to object\");\n      }\n      var _loop_1 = function (source) {\n        if (source) {\n          Object.keys(source).forEach(function (key) {\n            return target[key] = source[key];\n          });\n        }\n      };\n      for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n        var source = args_1[_a];\n        _loop_1(source);\n      }\n      return target;\n    };\n  }\n  var DEBOUNCED_CHANGE_MS = 300;\n  function FlatpickrInstance(element, instanceConfig) {\n    var self = {\n      config: __assign(__assign({}, defaults), flatpickr.defaultConfig),\n      l10n: english\n    };\n    self.parseDate = createDateParser({\n      config: self.config,\n      l10n: self.l10n\n    });\n    self._handlers = [];\n    self.pluginElements = [];\n    self.loadedPlugins = [];\n    self._bind = bind;\n    self._setHoursFromDate = setHoursFromDate;\n    self._positionCalendar = positionCalendar;\n    self.changeMonth = changeMonth;\n    self.changeYear = changeYear;\n    self.clear = clear;\n    self.close = close;\n    self._createElement = createElement;\n    self.destroy = destroy;\n    self.isEnabled = isEnabled;\n    self.jumpToDate = jumpToDate;\n    self.open = open;\n    self.redraw = redraw;\n    self.set = set;\n    self.setDate = setDate;\n    self.toggle = toggle;\n    function setupHelperFunctions() {\n      self.utils = {\n        getDaysInMonth: function (month, yr) {\n          if (month === void 0) {\n            month = self.currentMonth;\n          }\n          if (yr === void 0) {\n            yr = self.currentYear;\n          }\n          if (month === 1 && (yr % 4 === 0 && yr % 100 !== 0 || yr % 400 === 0)) return 29;\n          return self.l10n.daysInMonth[month];\n        }\n      };\n    }\n    function init() {\n      self.element = self.input = element;\n      self.isOpen = false;\n      parseConfig();\n      setupLocale();\n      setupInputs();\n      setupDates();\n      setupHelperFunctions();\n      if (!self.isMobile) build();\n      bindEvents();\n      if (self.selectedDates.length || self.config.noCalendar) {\n        if (self.config.enableTime) {\n          setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj || self.config.minDate : undefined);\n        }\n        updateValue(false);\n      }\n      setCalendarWidth();\n      var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n      /* TODO: investigate this further\n                 Currently, there is weird positioning behavior in safari causing pages\n        to scroll up. https://github.com/chmln/flatpickr/issues/563\n                 However, most browsers are not Safari and positioning is expensive when used\n        in scale. https://github.com/chmln/flatpickr/issues/1096\n      */\n      if (!self.isMobile && isSafari) {\n        positionCalendar();\n      }\n      triggerEvent(\"onReady\");\n    }\n    function bindToInstance(fn) {\n      return fn.bind(self);\n    }\n    function setCalendarWidth() {\n      var config = self.config;\n      if (config.weekNumbers === false && config.showMonths === 1) {\n        return;\n      } else if (config.noCalendar !== true) {\n        window.requestAnimationFrame(function () {\n          if (self.calendarContainer !== undefined) {\n            self.calendarContainer.style.visibility = \"hidden\";\n            self.calendarContainer.style.display = \"block\";\n          }\n          if (self.daysContainer !== undefined) {\n            var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n            self.daysContainer.style.width = daysWidth + \"px\";\n            self.calendarContainer.style.width = daysWidth + (self.weekWrapper !== undefined ? self.weekWrapper.offsetWidth : 0) + \"px\";\n            self.calendarContainer.style.removeProperty(\"visibility\");\n            self.calendarContainer.style.removeProperty(\"display\");\n          }\n        });\n      }\n    }\n    /**\n     * The handler for all events targeting the time inputs\n     */\n    function updateTime(e) {\n      if (self.selectedDates.length === 0) {\n        var defaultDate = self.config.minDate !== undefined ? new Date(self.config.minDate.getTime()) : new Date();\n        var _a = getDefaultHours(),\n          hours = _a.hours,\n          minutes = _a.minutes,\n          seconds = _a.seconds;\n        defaultDate.setHours(hours, minutes, seconds, 0);\n        self.setDate(defaultDate, false);\n      }\n      if (e !== undefined && e.type !== \"blur\") {\n        timeWrapper(e);\n      }\n      var prevValue = self._input.value;\n      setHoursFromInputs();\n      updateValue();\n      if (self._input.value !== prevValue) {\n        self._debouncedChange();\n      }\n    }\n    function ampm2military(hour, amPM) {\n      return hour % 12 + 12 * int(amPM === self.l10n.amPM[1]);\n    }\n    function military2ampm(hour) {\n      switch (hour % 24) {\n        case 0:\n        case 12:\n          return 12;\n        default:\n          return hour % 12;\n      }\n    }\n    /**\n     * Syncs the selected date object time with user's time input\n     */\n    function setHoursFromInputs() {\n      if (self.hourElement === undefined || self.minuteElement === undefined) return;\n      var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24,\n        minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60,\n        seconds = self.secondElement !== undefined ? (parseInt(self.secondElement.value, 10) || 0) % 60 : 0;\n      if (self.amPM !== undefined) {\n        hours = ampm2military(hours, self.amPM.textContent);\n      }\n      var limitMinHours = self.config.minTime !== undefined || self.config.minDate && self.minDateHasTime && self.latestSelectedDateObj && compareDates(self.latestSelectedDateObj, self.config.minDate, true) === 0;\n      var limitMaxHours = self.config.maxTime !== undefined || self.config.maxDate && self.maxDateHasTime && self.latestSelectedDateObj && compareDates(self.latestSelectedDateObj, self.config.maxDate, true) === 0;\n      if (limitMaxHours) {\n        var maxTime = self.config.maxTime !== undefined ? self.config.maxTime : self.config.maxDate;\n        hours = Math.min(hours, maxTime.getHours());\n        if (hours === maxTime.getHours()) minutes = Math.min(minutes, maxTime.getMinutes());\n        if (minutes === maxTime.getMinutes()) seconds = Math.min(seconds, maxTime.getSeconds());\n      }\n      if (limitMinHours) {\n        var minTime = self.config.minTime !== undefined ? self.config.minTime : self.config.minDate;\n        hours = Math.max(hours, minTime.getHours());\n        if (hours === minTime.getHours()) minutes = Math.max(minutes, minTime.getMinutes());\n        if (minutes === minTime.getMinutes()) seconds = Math.max(seconds, minTime.getSeconds());\n      }\n      setHours(hours, minutes, seconds);\n    }\n    /**\n     * Syncs time input values with a date\n     */\n    function setHoursFromDate(dateObj) {\n      var date = dateObj || self.latestSelectedDateObj;\n      if (date) {\n        setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n      }\n    }\n    function getDefaultHours() {\n      var hours = self.config.defaultHour;\n      var minutes = self.config.defaultMinute;\n      var seconds = self.config.defaultSeconds;\n      if (self.config.minDate !== undefined) {\n        var minHr = self.config.minDate.getHours();\n        var minMinutes = self.config.minDate.getMinutes();\n        hours = Math.max(hours, minHr);\n        if (hours === minHr) minutes = Math.max(minMinutes, minutes);\n        if (hours === minHr && minutes === minMinutes) seconds = self.config.minDate.getSeconds();\n      }\n      if (self.config.maxDate !== undefined) {\n        var maxHr = self.config.maxDate.getHours();\n        var maxMinutes = self.config.maxDate.getMinutes();\n        hours = Math.min(hours, maxHr);\n        if (hours === maxHr) minutes = Math.min(maxMinutes, minutes);\n        if (hours === maxHr && minutes === maxMinutes) seconds = self.config.maxDate.getSeconds();\n      }\n      return {\n        hours: hours,\n        minutes: minutes,\n        seconds: seconds\n      };\n    }\n    /**\n     * Sets the hours, minutes, and optionally seconds\n     * of the latest selected date object and the\n     * corresponding time inputs\n     * @param {Number} hours the hour. whether its military\n     *                 or am-pm gets inferred from config\n     * @param {Number} minutes the minutes\n     * @param {Number} seconds the seconds (optional)\n     */\n    function setHours(hours, minutes, seconds) {\n      if (self.latestSelectedDateObj !== undefined) {\n        self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n      }\n      if (!self.hourElement || !self.minuteElement || self.isMobile) return;\n      self.hourElement.value = pad(!self.config.time_24hr ? (12 + hours) % 12 + 12 * int(hours % 12 === 0) : hours);\n      self.minuteElement.value = pad(minutes);\n      if (self.amPM !== undefined) self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n      if (self.secondElement !== undefined) self.secondElement.value = pad(seconds);\n    }\n    /**\n     * Handles the year input and incrementing events\n     * @param {Event} event the keyup or increment event\n     */\n    function onYearInput(event) {\n      var eventTarget = getEventTarget(event);\n      var year = parseInt(eventTarget.value) + (event.delta || 0);\n      if (year / 1000 > 1 || event.key === \"Enter\" && !/[^\\d]/.test(year.toString())) {\n        changeYear(year);\n      }\n    }\n    /**\n     * Essentially addEventListener + tracking\n     * @param {Element} element the element to addEventListener to\n     * @param {String} event the event name\n     * @param {Function} handler the event handler\n     */\n    function bind(element, event, handler, options) {\n      if (event instanceof Array) return event.forEach(function (ev) {\n        return bind(element, ev, handler, options);\n      });\n      if (element instanceof Array) return element.forEach(function (el) {\n        return bind(el, event, handler, options);\n      });\n      element.addEventListener(event, handler, options);\n      self._handlers.push({\n        element: element,\n        event: event,\n        handler: handler,\n        options: options\n      });\n    }\n    function triggerChange() {\n      triggerEvent(\"onChange\");\n    }\n    /**\n     * Adds all the necessary event listeners\n     */\n    function bindEvents() {\n      if (self.config.wrap) {\n        [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n          Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n            return bind(el, \"click\", self[evt]);\n          });\n        });\n      }\n      if (self.isMobile) {\n        setupMobile();\n        return;\n      }\n      var debouncedResize = debounce(onResize, 50);\n      self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n      if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent)) bind(self.daysContainer, \"mouseover\", function (e) {\n        if (self.config.mode === \"range\") onMouseOver(getEventTarget(e));\n      });\n      bind(window.document.body, \"keydown\", onKeyDown);\n      if (!self.config.inline && !self.config.static) bind(window, \"resize\", debouncedResize);\n      if (window.ontouchstart !== undefined) bind(window.document, \"touchstart\", documentClick);else bind(window.document, \"click\", documentClick);\n      bind(window.document, \"focus\", documentClick, {\n        capture: true\n      });\n      if (self.config.clickOpens === true) {\n        bind(self._input, \"focus\", self.open);\n        bind(self._input, \"click\", self.open);\n      }\n      if (self.daysContainer !== undefined) {\n        bind(self.monthNav, \"click\", onMonthNavClick);\n        bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n        bind(self.daysContainer, \"click\", selectDate);\n      }\n      if (self.timeContainer !== undefined && self.minuteElement !== undefined && self.hourElement !== undefined) {\n        var selText = function (e) {\n          return getEventTarget(e).select();\n        };\n        bind(self.timeContainer, [\"increment\"], updateTime);\n        bind(self.timeContainer, \"blur\", updateTime, {\n          capture: true\n        });\n        bind(self.timeContainer, \"click\", timeIncrement);\n        bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n        if (self.secondElement !== undefined) bind(self.secondElement, \"focus\", function () {\n          return self.secondElement && self.secondElement.select();\n        });\n        if (self.amPM !== undefined) {\n          bind(self.amPM, \"click\", function (e) {\n            updateTime(e);\n            triggerChange();\n          });\n        }\n      }\n      if (self.config.allowInput) bind(self._input, \"blur\", onBlur);\n    }\n    /**\n     * Set the calendar view to a particular date.\n     * @param {Date} jumpDate the date to set the view to\n     * @param {boolean} triggerChange if change events should be triggered\n     */\n    function jumpToDate(jumpDate, triggerChange) {\n      var jumpTo = jumpDate !== undefined ? self.parseDate(jumpDate) : self.latestSelectedDateObj || (self.config.minDate && self.config.minDate > self.now ? self.config.minDate : self.config.maxDate && self.config.maxDate < self.now ? self.config.maxDate : self.now);\n      var oldYear = self.currentYear;\n      var oldMonth = self.currentMonth;\n      try {\n        if (jumpTo !== undefined) {\n          self.currentYear = jumpTo.getFullYear();\n          self.currentMonth = jumpTo.getMonth();\n        }\n      } catch (e) {\n        /* istanbul ignore next */\n        e.message = \"Invalid date supplied: \" + jumpTo;\n        self.config.errorHandler(e);\n      }\n      if (triggerChange && self.currentYear !== oldYear) {\n        triggerEvent(\"onYearChange\");\n        buildMonthSwitch();\n      }\n      if (triggerChange && (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n        triggerEvent(\"onMonthChange\");\n      }\n      self.redraw();\n    }\n    /**\n     * The up/down arrow handler for time inputs\n     * @param {Event} e the click event\n     */\n    function timeIncrement(e) {\n      var eventTarget = getEventTarget(e);\n      if (~eventTarget.className.indexOf(\"arrow\")) incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n    }\n    /**\n     * Increments/decrements the value of input associ-\n     * ated with the up/down arrow by dispatching an\n     * \"increment\" event on the input.\n     *\n     * @param {Event} e the click event\n     * @param {Number} delta the diff (usually 1 or -1)\n     * @param {Element} inputElem the input element\n     */\n    function incrementNumInput(e, delta, inputElem) {\n      var target = e && getEventTarget(e);\n      var input = inputElem || target && target.parentNode && target.parentNode.firstChild;\n      var event = createEvent(\"increment\");\n      event.delta = delta;\n      input && input.dispatchEvent(event);\n    }\n    function build() {\n      var fragment = window.document.createDocumentFragment();\n      self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n      self.calendarContainer.tabIndex = -1;\n      if (!self.config.noCalendar) {\n        fragment.appendChild(buildMonthNav());\n        self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n        if (self.config.weekNumbers) {\n          var _a = buildWeeks(),\n            weekWrapper = _a.weekWrapper,\n            weekNumbers = _a.weekNumbers;\n          self.innerContainer.appendChild(weekWrapper);\n          self.weekNumbers = weekNumbers;\n          self.weekWrapper = weekWrapper;\n        }\n        self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n        self.rContainer.appendChild(buildWeekdays());\n        if (!self.daysContainer) {\n          self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n          self.daysContainer.tabIndex = -1;\n        }\n        buildDays();\n        self.rContainer.appendChild(self.daysContainer);\n        self.innerContainer.appendChild(self.rContainer);\n        fragment.appendChild(self.innerContainer);\n      }\n      if (self.config.enableTime) {\n        fragment.appendChild(buildTime());\n      }\n      toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n      toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n      toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n      self.calendarContainer.appendChild(fragment);\n      var customAppend = self.config.appendTo !== undefined && self.config.appendTo.nodeType !== undefined;\n      if (self.config.inline || self.config.static) {\n        self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n        if (self.config.inline) {\n          if (!customAppend && self.element.parentNode) self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);else if (self.config.appendTo !== undefined) self.config.appendTo.appendChild(self.calendarContainer);\n        }\n        if (self.config.static) {\n          var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n          if (self.element.parentNode) self.element.parentNode.insertBefore(wrapper, self.element);\n          wrapper.appendChild(self.element);\n          if (self.altInput) wrapper.appendChild(self.altInput);\n          wrapper.appendChild(self.calendarContainer);\n        }\n      }\n      if (!self.config.static && !self.config.inline) (self.config.appendTo !== undefined ? self.config.appendTo : window.document.body).appendChild(self.calendarContainer);\n    }\n    function createDay(className, date, dayNumber, i) {\n      var dateIsEnabled = isEnabled(date, true),\n        dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n      dayElement.dateObj = date;\n      dayElement.$i = i;\n      dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n      if (className.indexOf(\"hidden\") === -1 && compareDates(date, self.now) === 0) {\n        self.todayDateElem = dayElement;\n        dayElement.classList.add(\"today\");\n        dayElement.setAttribute(\"aria-current\", \"date\");\n      }\n      if (dateIsEnabled) {\n        dayElement.tabIndex = -1;\n        if (isDateSelected(date)) {\n          dayElement.classList.add(\"selected\");\n          self.selectedDateElem = dayElement;\n          if (self.config.mode === \"range\") {\n            toggleClass(dayElement, \"startRange\", self.selectedDates[0] && compareDates(date, self.selectedDates[0], true) === 0);\n            toggleClass(dayElement, \"endRange\", self.selectedDates[1] && compareDates(date, self.selectedDates[1], true) === 0);\n            if (className === \"nextMonthDay\") dayElement.classList.add(\"inRange\");\n          }\n        }\n      } else {\n        dayElement.classList.add(\"flatpickr-disabled\");\n      }\n      if (self.config.mode === \"range\") {\n        if (isDateInRange(date) && !isDateSelected(date)) dayElement.classList.add(\"inRange\");\n      }\n      if (self.weekNumbers && self.config.showMonths === 1 && className !== \"prevMonthDay\" && dayNumber % 7 === 1) {\n        self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n      }\n      triggerEvent(\"onDayCreate\", dayElement);\n      return dayElement;\n    }\n    function focusOnDayElem(targetNode) {\n      targetNode.focus();\n      if (self.config.mode === \"range\") onMouseOver(targetNode);\n    }\n    function getFirstAvailableDay(delta) {\n      var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n      var endMonth = delta > 0 ? self.config.showMonths : -1;\n      for (var m = startMonth; m != endMonth; m += delta) {\n        var month = self.daysContainer.children[m];\n        var startIndex = delta > 0 ? 0 : month.children.length - 1;\n        var endIndex = delta > 0 ? month.children.length : -1;\n        for (var i = startIndex; i != endIndex; i += delta) {\n          var c = month.children[i];\n          if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj)) return c;\n        }\n      }\n      return undefined;\n    }\n    function getNextAvailableDay(current, delta) {\n      var givenMonth = current.className.indexOf(\"Month\") === -1 ? current.dateObj.getMonth() : self.currentMonth;\n      var endMonth = delta > 0 ? self.config.showMonths : -1;\n      var loopDelta = delta > 0 ? 1 : -1;\n      for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n        var month = self.daysContainer.children[m];\n        var startIndex = givenMonth - self.currentMonth === m ? current.$i + delta : delta < 0 ? month.children.length - 1 : 0;\n        var numMonthDays = month.children.length;\n        for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n          var c = month.children[i];\n          if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj) && Math.abs(current.$i - i) >= Math.abs(delta)) return focusOnDayElem(c);\n        }\n      }\n      self.changeMonth(loopDelta);\n      focusOnDay(getFirstAvailableDay(loopDelta), 0);\n      return undefined;\n    }\n    function focusOnDay(current, offset) {\n      var dayFocused = isInView(document.activeElement || document.body);\n      var startElem = current !== undefined ? current : dayFocused ? document.activeElement : self.selectedDateElem !== undefined && isInView(self.selectedDateElem) ? self.selectedDateElem : self.todayDateElem !== undefined && isInView(self.todayDateElem) ? self.todayDateElem : getFirstAvailableDay(offset > 0 ? 1 : -1);\n      if (startElem === undefined) {\n        self._input.focus();\n      } else if (!dayFocused) {\n        focusOnDayElem(startElem);\n      } else {\n        getNextAvailableDay(startElem, offset);\n      }\n    }\n    function buildMonthDays(year, month) {\n      var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n      var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n      var daysInMonth = self.utils.getDaysInMonth(month, year),\n        days = window.document.createDocumentFragment(),\n        isMultiMonth = self.config.showMonths > 1,\n        prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\",\n        nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n      var dayNumber = prevMonthDays + 1 - firstOfMonth,\n        dayIndex = 0;\n      // prepend days from the ending of previous month\n      for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n        days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n      }\n      // Start at 1 since there is no 0th day\n      for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n        days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n      }\n      // append days from the next month\n      for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth && (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n        days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n      }\n      //updateNavigationCurrentMonth();\n      var dayContainer = createElement(\"div\", \"dayContainer\");\n      dayContainer.appendChild(days);\n      return dayContainer;\n    }\n    function buildDays() {\n      if (self.daysContainer === undefined) {\n        return;\n      }\n      clearNode(self.daysContainer);\n      // TODO: week numbers for each month\n      if (self.weekNumbers) clearNode(self.weekNumbers);\n      var frag = document.createDocumentFragment();\n      for (var i = 0; i < self.config.showMonths; i++) {\n        var d = new Date(self.currentYear, self.currentMonth, 1);\n        d.setMonth(self.currentMonth + i);\n        frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n      }\n      self.daysContainer.appendChild(frag);\n      self.days = self.daysContainer.firstChild;\n      if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n        onMouseOver();\n      }\n    }\n    function buildMonthSwitch() {\n      if (self.config.showMonths > 1 || self.config.monthSelectorType !== \"dropdown\") return;\n      var shouldBuildMonth = function (month) {\n        if (self.config.minDate !== undefined && self.currentYear === self.config.minDate.getFullYear() && month < self.config.minDate.getMonth()) {\n          return false;\n        }\n        return !(self.config.maxDate !== undefined && self.currentYear === self.config.maxDate.getFullYear() && month > self.config.maxDate.getMonth());\n      };\n      self.monthsDropdownContainer.tabIndex = -1;\n      self.monthsDropdownContainer.innerHTML = \"\";\n      for (var i = 0; i < 12; i++) {\n        if (!shouldBuildMonth(i)) continue;\n        var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n        month.value = new Date(self.currentYear, i).getMonth().toString();\n        month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n        month.tabIndex = -1;\n        if (self.currentMonth === i) {\n          month.selected = true;\n        }\n        self.monthsDropdownContainer.appendChild(month);\n      }\n    }\n    function buildMonth() {\n      var container = createElement(\"div\", \"flatpickr-month\");\n      var monthNavFragment = window.document.createDocumentFragment();\n      var monthElement;\n      if (self.config.showMonths > 1 || self.config.monthSelectorType === \"static\") {\n        monthElement = createElement(\"span\", \"cur-month\");\n      } else {\n        self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n        self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n        bind(self.monthsDropdownContainer, \"change\", function (e) {\n          var target = getEventTarget(e);\n          var selectedMonth = parseInt(target.value, 10);\n          self.changeMonth(selectedMonth - self.currentMonth);\n          triggerEvent(\"onMonthChange\");\n        });\n        buildMonthSwitch();\n        monthElement = self.monthsDropdownContainer;\n      }\n      var yearInput = createNumberInput(\"cur-year\", {\n        tabindex: \"-1\"\n      });\n      var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n      yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n      if (self.config.minDate) {\n        yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n      }\n      if (self.config.maxDate) {\n        yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n        yearElement.disabled = !!self.config.minDate && self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n      }\n      var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n      currentMonth.appendChild(monthElement);\n      currentMonth.appendChild(yearInput);\n      monthNavFragment.appendChild(currentMonth);\n      container.appendChild(monthNavFragment);\n      return {\n        container: container,\n        yearElement: yearElement,\n        monthElement: monthElement\n      };\n    }\n    function buildMonths() {\n      clearNode(self.monthNav);\n      self.monthNav.appendChild(self.prevMonthNav);\n      if (self.config.showMonths) {\n        self.yearElements = [];\n        self.monthElements = [];\n      }\n      for (var m = self.config.showMonths; m--;) {\n        var month = buildMonth();\n        self.yearElements.push(month.yearElement);\n        self.monthElements.push(month.monthElement);\n        self.monthNav.appendChild(month.container);\n      }\n      self.monthNav.appendChild(self.nextMonthNav);\n    }\n    function buildMonthNav() {\n      self.monthNav = createElement(\"div\", \"flatpickr-months\");\n      self.yearElements = [];\n      self.monthElements = [];\n      self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n      self.prevMonthNav.innerHTML = self.config.prevArrow;\n      self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n      self.nextMonthNav.innerHTML = self.config.nextArrow;\n      buildMonths();\n      Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n        get: function () {\n          return self.__hidePrevMonthArrow;\n        },\n        set: function (bool) {\n          if (self.__hidePrevMonthArrow !== bool) {\n            toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n            self.__hidePrevMonthArrow = bool;\n          }\n        }\n      });\n      Object.defineProperty(self, \"_hideNextMonthArrow\", {\n        get: function () {\n          return self.__hideNextMonthArrow;\n        },\n        set: function (bool) {\n          if (self.__hideNextMonthArrow !== bool) {\n            toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n            self.__hideNextMonthArrow = bool;\n          }\n        }\n      });\n      self.currentYearElement = self.yearElements[0];\n      updateNavigationCurrentMonth();\n      return self.monthNav;\n    }\n    function buildTime() {\n      self.calendarContainer.classList.add(\"hasTime\");\n      if (self.config.noCalendar) self.calendarContainer.classList.add(\"noCalendar\");\n      self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n      self.timeContainer.tabIndex = -1;\n      var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n      var hourInput = createNumberInput(\"flatpickr-hour\", {\n        \"aria-label\": self.l10n.hourAriaLabel\n      });\n      self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n      var minuteInput = createNumberInput(\"flatpickr-minute\", {\n        \"aria-label\": self.l10n.minuteAriaLabel\n      });\n      self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n      self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n      self.hourElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getHours() : self.config.time_24hr ? self.config.defaultHour : military2ampm(self.config.defaultHour));\n      self.minuteElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getMinutes() : self.config.defaultMinute);\n      self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n      self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n      self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n      self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n      self.minuteElement.setAttribute(\"min\", \"0\");\n      self.minuteElement.setAttribute(\"max\", \"59\");\n      self.timeContainer.appendChild(hourInput);\n      self.timeContainer.appendChild(separator);\n      self.timeContainer.appendChild(minuteInput);\n      if (self.config.time_24hr) self.timeContainer.classList.add(\"time24hr\");\n      if (self.config.enableSeconds) {\n        self.timeContainer.classList.add(\"hasSeconds\");\n        var secondInput = createNumberInput(\"flatpickr-second\");\n        self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n        self.secondElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getSeconds() : self.config.defaultSeconds);\n        self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n        self.secondElement.setAttribute(\"min\", \"0\");\n        self.secondElement.setAttribute(\"max\", \"59\");\n        self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n        self.timeContainer.appendChild(secondInput);\n      }\n      if (!self.config.time_24hr) {\n        // add self.amPM if appropriate\n        self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj ? self.hourElement.value : self.config.defaultHour) > 11)]);\n        self.amPM.title = self.l10n.toggleTitle;\n        self.amPM.tabIndex = -1;\n        self.timeContainer.appendChild(self.amPM);\n      }\n      return self.timeContainer;\n    }\n    function buildWeekdays() {\n      if (!self.weekdayContainer) self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");else clearNode(self.weekdayContainer);\n      for (var i = self.config.showMonths; i--;) {\n        var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n        self.weekdayContainer.appendChild(container);\n      }\n      updateWeekdays();\n      return self.weekdayContainer;\n    }\n    function updateWeekdays() {\n      if (!self.weekdayContainer) {\n        return;\n      }\n      var firstDayOfWeek = self.l10n.firstDayOfWeek;\n      var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n      if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n        weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n      }\n      for (var i = self.config.showMonths; i--;) {\n        self.weekdayContainer.children[i].innerHTML = \"\\n      <span class='flatpickr-weekday'>\\n        \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n      </span>\\n      \";\n      }\n    }\n    /* istanbul ignore next */\n    function buildWeeks() {\n      self.calendarContainer.classList.add(\"hasWeeks\");\n      var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n      weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n      var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n      weekWrapper.appendChild(weekNumbers);\n      return {\n        weekWrapper: weekWrapper,\n        weekNumbers: weekNumbers\n      };\n    }\n    function changeMonth(value, isOffset) {\n      if (isOffset === void 0) {\n        isOffset = true;\n      }\n      var delta = isOffset ? value : value - self.currentMonth;\n      if (delta < 0 && self._hidePrevMonthArrow === true || delta > 0 && self._hideNextMonthArrow === true) return;\n      self.currentMonth += delta;\n      if (self.currentMonth < 0 || self.currentMonth > 11) {\n        self.currentYear += self.currentMonth > 11 ? 1 : -1;\n        self.currentMonth = (self.currentMonth + 12) % 12;\n        triggerEvent(\"onYearChange\");\n        buildMonthSwitch();\n      }\n      buildDays();\n      triggerEvent(\"onMonthChange\");\n      updateNavigationCurrentMonth();\n    }\n    function clear(triggerChangeEvent, toInitial) {\n      if (triggerChangeEvent === void 0) {\n        triggerChangeEvent = true;\n      }\n      if (toInitial === void 0) {\n        toInitial = true;\n      }\n      self.input.value = \"\";\n      if (self.altInput !== undefined) self.altInput.value = \"\";\n      if (self.mobileInput !== undefined) self.mobileInput.value = \"\";\n      self.selectedDates = [];\n      self.latestSelectedDateObj = undefined;\n      if (toInitial === true) {\n        self.currentYear = self._initialDate.getFullYear();\n        self.currentMonth = self._initialDate.getMonth();\n      }\n      if (self.config.enableTime === true) {\n        var _a = getDefaultHours(),\n          hours = _a.hours,\n          minutes = _a.minutes,\n          seconds = _a.seconds;\n        setHours(hours, minutes, seconds);\n      }\n      self.redraw();\n      if (triggerChangeEvent)\n        // triggerChangeEvent is true (default) or an Event\n        triggerEvent(\"onChange\");\n    }\n    function close() {\n      self.isOpen = false;\n      if (!self.isMobile) {\n        if (self.calendarContainer !== undefined) {\n          self.calendarContainer.classList.remove(\"open\");\n        }\n        if (self._input !== undefined) {\n          self._input.classList.remove(\"active\");\n        }\n      }\n      triggerEvent(\"onClose\");\n    }\n    function destroy() {\n      if (self.config !== undefined) triggerEvent(\"onDestroy\");\n      for (var i = self._handlers.length; i--;) {\n        var h = self._handlers[i];\n        h.element.removeEventListener(h.event, h.handler, h.options);\n      }\n      self._handlers = [];\n      if (self.mobileInput) {\n        if (self.mobileInput.parentNode) self.mobileInput.parentNode.removeChild(self.mobileInput);\n        self.mobileInput = undefined;\n      } else if (self.calendarContainer && self.calendarContainer.parentNode) {\n        if (self.config.static && self.calendarContainer.parentNode) {\n          var wrapper = self.calendarContainer.parentNode;\n          wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n          if (wrapper.parentNode) {\n            while (wrapper.firstChild) wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n            wrapper.parentNode.removeChild(wrapper);\n          }\n        } else self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n      }\n      if (self.altInput) {\n        self.input.type = \"text\";\n        if (self.altInput.parentNode) self.altInput.parentNode.removeChild(self.altInput);\n        delete self.altInput;\n      }\n      if (self.input) {\n        self.input.type = self.input._type;\n        self.input.classList.remove(\"flatpickr-input\");\n        self.input.removeAttribute(\"readonly\");\n      }\n      [\"_showTimeInput\", \"latestSelectedDateObj\", \"_hideNextMonthArrow\", \"_hidePrevMonthArrow\", \"__hideNextMonthArrow\", \"__hidePrevMonthArrow\", \"isMobile\", \"isOpen\", \"selectedDateElem\", \"minDateHasTime\", \"maxDateHasTime\", \"days\", \"daysContainer\", \"_input\", \"_positionElement\", \"innerContainer\", \"rContainer\", \"monthNav\", \"todayDateElem\", \"calendarContainer\", \"weekdayContainer\", \"prevMonthNav\", \"nextMonthNav\", \"monthsDropdownContainer\", \"currentMonthElement\", \"currentYearElement\", \"navigationCurrentMonth\", \"selectedDateElem\", \"config\"].forEach(function (k) {\n        try {\n          delete self[k];\n        } catch (_) {}\n      });\n    }\n    function isCalendarElem(elem) {\n      if (self.config.appendTo && self.config.appendTo.contains(elem)) return true;\n      return self.calendarContainer.contains(elem);\n    }\n    function documentClick(e) {\n      if (self.isOpen && !self.config.inline) {\n        var eventTarget_1 = getEventTarget(e);\n        var isCalendarElement = isCalendarElem(eventTarget_1);\n        var isInput = eventTarget_1 === self.input || eventTarget_1 === self.altInput || self.element.contains(eventTarget_1) ||\n        // web components\n        // e.path is not present in all browsers. circumventing typechecks\n        e.path && e.path.indexOf && (~e.path.indexOf(self.input) || ~e.path.indexOf(self.altInput));\n        var lostFocus = e.type === \"blur\" ? isInput && e.relatedTarget && !isCalendarElem(e.relatedTarget) : !isInput && !isCalendarElement && !isCalendarElem(e.relatedTarget);\n        var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n          return elem.contains(eventTarget_1);\n        });\n        if (lostFocus && isIgnored) {\n          if (self.timeContainer !== undefined && self.minuteElement !== undefined && self.hourElement !== undefined && self.input.value !== \"\" && self.input.value !== undefined) {\n            updateTime();\n          }\n          self.close();\n          if (self.config && self.config.mode === \"range\" && self.selectedDates.length === 1) {\n            self.clear(false);\n            self.redraw();\n          }\n        }\n      }\n    }\n    function changeYear(newYear) {\n      if (!newYear || self.config.minDate && newYear < self.config.minDate.getFullYear() || self.config.maxDate && newYear > self.config.maxDate.getFullYear()) return;\n      var newYearNum = newYear,\n        isNewYear = self.currentYear !== newYearNum;\n      self.currentYear = newYearNum || self.currentYear;\n      if (self.config.maxDate && self.currentYear === self.config.maxDate.getFullYear()) {\n        self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n      } else if (self.config.minDate && self.currentYear === self.config.minDate.getFullYear()) {\n        self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n      }\n      if (isNewYear) {\n        self.redraw();\n        triggerEvent(\"onYearChange\");\n        buildMonthSwitch();\n      }\n    }\n    function isEnabled(date, timeless) {\n      if (timeless === void 0) {\n        timeless = true;\n      }\n      var dateToCheck = self.parseDate(date, undefined, timeless); // timeless\n      if (self.config.minDate && dateToCheck && compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0 || self.config.maxDate && dateToCheck && compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0) return false;\n      if (self.config.enable.length === 0 && self.config.disable.length === 0) return true;\n      if (dateToCheck === undefined) return false;\n      var bool = self.config.enable.length > 0,\n        array = bool ? self.config.enable : self.config.disable;\n      for (var i = 0, d = void 0; i < array.length; i++) {\n        d = array[i];\n        if (typeof d === \"function\" && d(dateToCheck) // disabled by function\n        ) return bool;else if (d instanceof Date && dateToCheck !== undefined && d.getTime() === dateToCheck.getTime())\n          // disabled by date\n          return bool;else if (typeof d === \"string\" && dateToCheck !== undefined) {\n          // disabled by date string\n          var parsed = self.parseDate(d, undefined, true);\n          return parsed && parsed.getTime() === dateToCheck.getTime() ? bool : !bool;\n        } else if (\n        // disabled by range\n        typeof d === \"object\" && dateToCheck !== undefined && d.from && d.to && dateToCheck.getTime() >= d.from.getTime() && dateToCheck.getTime() <= d.to.getTime()) return bool;\n      }\n      return !bool;\n    }\n    function isInView(elem) {\n      if (self.daysContainer !== undefined) return elem.className.indexOf(\"hidden\") === -1 && elem.className.indexOf(\"flatpickr-disabled\") === -1 && self.daysContainer.contains(elem);\n      return false;\n    }\n    function onBlur(e) {\n      var isInput = e.target === self._input;\n      if (isInput && !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n        self.setDate(self._input.value, true, e.target === self.altInput ? self.config.altFormat : self.config.dateFormat);\n      }\n    }\n    function onKeyDown(e) {\n      // e.key                      e.keyCode\n      // \"Backspace\"                        8\n      // \"Tab\"                              9\n      // \"Enter\"                           13\n      // \"Escape\"     (IE \"Esc\")           27\n      // \"ArrowLeft\"  (IE \"Left\")          37\n      // \"ArrowUp\"    (IE \"Up\")            38\n      // \"ArrowRight\" (IE \"Right\")         39\n      // \"ArrowDown\"  (IE \"Down\")          40\n      // \"Delete\"     (IE \"Del\")           46\n      var eventTarget = getEventTarget(e);\n      var isInput = self.config.wrap ? element.contains(eventTarget) : eventTarget === self._input;\n      var allowInput = self.config.allowInput;\n      var allowKeydown = self.isOpen && (!allowInput || !isInput);\n      var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n      if (e.keyCode === 13 && isInput) {\n        if (allowInput) {\n          self.setDate(self._input.value, true, eventTarget === self.altInput ? self.config.altFormat : self.config.dateFormat);\n          return eventTarget.blur();\n        } else {\n          self.open();\n        }\n      } else if (isCalendarElem(eventTarget) || allowKeydown || allowInlineKeydown) {\n        var isTimeObj = !!self.timeContainer && self.timeContainer.contains(eventTarget);\n        switch (e.keyCode) {\n          case 13:\n            if (isTimeObj) {\n              e.preventDefault();\n              updateTime();\n              focusAndClose();\n            } else selectDate(e);\n            break;\n          case 27:\n            // escape\n            e.preventDefault();\n            focusAndClose();\n            break;\n          case 8:\n          case 46:\n            if (isInput && !self.config.allowInput) {\n              e.preventDefault();\n              self.clear();\n            }\n            break;\n          case 37:\n          case 39:\n            if (!isTimeObj && !isInput) {\n              e.preventDefault();\n              if (self.daysContainer !== undefined && (allowInput === false || document.activeElement && isInView(document.activeElement))) {\n                var delta_1 = e.keyCode === 39 ? 1 : -1;\n                if (!e.ctrlKey) focusOnDay(undefined, delta_1);else {\n                  e.stopPropagation();\n                  changeMonth(delta_1);\n                  focusOnDay(getFirstAvailableDay(1), 0);\n                }\n              }\n            } else if (self.hourElement) self.hourElement.focus();\n            break;\n          case 38:\n          case 40:\n            e.preventDefault();\n            var delta = e.keyCode === 40 ? 1 : -1;\n            if (self.daysContainer && eventTarget.$i !== undefined || eventTarget === self.input || eventTarget === self.altInput) {\n              if (e.ctrlKey) {\n                e.stopPropagation();\n                changeYear(self.currentYear - delta);\n                focusOnDay(getFirstAvailableDay(1), 0);\n              } else if (!isTimeObj) focusOnDay(undefined, delta * 7);\n            } else if (eventTarget === self.currentYearElement) {\n              changeYear(self.currentYear - delta);\n            } else if (self.config.enableTime) {\n              if (!isTimeObj && self.hourElement) self.hourElement.focus();\n              updateTime(e);\n              self._debouncedChange();\n            }\n            break;\n          case 9:\n            if (isTimeObj) {\n              var elems = [self.hourElement, self.minuteElement, self.secondElement, self.amPM].concat(self.pluginElements).filter(function (x) {\n                return x;\n              });\n              var i = elems.indexOf(eventTarget);\n              if (i !== -1) {\n                var target = elems[i + (e.shiftKey ? -1 : 1)];\n                e.preventDefault();\n                (target || self._input).focus();\n              }\n            } else if (!self.config.noCalendar && self.daysContainer && self.daysContainer.contains(eventTarget) && e.shiftKey) {\n              e.preventDefault();\n              self._input.focus();\n            }\n            break;\n        }\n      }\n      if (self.amPM !== undefined && eventTarget === self.amPM) {\n        switch (e.key) {\n          case self.l10n.amPM[0].charAt(0):\n          case self.l10n.amPM[0].charAt(0).toLowerCase():\n            self.amPM.textContent = self.l10n.amPM[0];\n            setHoursFromInputs();\n            updateValue();\n            break;\n          case self.l10n.amPM[1].charAt(0):\n          case self.l10n.amPM[1].charAt(0).toLowerCase():\n            self.amPM.textContent = self.l10n.amPM[1];\n            setHoursFromInputs();\n            updateValue();\n            break;\n        }\n      }\n      if (isInput || isCalendarElem(eventTarget)) {\n        triggerEvent(\"onKeyDown\", e);\n      }\n    }\n    function onMouseOver(elem) {\n      if (self.selectedDates.length !== 1 || elem && (!elem.classList.contains(\"flatpickr-day\") || elem.classList.contains(\"flatpickr-disabled\"))) return;\n      var hoverDate = elem ? elem.dateObj.getTime() : self.days.firstElementChild.dateObj.getTime(),\n        initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(),\n        rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()),\n        rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n      var containsDisabled = false;\n      var minRange = 0,\n        maxRange = 0;\n      for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n        if (!isEnabled(new Date(t), true)) {\n          containsDisabled = containsDisabled || t > rangeStartDate && t < rangeEndDate;\n          if (t < initialDate && (!minRange || t > minRange)) minRange = t;else if (t > initialDate && (!maxRange || t < maxRange)) maxRange = t;\n        }\n      }\n      for (var m = 0; m < self.config.showMonths; m++) {\n        var month = self.daysContainer.children[m];\n        var _loop_1 = function (i, l) {\n          var dayElem = month.children[i],\n            date = dayElem.dateObj;\n          var timestamp = date.getTime();\n          var outOfRange = minRange > 0 && timestamp < minRange || maxRange > 0 && timestamp > maxRange;\n          if (outOfRange) {\n            dayElem.classList.add(\"notAllowed\");\n            [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n              dayElem.classList.remove(c);\n            });\n            return \"continue\";\n          } else if (containsDisabled && !outOfRange) return \"continue\";\n          [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n            dayElem.classList.remove(c);\n          });\n          if (elem !== undefined) {\n            elem.classList.add(hoverDate <= self.selectedDates[0].getTime() ? \"startRange\" : \"endRange\");\n            if (initialDate < hoverDate && timestamp === initialDate) dayElem.classList.add(\"startRange\");else if (initialDate > hoverDate && timestamp === initialDate) dayElem.classList.add(\"endRange\");\n            if (timestamp >= minRange && (maxRange === 0 || timestamp <= maxRange) && isBetween(timestamp, initialDate, hoverDate)) dayElem.classList.add(\"inRange\");\n          }\n        };\n        for (var i = 0, l = month.children.length; i < l; i++) {\n          _loop_1(i, l);\n        }\n      }\n    }\n    function onResize() {\n      if (self.isOpen && !self.config.static && !self.config.inline) positionCalendar();\n    }\n    function open(e, positionElement) {\n      if (positionElement === void 0) {\n        positionElement = self._positionElement;\n      }\n      if (self.isMobile === true) {\n        if (e) {\n          e.preventDefault();\n          var eventTarget = getEventTarget(e);\n          eventTarget && eventTarget.blur();\n        }\n        if (self.mobileInput !== undefined) {\n          self.mobileInput.focus();\n          self.mobileInput.click();\n        }\n        triggerEvent(\"onOpen\");\n        return;\n      }\n      if (self._input.disabled || self.config.inline) return;\n      var wasOpen = self.isOpen;\n      self.isOpen = true;\n      if (!wasOpen) {\n        self.calendarContainer.classList.add(\"open\");\n        self._input.classList.add(\"active\");\n        triggerEvent(\"onOpen\");\n        positionCalendar(positionElement);\n      }\n      if (self.config.enableTime === true && self.config.noCalendar === true) {\n        if (self.config.allowInput === false && (e === undefined || !self.timeContainer.contains(e.relatedTarget))) {\n          setTimeout(function () {\n            return self.hourElement.select();\n          }, 50);\n        }\n      }\n    }\n    function minMaxDateSetter(type) {\n      return function (date) {\n        var dateObj = self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat);\n        var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n        if (dateObj !== undefined) {\n          self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] = dateObj.getHours() > 0 || dateObj.getMinutes() > 0 || dateObj.getSeconds() > 0;\n        }\n        if (self.selectedDates) {\n          self.selectedDates = self.selectedDates.filter(function (d) {\n            return isEnabled(d);\n          });\n          if (!self.selectedDates.length && type === \"min\") setHoursFromDate(dateObj);\n          updateValue();\n        }\n        if (self.daysContainer) {\n          redraw();\n          if (dateObj !== undefined) self.currentYearElement[type] = dateObj.getFullYear().toString();else self.currentYearElement.removeAttribute(type);\n          self.currentYearElement.disabled = !!inverseDateObj && dateObj !== undefined && inverseDateObj.getFullYear() === dateObj.getFullYear();\n        }\n      };\n    }\n    function parseConfig() {\n      var boolOpts = [\"wrap\", \"weekNumbers\", \"allowInput\", \"allowInvalidPreload\", \"clickOpens\", \"time_24hr\", \"enableTime\", \"noCalendar\", \"altInput\", \"shorthandCurrentMonth\", \"inline\", \"static\", \"enableSeconds\", \"disableMobile\"];\n      var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n      var formats = {};\n      self.config.parseDate = userConfig.parseDate;\n      self.config.formatDate = userConfig.formatDate;\n      Object.defineProperty(self.config, \"enable\", {\n        get: function () {\n          return self.config._enable;\n        },\n        set: function (dates) {\n          self.config._enable = parseDateRules(dates);\n        }\n      });\n      Object.defineProperty(self.config, \"disable\", {\n        get: function () {\n          return self.config._disable;\n        },\n        set: function (dates) {\n          self.config._disable = parseDateRules(dates);\n        }\n      });\n      var timeMode = userConfig.mode === \"time\";\n      if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n        var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;\n        formats.dateFormat = userConfig.noCalendar || timeMode ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\") : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n      }\n      if (userConfig.altInput && (userConfig.enableTime || timeMode) && !userConfig.altFormat) {\n        var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;\n        formats.altFormat = userConfig.noCalendar || timeMode ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\") : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n      }\n      Object.defineProperty(self.config, \"minDate\", {\n        get: function () {\n          return self.config._minDate;\n        },\n        set: minMaxDateSetter(\"min\")\n      });\n      Object.defineProperty(self.config, \"maxDate\", {\n        get: function () {\n          return self.config._maxDate;\n        },\n        set: minMaxDateSetter(\"max\")\n      });\n      var minMaxTimeSetter = function (type) {\n        return function (val) {\n          self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n        };\n      };\n      Object.defineProperty(self.config, \"minTime\", {\n        get: function () {\n          return self.config._minTime;\n        },\n        set: minMaxTimeSetter(\"min\")\n      });\n      Object.defineProperty(self.config, \"maxTime\", {\n        get: function () {\n          return self.config._maxTime;\n        },\n        set: minMaxTimeSetter(\"max\")\n      });\n      if (userConfig.mode === \"time\") {\n        self.config.noCalendar = true;\n        self.config.enableTime = true;\n      }\n      Object.assign(self.config, formats, userConfig);\n      for (var i = 0; i < boolOpts.length; i++)\n      // https://github.com/microsoft/TypeScript/issues/31663\n      self.config[boolOpts[i]] = self.config[boolOpts[i]] === true || self.config[boolOpts[i]] === \"true\";\n      HOOKS.filter(function (hook) {\n        return self.config[hook] !== undefined;\n      }).forEach(function (hook) {\n        self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n      });\n      self.isMobile = !self.config.disableMobile && !self.config.inline && self.config.mode === \"single\" && !self.config.disable.length && !self.config.enable.length && !self.config.weekNumbers && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n      for (var i = 0; i < self.config.plugins.length; i++) {\n        var pluginConf = self.config.plugins[i](self) || {};\n        for (var key in pluginConf) {\n          if (HOOKS.indexOf(key) > -1) {\n            self.config[key] = arrayify(pluginConf[key]).map(bindToInstance).concat(self.config[key]);\n          } else if (typeof userConfig[key] === \"undefined\") self.config[key] = pluginConf[key];\n        }\n      }\n      if (!userConfig.altInputClass) {\n        self.config.altInputClass = getInputElem().className + \" \" + self.config.altInputClass;\n      }\n      triggerEvent(\"onParseConfig\");\n    }\n    function getInputElem() {\n      return self.config.wrap ? element.querySelector(\"[data-input]\") : element;\n    }\n    function setupLocale() {\n      if (typeof self.config.locale !== \"object\" && typeof flatpickr.l10ns[self.config.locale] === \"undefined\") self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n      self.l10n = __assign(__assign({}, flatpickr.l10ns.default), typeof self.config.locale === \"object\" ? self.config.locale : self.config.locale !== \"default\" ? flatpickr.l10ns[self.config.locale] : undefined);\n      tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n      var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n      if (userConfig.time_24hr === undefined && flatpickr.defaultConfig.time_24hr === undefined) {\n        self.config.time_24hr = self.l10n.time_24hr;\n      }\n      self.formatDate = createDateFormatter(self);\n      self.parseDate = createDateParser({\n        config: self.config,\n        l10n: self.l10n\n      });\n    }\n    function positionCalendar(customPositionElement) {\n      if (self.calendarContainer === undefined) return;\n      triggerEvent(\"onPreCalendarPosition\");\n      var positionElement = customPositionElement || self._positionElement;\n      var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, function (acc, child) {\n          return acc + child.offsetHeight;\n        }, 0),\n        calendarWidth = self.calendarContainer.offsetWidth,\n        configPos = self.config.position.split(\" \"),\n        configPosVertical = configPos[0],\n        configPosHorizontal = configPos.length > 1 ? configPos[1] : null,\n        inputBounds = positionElement.getBoundingClientRect(),\n        distanceFromBottom = window.innerHeight - inputBounds.bottom,\n        showOnTop = configPosVertical === \"above\" || configPosVertical !== \"below\" && distanceFromBottom < calendarHeight && inputBounds.top > calendarHeight;\n      var top = window.pageYOffset + inputBounds.top + (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n      toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n      toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n      if (self.config.inline) return;\n      var left = window.pageXOffset + inputBounds.left;\n      var isCenter = false;\n      var isRight = false;\n      if (configPosHorizontal === \"center\") {\n        left -= (calendarWidth - inputBounds.width) / 2;\n        isCenter = true;\n      } else if (configPosHorizontal === \"right\") {\n        left -= calendarWidth - inputBounds.width;\n        isRight = true;\n      }\n      toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n      toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n      toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n      var right = window.document.body.offsetWidth - (window.pageXOffset + inputBounds.right);\n      var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n      var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n      toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n      if (self.config.static) return;\n      self.calendarContainer.style.top = top + \"px\";\n      if (!rightMost) {\n        self.calendarContainer.style.left = left + \"px\";\n        self.calendarContainer.style.right = \"auto\";\n      } else if (!centerMost) {\n        self.calendarContainer.style.left = \"auto\";\n        self.calendarContainer.style.right = right + \"px\";\n      } else {\n        var doc = getDocumentStyleSheet();\n        // some testing environments don't have css support\n        if (doc === undefined) return;\n        var bodyWidth = window.document.body.offsetWidth;\n        var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n        var centerBefore = \".flatpickr-calendar.centerMost:before\";\n        var centerAfter = \".flatpickr-calendar.centerMost:after\";\n        var centerIndex = doc.cssRules.length;\n        var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n        toggleClass(self.calendarContainer, \"rightMost\", false);\n        toggleClass(self.calendarContainer, \"centerMost\", true);\n        doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n        self.calendarContainer.style.left = centerLeft + \"px\";\n        self.calendarContainer.style.right = \"auto\";\n      }\n    }\n    function getDocumentStyleSheet() {\n      var editableSheet = null;\n      for (var i = 0; i < document.styleSheets.length; i++) {\n        var sheet = document.styleSheets[i];\n        try {\n          sheet.cssRules;\n        } catch (err) {\n          continue;\n        }\n        editableSheet = sheet;\n        break;\n      }\n      return editableSheet != null ? editableSheet : createStyleSheet();\n    }\n    function createStyleSheet() {\n      var style = document.createElement(\"style\");\n      document.head.appendChild(style);\n      return style.sheet;\n    }\n    function redraw() {\n      if (self.config.noCalendar || self.isMobile) return;\n      buildMonthSwitch();\n      updateNavigationCurrentMonth();\n      buildDays();\n    }\n    function focusAndClose() {\n      self._input.focus();\n      if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 || navigator.msMaxTouchPoints !== undefined) {\n        // hack - bugs in the way IE handles focus keeps the calendar open\n        setTimeout(self.close, 0);\n      } else {\n        self.close();\n      }\n    }\n    function selectDate(e) {\n      e.preventDefault();\n      e.stopPropagation();\n      var isSelectable = function (day) {\n        return day.classList && day.classList.contains(\"flatpickr-day\") && !day.classList.contains(\"flatpickr-disabled\") && !day.classList.contains(\"notAllowed\");\n      };\n      var t = findParent(getEventTarget(e), isSelectable);\n      if (t === undefined) return;\n      var target = t;\n      var selectedDate = self.latestSelectedDateObj = new Date(target.dateObj.getTime());\n      var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth || selectedDate.getMonth() > self.currentMonth + self.config.showMonths - 1) && self.config.mode !== \"range\";\n      self.selectedDateElem = target;\n      if (self.config.mode === \"single\") self.selectedDates = [selectedDate];else if (self.config.mode === \"multiple\") {\n        var selectedIndex = isDateSelected(selectedDate);\n        if (selectedIndex) self.selectedDates.splice(parseInt(selectedIndex), 1);else self.selectedDates.push(selectedDate);\n      } else if (self.config.mode === \"range\") {\n        if (self.selectedDates.length === 2) {\n          self.clear(false, false);\n        }\n        self.latestSelectedDateObj = selectedDate;\n        self.selectedDates.push(selectedDate);\n        // unless selecting same date twice, sort ascendingly\n        if (compareDates(selectedDate, self.selectedDates[0], true) !== 0) self.selectedDates.sort(function (a, b) {\n          return a.getTime() - b.getTime();\n        });\n      }\n      setHoursFromInputs();\n      if (shouldChangeMonth) {\n        var isNewYear = self.currentYear !== selectedDate.getFullYear();\n        self.currentYear = selectedDate.getFullYear();\n        self.currentMonth = selectedDate.getMonth();\n        if (isNewYear) {\n          triggerEvent(\"onYearChange\");\n          buildMonthSwitch();\n        }\n        triggerEvent(\"onMonthChange\");\n      }\n      updateNavigationCurrentMonth();\n      buildDays();\n      updateValue();\n      // maintain focus\n      if (!shouldChangeMonth && self.config.mode !== \"range\" && self.config.showMonths === 1) focusOnDayElem(target);else if (self.selectedDateElem !== undefined && self.hourElement === undefined) {\n        self.selectedDateElem && self.selectedDateElem.focus();\n      }\n      if (self.hourElement !== undefined) self.hourElement !== undefined && self.hourElement.focus();\n      if (self.config.closeOnSelect) {\n        var single = self.config.mode === \"single\" && !self.config.enableTime;\n        var range = self.config.mode === \"range\" && self.selectedDates.length === 2 && !self.config.enableTime;\n        if (single || range) {\n          focusAndClose();\n        }\n      }\n      triggerChange();\n    }\n    var CALLBACKS = {\n      locale: [setupLocale, updateWeekdays],\n      showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n      minDate: [jumpToDate],\n      maxDate: [jumpToDate]\n    };\n    function set(option, value) {\n      if (option !== null && typeof option === \"object\") {\n        Object.assign(self.config, option);\n        for (var key in option) {\n          if (CALLBACKS[key] !== undefined) CALLBACKS[key].forEach(function (x) {\n            return x();\n          });\n        }\n      } else {\n        self.config[option] = value;\n        if (CALLBACKS[option] !== undefined) CALLBACKS[option].forEach(function (x) {\n          return x();\n        });else if (HOOKS.indexOf(option) > -1) self.config[option] = arrayify(value);\n      }\n      self.redraw();\n      updateValue(true);\n    }\n    function setSelectedDate(inputDate, format) {\n      var dates = [];\n      if (inputDate instanceof Array) dates = inputDate.map(function (d) {\n        return self.parseDate(d, format);\n      });else if (inputDate instanceof Date || typeof inputDate === \"number\") dates = [self.parseDate(inputDate, format)];else if (typeof inputDate === \"string\") {\n        switch (self.config.mode) {\n          case \"single\":\n          case \"time\":\n            dates = [self.parseDate(inputDate, format)];\n            break;\n          case \"multiple\":\n            dates = inputDate.split(self.config.conjunction).map(function (date) {\n              return self.parseDate(date, format);\n            });\n            break;\n          case \"range\":\n            dates = inputDate.split(self.l10n.rangeSeparator).map(function (date) {\n              return self.parseDate(date, format);\n            });\n            break;\n        }\n      } else self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n      self.selectedDates = self.config.allowInvalidPreload ? dates : dates.filter(function (d) {\n        return d instanceof Date && isEnabled(d, false);\n      });\n      if (self.config.mode === \"range\") self.selectedDates.sort(function (a, b) {\n        return a.getTime() - b.getTime();\n      });\n    }\n    function setDate(date, triggerChange, format) {\n      if (triggerChange === void 0) {\n        triggerChange = false;\n      }\n      if (format === void 0) {\n        format = self.config.dateFormat;\n      }\n      if (date !== 0 && !date || date instanceof Array && date.length === 0) return self.clear(triggerChange);\n      setSelectedDate(date, format);\n      self.latestSelectedDateObj = self.selectedDates[self.selectedDates.length - 1];\n      self.redraw();\n      jumpToDate(undefined, triggerChange);\n      setHoursFromDate();\n      if (self.selectedDates.length === 0) {\n        self.clear(false);\n      }\n      updateValue(triggerChange);\n      if (triggerChange) triggerEvent(\"onChange\");\n    }\n    function parseDateRules(arr) {\n      return arr.slice().map(function (rule) {\n        if (typeof rule === \"string\" || typeof rule === \"number\" || rule instanceof Date) {\n          return self.parseDate(rule, undefined, true);\n        } else if (rule && typeof rule === \"object\" && rule.from && rule.to) return {\n          from: self.parseDate(rule.from, undefined),\n          to: self.parseDate(rule.to, undefined)\n        };\n        return rule;\n      }).filter(function (x) {\n        return x;\n      }); // remove falsy values\n    }\n\n    function setupDates() {\n      self.selectedDates = [];\n      self.now = self.parseDate(self.config.now) || new Date();\n      // Workaround IE11 setting placeholder as the input's value\n      var preloadedDate = self.config.defaultDate || ((self.input.nodeName === \"INPUT\" || self.input.nodeName === \"TEXTAREA\") && self.input.placeholder && self.input.value === self.input.placeholder ? null : self.input.value);\n      if (preloadedDate) setSelectedDate(preloadedDate, self.config.dateFormat);\n      self._initialDate = self.selectedDates.length > 0 ? self.selectedDates[0] : self.config.minDate && self.config.minDate.getTime() > self.now.getTime() ? self.config.minDate : self.config.maxDate && self.config.maxDate.getTime() < self.now.getTime() ? self.config.maxDate : self.now;\n      self.currentYear = self._initialDate.getFullYear();\n      self.currentMonth = self._initialDate.getMonth();\n      if (self.selectedDates.length > 0) self.latestSelectedDateObj = self.selectedDates[0];\n      if (self.config.minTime !== undefined) self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n      if (self.config.maxTime !== undefined) self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n      self.minDateHasTime = !!self.config.minDate && (self.config.minDate.getHours() > 0 || self.config.minDate.getMinutes() > 0 || self.config.minDate.getSeconds() > 0);\n      self.maxDateHasTime = !!self.config.maxDate && (self.config.maxDate.getHours() > 0 || self.config.maxDate.getMinutes() > 0 || self.config.maxDate.getSeconds() > 0);\n    }\n    function setupInputs() {\n      self.input = getInputElem();\n      /* istanbul ignore next */\n      if (!self.input) {\n        self.config.errorHandler(new Error(\"Invalid input element specified\"));\n        return;\n      }\n      // hack: store previous type to restore it after destroy()\n      self.input._type = self.input.type;\n      self.input.type = \"text\";\n      self.input.classList.add(\"flatpickr-input\");\n      self._input = self.input;\n      if (self.config.altInput) {\n        // replicate self.element\n        self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n        self._input = self.altInput;\n        self.altInput.placeholder = self.input.placeholder;\n        self.altInput.disabled = self.input.disabled;\n        self.altInput.required = self.input.required;\n        self.altInput.tabIndex = self.input.tabIndex;\n        self.altInput.type = \"text\";\n        self.input.setAttribute(\"type\", \"hidden\");\n        if (!self.config.static && self.input.parentNode) self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n      }\n      if (!self.config.allowInput) self._input.setAttribute(\"readonly\", \"readonly\");\n      self._positionElement = self.config.positionElement || self._input;\n    }\n    function setupMobile() {\n      var inputType = self.config.enableTime ? self.config.noCalendar ? \"time\" : \"datetime-local\" : \"date\";\n      self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n      self.mobileInput.tabIndex = 1;\n      self.mobileInput.type = inputType;\n      self.mobileInput.disabled = self.input.disabled;\n      self.mobileInput.required = self.input.required;\n      self.mobileInput.placeholder = self.input.placeholder;\n      self.mobileFormatStr = inputType === \"datetime-local\" ? \"Y-m-d\\\\TH:i:S\" : inputType === \"date\" ? \"Y-m-d\" : \"H:i:S\";\n      if (self.selectedDates.length > 0) {\n        self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n      }\n      if (self.config.minDate) self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n      if (self.config.maxDate) self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n      if (self.input.getAttribute(\"step\")) self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n      self.input.type = \"hidden\";\n      if (self.altInput !== undefined) self.altInput.type = \"hidden\";\n      try {\n        if (self.input.parentNode) self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n      } catch (_a) {}\n      bind(self.mobileInput, \"change\", function (e) {\n        self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n        triggerEvent(\"onChange\");\n        triggerEvent(\"onClose\");\n      });\n    }\n    function toggle(e) {\n      if (self.isOpen === true) return self.close();\n      self.open(e);\n    }\n    function triggerEvent(event, data) {\n      // If the instance has been destroyed already, all hooks have been removed\n      if (self.config === undefined) return;\n      var hooks = self.config[event];\n      if (hooks !== undefined && hooks.length > 0) {\n        for (var i = 0; hooks[i] && i < hooks.length; i++) hooks[i](self.selectedDates, self.input.value, self, data);\n      }\n      if (event === \"onChange\") {\n        self.input.dispatchEvent(createEvent(\"change\"));\n        // many front-end frameworks bind to the input event\n        self.input.dispatchEvent(createEvent(\"input\"));\n      }\n    }\n    function createEvent(name) {\n      var e = document.createEvent(\"Event\");\n      e.initEvent(name, true, true);\n      return e;\n    }\n    function isDateSelected(date) {\n      for (var i = 0; i < self.selectedDates.length; i++) {\n        if (compareDates(self.selectedDates[i], date) === 0) return \"\" + i;\n      }\n      return false;\n    }\n    function isDateInRange(date) {\n      if (self.config.mode !== \"range\" || self.selectedDates.length < 2) return false;\n      return compareDates(date, self.selectedDates[0]) >= 0 && compareDates(date, self.selectedDates[1]) <= 0;\n    }\n    function updateNavigationCurrentMonth() {\n      if (self.config.noCalendar || self.isMobile || !self.monthNav) return;\n      self.yearElements.forEach(function (yearElement, i) {\n        var d = new Date(self.currentYear, self.currentMonth, 1);\n        d.setMonth(self.currentMonth + i);\n        if (self.config.showMonths > 1 || self.config.monthSelectorType === \"static\") {\n          self.monthElements[i].textContent = monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n        } else {\n          self.monthsDropdownContainer.value = d.getMonth().toString();\n        }\n        yearElement.value = d.getFullYear().toString();\n      });\n      self._hidePrevMonthArrow = self.config.minDate !== undefined && (self.currentYear === self.config.minDate.getFullYear() ? self.currentMonth <= self.config.minDate.getMonth() : self.currentYear < self.config.minDate.getFullYear());\n      self._hideNextMonthArrow = self.config.maxDate !== undefined && (self.currentYear === self.config.maxDate.getFullYear() ? self.currentMonth + 1 > self.config.maxDate.getMonth() : self.currentYear > self.config.maxDate.getFullYear());\n    }\n    function getDateStr(format) {\n      return self.selectedDates.map(function (dObj) {\n        return self.formatDate(dObj, format);\n      }).filter(function (d, i, arr) {\n        return self.config.mode !== \"range\" || self.config.enableTime || arr.indexOf(d) === i;\n      }).join(self.config.mode !== \"range\" ? self.config.conjunction : self.l10n.rangeSeparator);\n    }\n    /**\n     * Updates the values of inputs associated with the calendar\n     */\n    function updateValue(triggerChange) {\n      if (triggerChange === void 0) {\n        triggerChange = true;\n      }\n      if (self.mobileInput !== undefined && self.mobileFormatStr) {\n        self.mobileInput.value = self.latestSelectedDateObj !== undefined ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr) : \"\";\n      }\n      self.input.value = getDateStr(self.config.dateFormat);\n      if (self.altInput !== undefined) {\n        self.altInput.value = getDateStr(self.config.altFormat);\n      }\n      if (triggerChange !== false) triggerEvent(\"onValueUpdate\");\n    }\n    function onMonthNavClick(e) {\n      var eventTarget = getEventTarget(e);\n      var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n      var isNextMonth = self.nextMonthNav.contains(eventTarget);\n      if (isPrevMonth || isNextMonth) {\n        changeMonth(isPrevMonth ? -1 : 1);\n      } else if (self.yearElements.indexOf(eventTarget) >= 0) {\n        eventTarget.select();\n      } else if (eventTarget.classList.contains(\"arrowUp\")) {\n        self.changeYear(self.currentYear + 1);\n      } else if (eventTarget.classList.contains(\"arrowDown\")) {\n        self.changeYear(self.currentYear - 1);\n      }\n    }\n    function timeWrapper(e) {\n      e.preventDefault();\n      var isKeyDown = e.type === \"keydown\",\n        eventTarget = getEventTarget(e),\n        input = eventTarget;\n      if (self.amPM !== undefined && eventTarget === self.amPM) {\n        self.amPM.textContent = self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n      }\n      var min = parseFloat(input.getAttribute(\"min\")),\n        max = parseFloat(input.getAttribute(\"max\")),\n        step = parseFloat(input.getAttribute(\"step\")),\n        curValue = parseInt(input.value, 10),\n        delta = e.delta || (isKeyDown ? e.which === 38 ? 1 : -1 : 0);\n      var newValue = curValue + step * delta;\n      if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n        var isHourElem = input === self.hourElement,\n          isMinuteElem = input === self.minuteElement;\n        if (newValue < min) {\n          newValue = max + newValue + int(!isHourElem) + (int(isHourElem) && int(!self.amPM));\n          if (isMinuteElem) incrementNumInput(undefined, -1, self.hourElement);\n        } else if (newValue > max) {\n          newValue = input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n          if (isMinuteElem) incrementNumInput(undefined, 1, self.hourElement);\n        }\n        if (self.amPM && isHourElem && (step === 1 ? newValue + curValue === 23 : Math.abs(newValue - curValue) > step)) {\n          self.amPM.textContent = self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n        }\n        input.value = pad(newValue);\n      }\n    }\n    init();\n    return self;\n  }\n  /* istanbul ignore next */\n  function _flatpickr(nodeList, config) {\n    // static list\n    var nodes = Array.prototype.slice.call(nodeList).filter(function (x) {\n      return x instanceof HTMLElement;\n    });\n    var instances = [];\n    for (var i = 0; i < nodes.length; i++) {\n      var node = nodes[i];\n      try {\n        if (node.getAttribute(\"data-fp-omit\") !== null) continue;\n        if (node._flatpickr !== undefined) {\n          node._flatpickr.destroy();\n          node._flatpickr = undefined;\n        }\n        node._flatpickr = FlatpickrInstance(node, config || {});\n        instances.push(node._flatpickr);\n      } catch (e) {\n        console.error(e);\n      }\n    }\n    return instances.length === 1 ? instances[0] : instances;\n  }\n  /* istanbul ignore next */\n  if (typeof HTMLElement !== \"undefined\" && typeof HTMLCollection !== \"undefined\" && typeof NodeList !== \"undefined\") {\n    // browser env\n    HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n      return _flatpickr(this, config);\n    };\n    HTMLElement.prototype.flatpickr = function (config) {\n      return _flatpickr([this], config);\n    };\n  }\n  /* istanbul ignore next */\n  var flatpickr = function (selector, config) {\n    if (typeof selector === \"string\") {\n      return _flatpickr(window.document.querySelectorAll(selector), config);\n    } else if (selector instanceof Node) {\n      return _flatpickr([selector], config);\n    } else {\n      return _flatpickr(selector, config);\n    }\n  };\n  /* istanbul ignore next */\n  flatpickr.defaultConfig = {};\n  flatpickr.l10ns = {\n    en: __assign({}, english),\n    default: __assign({}, english)\n  };\n  flatpickr.localize = function (l10n) {\n    flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n  };\n  flatpickr.setDefaults = function (config) {\n    flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n  };\n  flatpickr.parseDate = createDateParser({});\n  flatpickr.formatDate = createDateFormatter({});\n  flatpickr.compareDates = compareDates;\n  /* istanbul ignore next */\n  if (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n    jQuery.fn.flatpickr = function (config) {\n      return _flatpickr(this, config);\n    };\n  }\n  // eslint-disable-next-line @typescript-eslint/camelcase\n  Date.prototype.fp_incr = function (days) {\n    return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n  };\n  if (typeof window !== \"undefined\") {\n    window.flatpickr = flatpickr;\n  }\n  return flatpickr;\n});","/*!\n * Select2 4.1.0-rc.0\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        } else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n})(function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 = function () {\n    // Restore the Select2 AMD loader so it can be used\n    // Needed mostly in the language files, where the loader is not inserted\n    if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n      var S2 = jQuery.fn.select2.amd;\n    }\n    var S2;\n    (function () {\n      if (!S2 || !S2.requirejs) {\n        if (!S2) {\n          S2 = {};\n        } else {\n          require = S2;\n        }\n        /**\n         * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n         * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n         */\n        //Going sloppy to avoid 'use strict' string cost, but strict practices should\n        //be followed.\n        /*global setTimeout: false */\n\n        var requirejs, require, define;\n        (function (undef) {\n          var main,\n            req,\n            makeMap,\n            handlers,\n            defined = {},\n            waiting = {},\n            config = {},\n            defining = {},\n            hasOwn = Object.prototype.hasOwnProperty,\n            aps = [].slice,\n            jsSuffixRegExp = /\\.js$/;\n          function hasProp(obj, prop) {\n            return hasOwn.call(obj, prop);\n          }\n\n          /**\n           * Given a relative module name, like ./something, normalize it to\n           * a real name that can be mapped to a path.\n           * @param {String} name the relative name\n           * @param {String} baseName a real name that the name arg is relative\n           * to.\n           * @returns {String} normalized name\n           */\n          function normalize(name, baseName) {\n            var nameParts,\n              nameSegment,\n              mapValue,\n              foundMap,\n              lastIndex,\n              foundI,\n              foundStarMap,\n              starI,\n              i,\n              j,\n              part,\n              normalizedBaseParts,\n              baseParts = baseName && baseName.split(\"/\"),\n              map = config.map,\n              starMap = map && map['*'] || {};\n\n            //Adjust any relative paths.\n            if (name) {\n              name = name.split('/');\n              lastIndex = name.length - 1;\n\n              // If wanting node ID compatibility, strip .js from end\n              // of IDs. Have to do this here, and not in nameToUrl\n              // because node allows either .js or non .js to map\n              // to same file.\n              if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n              }\n\n              // Starts with a '.' so need the baseName\n              if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n              }\n\n              //start trimDots\n              for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                  name.splice(i, 1);\n                  i -= 1;\n                } else if (part === '..') {\n                  // If at the start, or previous value is still ..,\n                  // keep them so that when converted to a path it may\n                  // still work when converted to a path, even though\n                  // as an ID it is less than ideal. In larger point\n                  // releases, may be better to just kick out an error.\n                  if (i === 0 || i === 1 && name[2] === '..' || name[i - 1] === '..') {\n                    continue;\n                  } else if (i > 0) {\n                    name.splice(i - 1, 2);\n                    i -= 2;\n                  }\n                }\n              }\n              //end trimDots\n\n              name = name.join('/');\n            }\n\n            //Apply map config if available.\n            if ((baseParts || starMap) && map) {\n              nameParts = name.split('/');\n              for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n                if (baseParts) {\n                  //Find the longest baseName segment match in the config.\n                  //So, do joins on the biggest to smallest lengths of baseParts.\n                  for (j = baseParts.length; j > 0; j -= 1) {\n                    mapValue = map[baseParts.slice(0, j).join('/')];\n\n                    //baseName segment has  config, find if it has one for\n                    //this name.\n                    if (mapValue) {\n                      mapValue = mapValue[nameSegment];\n                      if (mapValue) {\n                        //Match, update name to the new value.\n                        foundMap = mapValue;\n                        foundI = i;\n                        break;\n                      }\n                    }\n                  }\n                }\n                if (foundMap) {\n                  break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                  foundStarMap = starMap[nameSegment];\n                  starI = i;\n                }\n              }\n              if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n              }\n              if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n              }\n            }\n            return name;\n          }\n          function makeRequire(relName, forceSync) {\n            return function () {\n              //A version of a require function that passes a moduleName\n              //value for items that may need to\n              //look up paths relative to the moduleName\n              var args = aps.call(arguments, 0);\n\n              //If first arg is not require('string'), and there is only\n              //one arg, it is the array form without a callback. Insert\n              //a null so that the following concat is correct.\n              if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n              }\n              return req.apply(undef, args.concat([relName, forceSync]));\n            };\n          }\n          function makeNormalize(relName) {\n            return function (name) {\n              return normalize(name, relName);\n            };\n          }\n          function makeLoad(depName) {\n            return function (value) {\n              defined[depName] = value;\n            };\n          }\n          function callDep(name) {\n            if (hasProp(waiting, name)) {\n              var args = waiting[name];\n              delete waiting[name];\n              defining[name] = true;\n              main.apply(undef, args);\n            }\n            if (!hasProp(defined, name) && !hasProp(defining, name)) {\n              throw new Error('No ' + name);\n            }\n            return defined[name];\n          }\n\n          //Turns a plugin!resource to [plugin, resource]\n          //with the plugin being undefined if the name\n          //did not have a plugin prefix.\n          function splitPrefix(name) {\n            var prefix,\n              index = name ? name.indexOf('!') : -1;\n            if (index > -1) {\n              prefix = name.substring(0, index);\n              name = name.substring(index + 1, name.length);\n            }\n            return [prefix, name];\n          }\n\n          //Creates a parts array for a relName where first part is plugin ID,\n          //second part is resource ID. Assumes relName has already been normalized.\n          function makeRelParts(relName) {\n            return relName ? splitPrefix(relName) : [];\n          }\n\n          /**\n           * Makes a name map, normalizing the name, and using a plugin\n           * for normalization if necessary. Grabs a ref to plugin\n           * too, as an optimization.\n           */\n          makeMap = function (name, relParts) {\n            var plugin,\n              parts = splitPrefix(name),\n              prefix = parts[0],\n              relResourceName = relParts[1];\n            name = parts[1];\n            if (prefix) {\n              prefix = normalize(prefix, relResourceName);\n              plugin = callDep(prefix);\n            }\n\n            //Normalize according\n            if (prefix) {\n              if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n              } else {\n                name = normalize(name, relResourceName);\n              }\n            } else {\n              name = normalize(name, relResourceName);\n              parts = splitPrefix(name);\n              prefix = parts[0];\n              name = parts[1];\n              if (prefix) {\n                plugin = callDep(prefix);\n              }\n            }\n\n            //Using ridiculous property names for space reasons\n            return {\n              f: prefix ? prefix + '!' + name : name,\n              //fullName\n              n: name,\n              pr: prefix,\n              p: plugin\n            };\n          };\n          function makeConfig(name) {\n            return function () {\n              return config && config.config && config.config[name] || {};\n            };\n          }\n          handlers = {\n            require: function (name) {\n              return makeRequire(name);\n            },\n            exports: function (name) {\n              var e = defined[name];\n              if (typeof e !== 'undefined') {\n                return e;\n              } else {\n                return defined[name] = {};\n              }\n            },\n            module: function (name) {\n              return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n              };\n            }\n          };\n          main = function (name, deps, callback, relName) {\n            var cjsModule,\n              depName,\n              ret,\n              map,\n              i,\n              relParts,\n              args = [],\n              callbackType = typeof callback,\n              usingExports;\n\n            //Use name if no relName\n            relName = relName || name;\n            relParts = makeRelParts(relName);\n\n            //Call the callback to define the module, if necessary.\n            if (callbackType === 'undefined' || callbackType === 'function') {\n              //Pull out the defined dependencies and pass the ordered\n              //values to the callback.\n              //Default to [require, exports, module] if no deps\n              deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n              for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                  args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                  //CommonJS module spec 1.1\n                  args[i] = handlers.exports(name);\n                  usingExports = true;\n                } else if (depName === \"module\") {\n                  //CommonJS module spec 1.1\n                  cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) {\n                  args[i] = callDep(depName);\n                } else if (map.p) {\n                  map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                  args[i] = defined[depName];\n                } else {\n                  throw new Error(name + ' missing ' + depName);\n                }\n              }\n              ret = callback ? callback.apply(defined[name], args) : undefined;\n              if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) {\n                  defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                  //Use the return value from the function.\n                  defined[name] = ret;\n                }\n              }\n            } else if (name) {\n              //May just be an object definition for the module. Only\n              //worry about defining if have a module name.\n              defined[name] = callback;\n            }\n          };\n          requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n            if (typeof deps === \"string\") {\n              if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n              }\n              //Just return the module wanted. In this scenario, the\n              //deps arg is the module name, and second arg (if passed)\n              //is just the relName.\n              //Normalize module name, if it contains . or ..\n              return callDep(makeMap(deps, makeRelParts(callback)).f);\n            } else if (!deps.splice) {\n              //deps is a config object, not an array.\n              config = deps;\n              if (config.deps) {\n                req(config.deps, config.callback);\n              }\n              if (!callback) {\n                return;\n              }\n              if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n              } else {\n                deps = undef;\n              }\n            }\n\n            //Support require(['a'])\n            callback = callback || function () {};\n\n            //If relName is a function, it is an errback handler,\n            //so remove it.\n            if (typeof relName === 'function') {\n              relName = forceSync;\n              forceSync = alt;\n            }\n\n            //Simulate async callback;\n            if (forceSync) {\n              main(undef, deps, callback, relName);\n            } else {\n              //Using a non-zero value because of concern for what old browsers\n              //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n              //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n              //If want a value immediately, use require('id') instead -- something\n              //that works in almond on the global level, but not guaranteed and\n              //unlikely to work in other AMD implementations.\n              setTimeout(function () {\n                main(undef, deps, callback, relName);\n              }, 4);\n            }\n            return req;\n          };\n\n          /**\n           * Just drops the config on the floor, but returns req in case\n           * the config return value is used.\n           */\n          req.config = function (cfg) {\n            return req(cfg);\n          };\n\n          /**\n           * Expose module registry for debugging and tooling\n           */\n          requirejs._defined = defined;\n          define = function (name, deps, callback) {\n            if (typeof name !== 'string') {\n              throw new Error('See almond README: incorrect module build, no module name');\n            }\n\n            //This module may not have dependencies\n            if (!deps.splice) {\n              //deps is not an array, so probably means\n              //an object literal or factory function for\n              //the value. Adjust args.\n              callback = deps;\n              deps = [];\n            }\n            if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n              waiting[name] = [name, deps, callback];\n            }\n          };\n          define.amd = {\n            jQuery: true\n          };\n        })();\n        S2.requirejs = requirejs;\n        S2.require = require;\n        S2.define = define;\n      }\n    })();\n    S2.define(\"almond\", function () {});\n\n    /* global jQuery:false, $:false */\n    S2.define('jquery', [], function () {\n      var _$ = jQuery || $;\n      if (_$ == null && console && console.error) {\n        console.error('Select2: An instance of jQuery or a jQuery-compatible library was not ' + 'found. Make sure that you are including jQuery before Select2 on your ' + 'web page.');\n      }\n      return _$;\n    });\n    S2.define('select2/utils', ['jquery'], function ($) {\n      var Utils = {};\n      Utils.Extend = function (ChildClass, SuperClass) {\n        var __hasProp = {}.hasOwnProperty;\n        function BaseConstructor() {\n          this.constructor = ChildClass;\n        }\n        for (var key in SuperClass) {\n          if (__hasProp.call(SuperClass, key)) {\n            ChildClass[key] = SuperClass[key];\n          }\n        }\n        BaseConstructor.prototype = SuperClass.prototype;\n        ChildClass.prototype = new BaseConstructor();\n        ChildClass.__super__ = SuperClass.prototype;\n        return ChildClass;\n      };\n      function getMethods(theClass) {\n        var proto = theClass.prototype;\n        var methods = [];\n        for (var methodName in proto) {\n          var m = proto[methodName];\n          if (typeof m !== 'function') {\n            continue;\n          }\n          if (methodName === 'constructor') {\n            continue;\n          }\n          methods.push(methodName);\n        }\n        return methods;\n      }\n      Utils.Decorate = function (SuperClass, DecoratorClass) {\n        var decoratedMethods = getMethods(DecoratorClass);\n        var superMethods = getMethods(SuperClass);\n        function DecoratedClass() {\n          var unshift = Array.prototype.unshift;\n          var argCount = DecoratorClass.prototype.constructor.length;\n          var calledConstructor = SuperClass.prototype.constructor;\n          if (argCount > 0) {\n            unshift.call(arguments, SuperClass.prototype.constructor);\n            calledConstructor = DecoratorClass.prototype.constructor;\n          }\n          calledConstructor.apply(this, arguments);\n        }\n        DecoratorClass.displayName = SuperClass.displayName;\n        function ctr() {\n          this.constructor = DecoratedClass;\n        }\n        DecoratedClass.prototype = new ctr();\n        for (var m = 0; m < superMethods.length; m++) {\n          var superMethod = superMethods[m];\n          DecoratedClass.prototype[superMethod] = SuperClass.prototype[superMethod];\n        }\n        var calledMethod = function (methodName) {\n          // Stub out the original method if it's not decorating an actual method\n          var originalMethod = function () {};\n          if (methodName in DecoratedClass.prototype) {\n            originalMethod = DecoratedClass.prototype[methodName];\n          }\n          var decoratedMethod = DecoratorClass.prototype[methodName];\n          return function () {\n            var unshift = Array.prototype.unshift;\n            unshift.call(arguments, originalMethod);\n            return decoratedMethod.apply(this, arguments);\n          };\n        };\n        for (var d = 0; d < decoratedMethods.length; d++) {\n          var decoratedMethod = decoratedMethods[d];\n          DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n        }\n        return DecoratedClass;\n      };\n      var Observable = function () {\n        this.listeners = {};\n      };\n      Observable.prototype.on = function (event, callback) {\n        this.listeners = this.listeners || {};\n        if (event in this.listeners) {\n          this.listeners[event].push(callback);\n        } else {\n          this.listeners[event] = [callback];\n        }\n      };\n      Observable.prototype.trigger = function (event) {\n        var slice = Array.prototype.slice;\n        var params = slice.call(arguments, 1);\n        this.listeners = this.listeners || {};\n\n        // Params should always come in as an array\n        if (params == null) {\n          params = [];\n        }\n\n        // If there are no arguments to the event, use a temporary object\n        if (params.length === 0) {\n          params.push({});\n        }\n\n        // Set the `_type` of the first object to the event\n        params[0]._type = event;\n        if (event in this.listeners) {\n          this.invoke(this.listeners[event], slice.call(arguments, 1));\n        }\n        if ('*' in this.listeners) {\n          this.invoke(this.listeners['*'], arguments);\n        }\n      };\n      Observable.prototype.invoke = function (listeners, params) {\n        for (var i = 0, len = listeners.length; i < len; i++) {\n          listeners[i].apply(this, params);\n        }\n      };\n      Utils.Observable = Observable;\n      Utils.generateChars = function (length) {\n        var chars = '';\n        for (var i = 0; i < length; i++) {\n          var randomChar = Math.floor(Math.random() * 36);\n          chars += randomChar.toString(36);\n        }\n        return chars;\n      };\n      Utils.bind = function (func, context) {\n        return function () {\n          func.apply(context, arguments);\n        };\n      };\n      Utils._convertData = function (data) {\n        for (var originalKey in data) {\n          var keys = originalKey.split('-');\n          var dataLevel = data;\n          if (keys.length === 1) {\n            continue;\n          }\n          for (var k = 0; k < keys.length; k++) {\n            var key = keys[k];\n\n            // Lowercase the first letter\n            // By default, dash-separated becomes camelCase\n            key = key.substring(0, 1).toLowerCase() + key.substring(1);\n            if (!(key in dataLevel)) {\n              dataLevel[key] = {};\n            }\n            if (k == keys.length - 1) {\n              dataLevel[key] = data[originalKey];\n            }\n            dataLevel = dataLevel[key];\n          }\n          delete data[originalKey];\n        }\n        return data;\n      };\n      Utils.hasScroll = function (index, el) {\n        // Adapted from the function created by @ShadowScripter\n        // and adapted by @BillBarry on the Stack Exchange Code Review website.\n        // The original code can be found at\n        // http://codereview.stackexchange.com/q/13338\n        // and was designed to be used with the Sizzle selector engine.\n\n        var $el = $(el);\n        var overflowX = el.style.overflowX;\n        var overflowY = el.style.overflowY;\n\n        //Check both x and y declarations\n        if (overflowX === overflowY && (overflowY === 'hidden' || overflowY === 'visible')) {\n          return false;\n        }\n        if (overflowX === 'scroll' || overflowY === 'scroll') {\n          return true;\n        }\n        return $el.innerHeight() < el.scrollHeight || $el.innerWidth() < el.scrollWidth;\n      };\n      Utils.escapeMarkup = function (markup) {\n        var replaceMap = {\n          '\\\\': '&#92;',\n          '&': '&amp;',\n          '<': '&lt;',\n          '>': '&gt;',\n          '\"': '&quot;',\n          '\\'': '&#39;',\n          '/': '&#47;'\n        };\n\n        // Do not try to escape the markup if it's not a string\n        if (typeof markup !== 'string') {\n          return markup;\n        }\n        return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n          return replaceMap[match];\n        });\n      };\n\n      // Cache objects in Utils.__cache instead of $.data (see #4346)\n      Utils.__cache = {};\n      var id = 0;\n      Utils.GetUniqueElementId = function (element) {\n        // Get a unique element Id. If element has no id,\n        // creates a new unique number, stores it in the id\n        // attribute and returns the new id with a prefix.\n        // If an id already exists, it simply returns it with a prefix.\n\n        var select2Id = element.getAttribute('data-select2-id');\n        if (select2Id != null) {\n          return select2Id;\n        }\n\n        // If element has id, use it.\n        if (element.id) {\n          select2Id = 'select2-data-' + element.id;\n        } else {\n          select2Id = 'select2-data-' + (++id).toString() + '-' + Utils.generateChars(4);\n        }\n        element.setAttribute('data-select2-id', select2Id);\n        return select2Id;\n      };\n      Utils.StoreData = function (element, name, value) {\n        // Stores an item in the cache for a specified element.\n        // name is the cache key.\n        var id = Utils.GetUniqueElementId(element);\n        if (!Utils.__cache[id]) {\n          Utils.__cache[id] = {};\n        }\n        Utils.__cache[id][name] = value;\n      };\n      Utils.GetData = function (element, name) {\n        // Retrieves a value from the cache by its key (name)\n        // name is optional. If no name specified, return\n        // all cache items for the specified element.\n        // and for a specified element.\n        var id = Utils.GetUniqueElementId(element);\n        if (name) {\n          if (Utils.__cache[id]) {\n            if (Utils.__cache[id][name] != null) {\n              return Utils.__cache[id][name];\n            }\n            return $(element).data(name); // Fallback to HTML5 data attribs.\n          }\n\n          return $(element).data(name); // Fallback to HTML5 data attribs.\n        } else {\n          return Utils.__cache[id];\n        }\n      };\n      Utils.RemoveData = function (element) {\n        // Removes all cached items for a specified element.\n        var id = Utils.GetUniqueElementId(element);\n        if (Utils.__cache[id] != null) {\n          delete Utils.__cache[id];\n        }\n        element.removeAttribute('data-select2-id');\n      };\n      Utils.copyNonInternalCssClasses = function (dest, src) {\n        var classes;\n        var destinationClasses = dest.getAttribute('class').trim().split(/\\s+/);\n        destinationClasses = destinationClasses.filter(function (clazz) {\n          // Save all Select2 classes\n          return clazz.indexOf('select2-') === 0;\n        });\n        var sourceClasses = src.getAttribute('class').trim().split(/\\s+/);\n        sourceClasses = sourceClasses.filter(function (clazz) {\n          // Only copy non-Select2 classes\n          return clazz.indexOf('select2-') !== 0;\n        });\n        var replacements = destinationClasses.concat(sourceClasses);\n        dest.setAttribute('class', replacements.join(' '));\n      };\n      return Utils;\n    });\n    S2.define('select2/results', ['jquery', './utils'], function ($, Utils) {\n      function Results($element, options, dataAdapter) {\n        this.$element = $element;\n        this.data = dataAdapter;\n        this.options = options;\n        Results.__super__.constructor.call(this);\n      }\n      Utils.Extend(Results, Utils.Observable);\n      Results.prototype.render = function () {\n        var $results = $('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');\n        if (this.options.get('multiple')) {\n          $results.attr('aria-multiselectable', 'true');\n        }\n        this.$results = $results;\n        return $results;\n      };\n      Results.prototype.clear = function () {\n        this.$results.empty();\n      };\n      Results.prototype.displayMessage = function (params) {\n        var escapeMarkup = this.options.get('escapeMarkup');\n        this.clear();\n        this.hideLoading();\n        var $message = $('<li role=\"alert\" aria-live=\"assertive\"' + ' class=\"select2-results__option\"></li>');\n        var message = this.options.get('translations').get(params.message);\n        $message.append(escapeMarkup(message(params.args)));\n        $message[0].className += ' select2-results__message';\n        this.$results.append($message);\n      };\n      Results.prototype.hideMessages = function () {\n        this.$results.find('.select2-results__message').remove();\n      };\n      Results.prototype.append = function (data) {\n        this.hideLoading();\n        var $options = [];\n        if (data.results == null || data.results.length === 0) {\n          if (this.$results.children().length === 0) {\n            this.trigger('results:message', {\n              message: 'noResults'\n            });\n          }\n          return;\n        }\n        data.results = this.sort(data.results);\n        for (var d = 0; d < data.results.length; d++) {\n          var item = data.results[d];\n          var $option = this.option(item);\n          $options.push($option);\n        }\n        this.$results.append($options);\n      };\n      Results.prototype.position = function ($results, $dropdown) {\n        var $resultsContainer = $dropdown.find('.select2-results');\n        $resultsContainer.append($results);\n      };\n      Results.prototype.sort = function (data) {\n        var sorter = this.options.get('sorter');\n        return sorter(data);\n      };\n      Results.prototype.highlightFirstItem = function () {\n        var $options = this.$results.find('.select2-results__option--selectable');\n        var $selected = $options.filter('.select2-results__option--selected');\n\n        // Check if there are any selected options\n        if ($selected.length > 0) {\n          // If there are selected options, highlight the first\n          $selected.first().trigger('mouseenter');\n        } else {\n          // If there are no selected options, highlight the first option\n          // in the dropdown\n          $options.first().trigger('mouseenter');\n        }\n        this.ensureHighlightVisible();\n      };\n      Results.prototype.setClasses = function () {\n        var self = this;\n        this.data.current(function (selected) {\n          var selectedIds = selected.map(function (s) {\n            return s.id.toString();\n          });\n          var $options = self.$results.find('.select2-results__option--selectable');\n          $options.each(function () {\n            var $option = $(this);\n            var item = Utils.GetData(this, 'data');\n\n            // id needs to be converted to a string when comparing\n            var id = '' + item.id;\n            if (item.element != null && item.element.selected || item.element == null && selectedIds.indexOf(id) > -1) {\n              this.classList.add('select2-results__option--selected');\n              $option.attr('aria-selected', 'true');\n            } else {\n              this.classList.remove('select2-results__option--selected');\n              $option.attr('aria-selected', 'false');\n            }\n          });\n        });\n      };\n      Results.prototype.showLoading = function (params) {\n        this.hideLoading();\n        var loadingMore = this.options.get('translations').get('searching');\n        var loading = {\n          disabled: true,\n          loading: true,\n          text: loadingMore(params)\n        };\n        var $loading = this.option(loading);\n        $loading.className += ' loading-results';\n        this.$results.prepend($loading);\n      };\n      Results.prototype.hideLoading = function () {\n        this.$results.find('.loading-results').remove();\n      };\n      Results.prototype.option = function (data) {\n        var option = document.createElement('li');\n        option.classList.add('select2-results__option');\n        option.classList.add('select2-results__option--selectable');\n        var attrs = {\n          'role': 'option'\n        };\n        var matches = window.Element.prototype.matches || window.Element.prototype.msMatchesSelector || window.Element.prototype.webkitMatchesSelector;\n        if (data.element != null && matches.call(data.element, ':disabled') || data.element == null && data.disabled) {\n          attrs['aria-disabled'] = 'true';\n          option.classList.remove('select2-results__option--selectable');\n          option.classList.add('select2-results__option--disabled');\n        }\n        if (data.id == null) {\n          option.classList.remove('select2-results__option--selectable');\n        }\n        if (data._resultId != null) {\n          option.id = data._resultId;\n        }\n        if (data.title) {\n          option.title = data.title;\n        }\n        if (data.children) {\n          attrs.role = 'group';\n          attrs['aria-label'] = data.text;\n          option.classList.remove('select2-results__option--selectable');\n          option.classList.add('select2-results__option--group');\n        }\n        for (var attr in attrs) {\n          var val = attrs[attr];\n          option.setAttribute(attr, val);\n        }\n        if (data.children) {\n          var $option = $(option);\n          var label = document.createElement('strong');\n          label.className = 'select2-results__group';\n          this.template(data, label);\n          var $children = [];\n          for (var c = 0; c < data.children.length; c++) {\n            var child = data.children[c];\n            var $child = this.option(child);\n            $children.push($child);\n          }\n          var $childrenContainer = $('<ul></ul>', {\n            'class': 'select2-results__options select2-results__options--nested',\n            'role': 'none'\n          });\n          $childrenContainer.append($children);\n          $option.append(label);\n          $option.append($childrenContainer);\n        } else {\n          this.template(data, option);\n        }\n        Utils.StoreData(option, 'data', data);\n        return option;\n      };\n      Results.prototype.bind = function (container, $container) {\n        var self = this;\n        var id = container.id + '-results';\n        this.$results.attr('id', id);\n        container.on('results:all', function (params) {\n          self.clear();\n          self.append(params.data);\n          if (container.isOpen()) {\n            self.setClasses();\n            self.highlightFirstItem();\n          }\n        });\n        container.on('results:append', function (params) {\n          self.append(params.data);\n          if (container.isOpen()) {\n            self.setClasses();\n          }\n        });\n        container.on('query', function (params) {\n          self.hideMessages();\n          self.showLoading(params);\n        });\n        container.on('select', function () {\n          if (!container.isOpen()) {\n            return;\n          }\n          self.setClasses();\n          if (self.options.get('scrollAfterSelect')) {\n            self.highlightFirstItem();\n          }\n        });\n        container.on('unselect', function () {\n          if (!container.isOpen()) {\n            return;\n          }\n          self.setClasses();\n          if (self.options.get('scrollAfterSelect')) {\n            self.highlightFirstItem();\n          }\n        });\n        container.on('open', function () {\n          // When the dropdown is open, aria-expended=\"true\"\n          self.$results.attr('aria-expanded', 'true');\n          self.$results.attr('aria-hidden', 'false');\n          self.setClasses();\n          self.ensureHighlightVisible();\n        });\n        container.on('close', function () {\n          // When the dropdown is closed, aria-expended=\"false\"\n          self.$results.attr('aria-expanded', 'false');\n          self.$results.attr('aria-hidden', 'true');\n          self.$results.removeAttr('aria-activedescendant');\n        });\n        container.on('results:toggle', function () {\n          var $highlighted = self.getHighlightedResults();\n          if ($highlighted.length === 0) {\n            return;\n          }\n          $highlighted.trigger('mouseup');\n        });\n        container.on('results:select', function () {\n          var $highlighted = self.getHighlightedResults();\n          if ($highlighted.length === 0) {\n            return;\n          }\n          var data = Utils.GetData($highlighted[0], 'data');\n          if ($highlighted.hasClass('select2-results__option--selected')) {\n            self.trigger('close', {});\n          } else {\n            self.trigger('select', {\n              data: data\n            });\n          }\n        });\n        container.on('results:previous', function () {\n          var $highlighted = self.getHighlightedResults();\n          var $options = self.$results.find('.select2-results__option--selectable');\n          var currentIndex = $options.index($highlighted);\n\n          // If we are already at the top, don't move further\n          // If no options, currentIndex will be -1\n          if (currentIndex <= 0) {\n            return;\n          }\n          var nextIndex = currentIndex - 1;\n\n          // If none are highlighted, highlight the first\n          if ($highlighted.length === 0) {\n            nextIndex = 0;\n          }\n          var $next = $options.eq(nextIndex);\n          $next.trigger('mouseenter');\n          var currentOffset = self.$results.offset().top;\n          var nextTop = $next.offset().top;\n          var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n          if (nextIndex === 0) {\n            self.$results.scrollTop(0);\n          } else if (nextTop - currentOffset < 0) {\n            self.$results.scrollTop(nextOffset);\n          }\n        });\n        container.on('results:next', function () {\n          var $highlighted = self.getHighlightedResults();\n          var $options = self.$results.find('.select2-results__option--selectable');\n          var currentIndex = $options.index($highlighted);\n          var nextIndex = currentIndex + 1;\n\n          // If we are at the last option, stay there\n          if (nextIndex >= $options.length) {\n            return;\n          }\n          var $next = $options.eq(nextIndex);\n          $next.trigger('mouseenter');\n          var currentOffset = self.$results.offset().top + self.$results.outerHeight(false);\n          var nextBottom = $next.offset().top + $next.outerHeight(false);\n          var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n          if (nextIndex === 0) {\n            self.$results.scrollTop(0);\n          } else if (nextBottom > currentOffset) {\n            self.$results.scrollTop(nextOffset);\n          }\n        });\n        container.on('results:focus', function (params) {\n          params.element[0].classList.add('select2-results__option--highlighted');\n          params.element[0].setAttribute('aria-selected', 'true');\n        });\n        container.on('results:message', function (params) {\n          self.displayMessage(params);\n        });\n        if ($.fn.mousewheel) {\n          this.$results.on('mousewheel', function (e) {\n            var top = self.$results.scrollTop();\n            var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n            var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n            var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n            if (isAtTop) {\n              self.$results.scrollTop(0);\n              e.preventDefault();\n              e.stopPropagation();\n            } else if (isAtBottom) {\n              self.$results.scrollTop(self.$results.get(0).scrollHeight - self.$results.height());\n              e.preventDefault();\n              e.stopPropagation();\n            }\n          });\n        }\n        this.$results.on('mouseup', '.select2-results__option--selectable', function (evt) {\n          var $this = $(this);\n          var data = Utils.GetData(this, 'data');\n          if ($this.hasClass('select2-results__option--selected')) {\n            if (self.options.get('multiple')) {\n              self.trigger('unselect', {\n                originalEvent: evt,\n                data: data\n              });\n            } else {\n              self.trigger('close', {});\n            }\n            return;\n          }\n          self.trigger('select', {\n            originalEvent: evt,\n            data: data\n          });\n        });\n        this.$results.on('mouseenter', '.select2-results__option--selectable', function (evt) {\n          var data = Utils.GetData(this, 'data');\n          self.getHighlightedResults().removeClass('select2-results__option--highlighted').attr('aria-selected', 'false');\n          self.trigger('results:focus', {\n            data: data,\n            element: $(this)\n          });\n        });\n      };\n      Results.prototype.getHighlightedResults = function () {\n        var $highlighted = this.$results.find('.select2-results__option--highlighted');\n        return $highlighted;\n      };\n      Results.prototype.destroy = function () {\n        this.$results.remove();\n      };\n      Results.prototype.ensureHighlightVisible = function () {\n        var $highlighted = this.getHighlightedResults();\n        if ($highlighted.length === 0) {\n          return;\n        }\n        var $options = this.$results.find('.select2-results__option--selectable');\n        var currentIndex = $options.index($highlighted);\n        var currentOffset = this.$results.offset().top;\n        var nextTop = $highlighted.offset().top;\n        var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n        var offsetDelta = nextTop - currentOffset;\n        nextOffset -= $highlighted.outerHeight(false) * 2;\n        if (currentIndex <= 2) {\n          this.$results.scrollTop(0);\n        } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n          this.$results.scrollTop(nextOffset);\n        }\n      };\n      Results.prototype.template = function (result, container) {\n        var template = this.options.get('templateResult');\n        var escapeMarkup = this.options.get('escapeMarkup');\n        var content = template(result, container);\n        if (content == null) {\n          container.style.display = 'none';\n        } else if (typeof content === 'string') {\n          container.innerHTML = escapeMarkup(content);\n        } else {\n          $(container).append(content);\n        }\n      };\n      return Results;\n    });\n    S2.define('select2/keys', [], function () {\n      var KEYS = {\n        BACKSPACE: 8,\n        TAB: 9,\n        ENTER: 13,\n        SHIFT: 16,\n        CTRL: 17,\n        ALT: 18,\n        ESC: 27,\n        SPACE: 32,\n        PAGE_UP: 33,\n        PAGE_DOWN: 34,\n        END: 35,\n        HOME: 36,\n        LEFT: 37,\n        UP: 38,\n        RIGHT: 39,\n        DOWN: 40,\n        DELETE: 46\n      };\n      return KEYS;\n    });\n    S2.define('select2/selection/base', ['jquery', '../utils', '../keys'], function ($, Utils, KEYS) {\n      function BaseSelection($element, options) {\n        this.$element = $element;\n        this.options = options;\n        BaseSelection.__super__.constructor.call(this);\n      }\n      Utils.Extend(BaseSelection, Utils.Observable);\n      BaseSelection.prototype.render = function () {\n        var $selection = $('<span class=\"select2-selection\" role=\"combobox\" ' + ' aria-haspopup=\"true\" aria-expanded=\"false\">' + '</span>');\n        this._tabindex = 0;\n        if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n          this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n        } else if (this.$element.attr('tabindex') != null) {\n          this._tabindex = this.$element.attr('tabindex');\n        }\n        $selection.attr('title', this.$element.attr('title'));\n        $selection.attr('tabindex', this._tabindex);\n        $selection.attr('aria-disabled', 'false');\n        this.$selection = $selection;\n        return $selection;\n      };\n      BaseSelection.prototype.bind = function (container, $container) {\n        var self = this;\n        var resultsId = container.id + '-results';\n        this.container = container;\n        this.$selection.on('focus', function (evt) {\n          self.trigger('focus', evt);\n        });\n        this.$selection.on('blur', function (evt) {\n          self._handleBlur(evt);\n        });\n        this.$selection.on('keydown', function (evt) {\n          self.trigger('keypress', evt);\n          if (evt.which === KEYS.SPACE) {\n            evt.preventDefault();\n          }\n        });\n        container.on('results:focus', function (params) {\n          self.$selection.attr('aria-activedescendant', params.data._resultId);\n        });\n        container.on('selection:update', function (params) {\n          self.update(params.data);\n        });\n        container.on('open', function () {\n          // When the dropdown is open, aria-expanded=\"true\"\n          self.$selection.attr('aria-expanded', 'true');\n          self.$selection.attr('aria-owns', resultsId);\n          self._attachCloseHandler(container);\n        });\n        container.on('close', function () {\n          // When the dropdown is closed, aria-expanded=\"false\"\n          self.$selection.attr('aria-expanded', 'false');\n          self.$selection.removeAttr('aria-activedescendant');\n          self.$selection.removeAttr('aria-owns');\n          self.$selection.trigger('focus');\n          self._detachCloseHandler(container);\n        });\n        container.on('enable', function () {\n          self.$selection.attr('tabindex', self._tabindex);\n          self.$selection.attr('aria-disabled', 'false');\n        });\n        container.on('disable', function () {\n          self.$selection.attr('tabindex', '-1');\n          self.$selection.attr('aria-disabled', 'true');\n        });\n      };\n      BaseSelection.prototype._handleBlur = function (evt) {\n        var self = this;\n\n        // This needs to be delayed as the active element is the body when the tab\n        // key is pressed, possibly along with others.\n        window.setTimeout(function () {\n          // Don't trigger `blur` if the focus is still in the selection\n          if (document.activeElement == self.$selection[0] || $.contains(self.$selection[0], document.activeElement)) {\n            return;\n          }\n          self.trigger('blur', evt);\n        }, 1);\n      };\n      BaseSelection.prototype._attachCloseHandler = function (container) {\n        $(document.body).on('mousedown.select2.' + container.id, function (e) {\n          var $target = $(e.target);\n          var $select = $target.closest('.select2');\n          var $all = $('.select2.select2-container--open');\n          $all.each(function () {\n            if (this == $select[0]) {\n              return;\n            }\n            var $element = Utils.GetData(this, 'element');\n            $element.select2('close');\n          });\n        });\n      };\n      BaseSelection.prototype._detachCloseHandler = function (container) {\n        $(document.body).off('mousedown.select2.' + container.id);\n      };\n      BaseSelection.prototype.position = function ($selection, $container) {\n        var $selectionContainer = $container.find('.selection');\n        $selectionContainer.append($selection);\n      };\n      BaseSelection.prototype.destroy = function () {\n        this._detachCloseHandler(this.container);\n      };\n      BaseSelection.prototype.update = function (data) {\n        throw new Error('The `update` method must be defined in child classes.');\n      };\n\n      /**\n       * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n       * object.\n       *\n       * @return {true} if the instance is not disabled.\n       * @return {false} if the instance is disabled.\n       */\n      BaseSelection.prototype.isEnabled = function () {\n        return !this.isDisabled();\n      };\n\n      /**\n       * Helper method to abstract the \"disabled\" state of this object.\n       *\n       * @return {true} if the disabled option is true.\n       * @return {false} if the disabled option is false.\n       */\n      BaseSelection.prototype.isDisabled = function () {\n        return this.options.get('disabled');\n      };\n      return BaseSelection;\n    });\n    S2.define('select2/selection/single', ['jquery', './base', '../utils', '../keys'], function ($, BaseSelection, Utils, KEYS) {\n      function SingleSelection() {\n        SingleSelection.__super__.constructor.apply(this, arguments);\n      }\n      Utils.Extend(SingleSelection, BaseSelection);\n      SingleSelection.prototype.render = function () {\n        var $selection = SingleSelection.__super__.render.call(this);\n        $selection[0].classList.add('select2-selection--single');\n        $selection.html('<span class=\"select2-selection__rendered\"></span>' + '<span class=\"select2-selection__arrow\" role=\"presentation\">' + '<b role=\"presentation\"></b>' + '</span>');\n        return $selection;\n      };\n      SingleSelection.prototype.bind = function (container, $container) {\n        var self = this;\n        SingleSelection.__super__.bind.apply(this, arguments);\n        var id = container.id + '-container';\n        this.$selection.find('.select2-selection__rendered').attr('id', id).attr('role', 'textbox').attr('aria-readonly', 'true');\n        this.$selection.attr('aria-labelledby', id);\n        this.$selection.attr('aria-controls', id);\n        this.$selection.on('mousedown', function (evt) {\n          // Only respond to left clicks\n          if (evt.which !== 1) {\n            return;\n          }\n          self.trigger('toggle', {\n            originalEvent: evt\n          });\n        });\n        this.$selection.on('focus', function (evt) {\n          // User focuses on the container\n        });\n        this.$selection.on('blur', function (evt) {\n          // User exits the container\n        });\n        container.on('focus', function (evt) {\n          if (!container.isOpen()) {\n            self.$selection.trigger('focus');\n          }\n        });\n      };\n      SingleSelection.prototype.clear = function () {\n        var $rendered = this.$selection.find('.select2-selection__rendered');\n        $rendered.empty();\n        $rendered.removeAttr('title'); // clear tooltip on empty\n      };\n\n      SingleSelection.prototype.display = function (data, container) {\n        var template = this.options.get('templateSelection');\n        var escapeMarkup = this.options.get('escapeMarkup');\n        return escapeMarkup(template(data, container));\n      };\n      SingleSelection.prototype.selectionContainer = function () {\n        return $('<span></span>');\n      };\n      SingleSelection.prototype.update = function (data) {\n        if (data.length === 0) {\n          this.clear();\n          return;\n        }\n        var selection = data[0];\n        var $rendered = this.$selection.find('.select2-selection__rendered');\n        var formatted = this.display(selection, $rendered);\n        $rendered.empty().append(formatted);\n        var title = selection.title || selection.text;\n        if (title) {\n          $rendered.attr('title', title);\n        } else {\n          $rendered.removeAttr('title');\n        }\n      };\n      return SingleSelection;\n    });\n    S2.define('select2/selection/multiple', ['jquery', './base', '../utils'], function ($, BaseSelection, Utils) {\n      function MultipleSelection($element, options) {\n        MultipleSelection.__super__.constructor.apply(this, arguments);\n      }\n      Utils.Extend(MultipleSelection, BaseSelection);\n      MultipleSelection.prototype.render = function () {\n        var $selection = MultipleSelection.__super__.render.call(this);\n        $selection[0].classList.add('select2-selection--multiple');\n        $selection.html('<ul class=\"select2-selection__rendered\"></ul>');\n        return $selection;\n      };\n      MultipleSelection.prototype.bind = function (container, $container) {\n        var self = this;\n        MultipleSelection.__super__.bind.apply(this, arguments);\n        var id = container.id + '-container';\n        this.$selection.find('.select2-selection__rendered').attr('id', id);\n        this.$selection.on('click', function (evt) {\n          self.trigger('toggle', {\n            originalEvent: evt\n          });\n        });\n        this.$selection.on('click', '.select2-selection__choice__remove', function (evt) {\n          // Ignore the event if it is disabled\n          if (self.isDisabled()) {\n            return;\n          }\n          var $remove = $(this);\n          var $selection = $remove.parent();\n          var data = Utils.GetData($selection[0], 'data');\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        });\n        this.$selection.on('keydown', '.select2-selection__choice__remove', function (evt) {\n          // Ignore the event if it is disabled\n          if (self.isDisabled()) {\n            return;\n          }\n          evt.stopPropagation();\n        });\n      };\n      MultipleSelection.prototype.clear = function () {\n        var $rendered = this.$selection.find('.select2-selection__rendered');\n        $rendered.empty();\n        $rendered.removeAttr('title');\n      };\n      MultipleSelection.prototype.display = function (data, container) {\n        var template = this.options.get('templateSelection');\n        var escapeMarkup = this.options.get('escapeMarkup');\n        return escapeMarkup(template(data, container));\n      };\n      MultipleSelection.prototype.selectionContainer = function () {\n        var $container = $('<li class=\"select2-selection__choice\">' + '<button type=\"button\" class=\"select2-selection__choice__remove\" ' + 'tabindex=\"-1\">' + '<span aria-hidden=\"true\">&times;</span>' + '</button>' + '<span class=\"select2-selection__choice__display\"></span>' + '</li>');\n        return $container;\n      };\n      MultipleSelection.prototype.update = function (data) {\n        this.clear();\n        if (data.length === 0) {\n          return;\n        }\n        var $selections = [];\n        var selectionIdPrefix = this.$selection.find('.select2-selection__rendered').attr('id') + '-choice-';\n        for (var d = 0; d < data.length; d++) {\n          var selection = data[d];\n          var $selection = this.selectionContainer();\n          var formatted = this.display(selection, $selection);\n          var selectionId = selectionIdPrefix + Utils.generateChars(4) + '-';\n          if (selection.id) {\n            selectionId += selection.id;\n          } else {\n            selectionId += Utils.generateChars(4);\n          }\n          $selection.find('.select2-selection__choice__display').append(formatted).attr('id', selectionId);\n          var title = selection.title || selection.text;\n          if (title) {\n            $selection.attr('title', title);\n          }\n          var removeItem = this.options.get('translations').get('removeItem');\n          var $remove = $selection.find('.select2-selection__choice__remove');\n          $remove.attr('title', removeItem());\n          $remove.attr('aria-label', removeItem());\n          $remove.attr('aria-describedby', selectionId);\n          Utils.StoreData($selection[0], 'data', selection);\n          $selections.push($selection);\n        }\n        var $rendered = this.$selection.find('.select2-selection__rendered');\n        $rendered.append($selections);\n      };\n      return MultipleSelection;\n    });\n    S2.define('select2/selection/placeholder', [], function () {\n      function Placeholder(decorated, $element, options) {\n        this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n        decorated.call(this, $element, options);\n      }\n      Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n        if (typeof placeholder === 'string') {\n          placeholder = {\n            id: '',\n            text: placeholder\n          };\n        }\n        return placeholder;\n      };\n      Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n        var $placeholder = this.selectionContainer();\n        $placeholder.html(this.display(placeholder));\n        $placeholder[0].classList.add('select2-selection__placeholder');\n        $placeholder[0].classList.remove('select2-selection__choice');\n        var placeholderTitle = placeholder.title || placeholder.text || $placeholder.text();\n        this.$selection.find('.select2-selection__rendered').attr('title', placeholderTitle);\n        return $placeholder;\n      };\n      Placeholder.prototype.update = function (decorated, data) {\n        var singlePlaceholder = data.length == 1 && data[0].id != this.placeholder.id;\n        var multipleSelections = data.length > 1;\n        if (multipleSelections || singlePlaceholder) {\n          return decorated.call(this, data);\n        }\n        this.clear();\n        var $placeholder = this.createPlaceholder(this.placeholder);\n        this.$selection.find('.select2-selection__rendered').append($placeholder);\n      };\n      return Placeholder;\n    });\n    S2.define('select2/selection/allowClear', ['jquery', '../keys', '../utils'], function ($, KEYS, Utils) {\n      function AllowClear() {}\n      AllowClear.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        if (this.placeholder == null) {\n          if (this.options.get('debug') && window.console && console.error) {\n            console.error('Select2: The `allowClear` option should be used in combination ' + 'with the `placeholder` option.');\n          }\n        }\n        this.$selection.on('mousedown', '.select2-selection__clear', function (evt) {\n          self._handleClear(evt);\n        });\n        container.on('keypress', function (evt) {\n          self._handleKeyboardClear(evt, container);\n        });\n      };\n      AllowClear.prototype._handleClear = function (_, evt) {\n        // Ignore the event if it is disabled\n        if (this.isDisabled()) {\n          return;\n        }\n        var $clear = this.$selection.find('.select2-selection__clear');\n\n        // Ignore the event if nothing has been selected\n        if ($clear.length === 0) {\n          return;\n        }\n        evt.stopPropagation();\n        var data = Utils.GetData($clear[0], 'data');\n        var previousVal = this.$element.val();\n        this.$element.val(this.placeholder.id);\n        var unselectData = {\n          data: data\n        };\n        this.trigger('clear', unselectData);\n        if (unselectData.prevented) {\n          this.$element.val(previousVal);\n          return;\n        }\n        for (var d = 0; d < data.length; d++) {\n          unselectData = {\n            data: data[d]\n          };\n\n          // Trigger the `unselect` event, so people can prevent it from being\n          // cleared.\n          this.trigger('unselect', unselectData);\n\n          // If the event was prevented, don't clear it out.\n          if (unselectData.prevented) {\n            this.$element.val(previousVal);\n            return;\n          }\n        }\n        this.$element.trigger('input').trigger('change');\n        this.trigger('toggle', {});\n      };\n      AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n        if (container.isOpen()) {\n          return;\n        }\n        if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n          this._handleClear(evt);\n        }\n      };\n      AllowClear.prototype.update = function (decorated, data) {\n        decorated.call(this, data);\n        this.$selection.find('.select2-selection__clear').remove();\n        this.$selection[0].classList.remove('select2-selection--clearable');\n        if (this.$selection.find('.select2-selection__placeholder').length > 0 || data.length === 0) {\n          return;\n        }\n        var selectionId = this.$selection.find('.select2-selection__rendered').attr('id');\n        var removeAll = this.options.get('translations').get('removeAllItems');\n        var $remove = $('<button type=\"button\" class=\"select2-selection__clear\" tabindex=\"-1\">' + '<span aria-hidden=\"true\">&times;</span>' + '</button>');\n        $remove.attr('title', removeAll());\n        $remove.attr('aria-label', removeAll());\n        $remove.attr('aria-describedby', selectionId);\n        Utils.StoreData($remove[0], 'data', data);\n        this.$selection.prepend($remove);\n        this.$selection[0].classList.add('select2-selection--clearable');\n      };\n      return AllowClear;\n    });\n    S2.define('select2/selection/search', ['jquery', '../utils', '../keys'], function ($, Utils, KEYS) {\n      function Search(decorated, $element, options) {\n        decorated.call(this, $element, options);\n      }\n      Search.prototype.render = function (decorated) {\n        var searchLabel = this.options.get('translations').get('search');\n        var $search = $('<span class=\"select2-search select2-search--inline\">' + '<textarea class=\"select2-search__field\"' + ' type=\"search\" tabindex=\"-1\"' + ' autocorrect=\"off\" autocapitalize=\"none\"' + ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" >' + '</textarea>' + '</span>');\n        this.$searchContainer = $search;\n        this.$search = $search.find('textarea');\n        this.$search.prop('autocomplete', this.options.get('autocomplete'));\n        this.$search.attr('aria-label', searchLabel());\n        var $rendered = decorated.call(this);\n        this._transferTabIndex();\n        $rendered.append(this.$searchContainer);\n        return $rendered;\n      };\n      Search.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        var resultsId = container.id + '-results';\n        var selectionId = container.id + '-container';\n        decorated.call(this, container, $container);\n        self.$search.attr('aria-describedby', selectionId);\n        container.on('open', function () {\n          self.$search.attr('aria-controls', resultsId);\n          self.$search.trigger('focus');\n        });\n        container.on('close', function () {\n          self.$search.val('');\n          self.resizeSearch();\n          self.$search.removeAttr('aria-controls');\n          self.$search.removeAttr('aria-activedescendant');\n          self.$search.trigger('focus');\n        });\n        container.on('enable', function () {\n          self.$search.prop('disabled', false);\n          self._transferTabIndex();\n        });\n        container.on('disable', function () {\n          self.$search.prop('disabled', true);\n        });\n        container.on('focus', function (evt) {\n          self.$search.trigger('focus');\n        });\n        container.on('results:focus', function (params) {\n          if (params.data._resultId) {\n            self.$search.attr('aria-activedescendant', params.data._resultId);\n          } else {\n            self.$search.removeAttr('aria-activedescendant');\n          }\n        });\n        this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n          self.trigger('focus', evt);\n        });\n        this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n          self._handleBlur(evt);\n        });\n        this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n          evt.stopPropagation();\n          self.trigger('keypress', evt);\n          self._keyUpPrevented = evt.isDefaultPrevented();\n          var key = evt.which;\n          if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n            var $previousChoice = self.$selection.find('.select2-selection__choice').last();\n            if ($previousChoice.length > 0) {\n              var item = Utils.GetData($previousChoice[0], 'data');\n              self.searchRemoveChoice(item);\n              evt.preventDefault();\n            }\n          }\n        });\n        this.$selection.on('click', '.select2-search--inline', function (evt) {\n          if (self.$search.val()) {\n            evt.stopPropagation();\n          }\n        });\n\n        // Try to detect the IE version should the `documentMode` property that\n        // is stored on the document. This is only implemented in IE and is\n        // slightly cleaner than doing a user agent check.\n        // This property is not available in Edge, but Edge also doesn't have\n        // this bug.\n        var msie = document.documentMode;\n        var disableInputEvents = msie && msie <= 11;\n\n        // Workaround for browsers which do not support the `input` event\n        // This will prevent double-triggering of events for browsers which support\n        // both the `keyup` and `input` events.\n        this.$selection.on('input.searchcheck', '.select2-search--inline', function (evt) {\n          // IE will trigger the `input` event when a placeholder is used on a\n          // search box. To get around this issue, we are forced to ignore all\n          // `input` events in IE and keep using `keyup`.\n          if (disableInputEvents) {\n            self.$selection.off('input.search input.searchcheck');\n            return;\n          }\n\n          // Unbind the duplicated `keyup` event\n          self.$selection.off('keyup.search');\n        });\n        this.$selection.on('keyup.search input.search', '.select2-search--inline', function (evt) {\n          // IE will trigger the `input` event when a placeholder is used on a\n          // search box. To get around this issue, we are forced to ignore all\n          // `input` events in IE and keep using `keyup`.\n          if (disableInputEvents && evt.type === 'input') {\n            self.$selection.off('input.search input.searchcheck');\n            return;\n          }\n          var key = evt.which;\n\n          // We can freely ignore events from modifier keys\n          if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n            return;\n          }\n\n          // Tabbing will be handled during the `keydown` phase\n          if (key == KEYS.TAB) {\n            return;\n          }\n          self.handleSearch(evt);\n        });\n      };\n\n      /**\n       * This method will transfer the tabindex attribute from the rendered\n       * selection to the search box. This allows for the search box to be used as\n       * the primary focus instead of the selection container.\n       *\n       * @private\n       */\n      Search.prototype._transferTabIndex = function (decorated) {\n        this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n        this.$selection.attr('tabindex', '-1');\n      };\n      Search.prototype.createPlaceholder = function (decorated, placeholder) {\n        this.$search.attr('placeholder', placeholder.text);\n      };\n      Search.prototype.update = function (decorated, data) {\n        var searchHadFocus = this.$search[0] == document.activeElement;\n        this.$search.attr('placeholder', '');\n        decorated.call(this, data);\n        this.resizeSearch();\n        if (searchHadFocus) {\n          this.$search.trigger('focus');\n        }\n      };\n      Search.prototype.handleSearch = function () {\n        this.resizeSearch();\n        if (!this._keyUpPrevented) {\n          var input = this.$search.val();\n          this.trigger('query', {\n            term: input\n          });\n        }\n        this._keyUpPrevented = false;\n      };\n      Search.prototype.searchRemoveChoice = function (decorated, item) {\n        this.trigger('unselect', {\n          data: item\n        });\n        this.$search.val(item.text);\n        this.handleSearch();\n      };\n      Search.prototype.resizeSearch = function () {\n        this.$search.css('width', '25px');\n        var width = '100%';\n        if (this.$search.attr('placeholder') === '') {\n          var minimumWidth = this.$search.val().length + 1;\n          width = minimumWidth * 0.75 + 'em';\n        }\n        this.$search.css('width', width);\n      };\n      return Search;\n    });\n    S2.define('select2/selection/selectionCss', ['../utils'], function (Utils) {\n      function SelectionCSS() {}\n      SelectionCSS.prototype.render = function (decorated) {\n        var $selection = decorated.call(this);\n        var selectionCssClass = this.options.get('selectionCssClass') || '';\n        if (selectionCssClass.indexOf(':all:') !== -1) {\n          selectionCssClass = selectionCssClass.replace(':all:', '');\n          Utils.copyNonInternalCssClasses($selection[0], this.$element[0]);\n        }\n        $selection.addClass(selectionCssClass);\n        return $selection;\n      };\n      return SelectionCSS;\n    });\n    S2.define('select2/selection/eventRelay', ['jquery'], function ($) {\n      function EventRelay() {}\n      EventRelay.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        var relayEvents = ['open', 'opening', 'close', 'closing', 'select', 'selecting', 'unselect', 'unselecting', 'clear', 'clearing'];\n        var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting', 'clearing'];\n        decorated.call(this, container, $container);\n        container.on('*', function (name, params) {\n          // Ignore events that should not be relayed\n          if (relayEvents.indexOf(name) === -1) {\n            return;\n          }\n\n          // The parameters should always be an object\n          params = params || {};\n\n          // Generate the jQuery event for the Select2 event\n          var evt = $.Event('select2:' + name, {\n            params: params\n          });\n          self.$element.trigger(evt);\n\n          // Only handle preventable events if it was one\n          if (preventableEvents.indexOf(name) === -1) {\n            return;\n          }\n          params.prevented = evt.isDefaultPrevented();\n        });\n      };\n      return EventRelay;\n    });\n    S2.define('select2/translation', ['jquery', 'require'], function ($, require) {\n      function Translation(dict) {\n        this.dict = dict || {};\n      }\n      Translation.prototype.all = function () {\n        return this.dict;\n      };\n      Translation.prototype.get = function (key) {\n        return this.dict[key];\n      };\n      Translation.prototype.extend = function (translation) {\n        this.dict = $.extend({}, translation.all(), this.dict);\n      };\n\n      // Static functions\n\n      Translation._cache = {};\n      Translation.loadPath = function (path) {\n        if (!(path in Translation._cache)) {\n          var translations = require(path);\n          Translation._cache[path] = translations;\n        }\n        return new Translation(Translation._cache[path]);\n      };\n      return Translation;\n    });\n    S2.define('select2/diacritics', [], function () {\n      var diacritics = {\n        '\\u24B6': 'A',\n        '\\uFF21': 'A',\n        '\\u00C0': 'A',\n        '\\u00C1': 'A',\n        '\\u00C2': 'A',\n        '\\u1EA6': 'A',\n        '\\u1EA4': 'A',\n        '\\u1EAA': 'A',\n        '\\u1EA8': 'A',\n        '\\u00C3': 'A',\n        '\\u0100': 'A',\n        '\\u0102': 'A',\n        '\\u1EB0': 'A',\n        '\\u1EAE': 'A',\n        '\\u1EB4': 'A',\n        '\\u1EB2': 'A',\n        '\\u0226': 'A',\n        '\\u01E0': 'A',\n        '\\u00C4': 'A',\n        '\\u01DE': 'A',\n        '\\u1EA2': 'A',\n        '\\u00C5': 'A',\n        '\\u01FA': 'A',\n        '\\u01CD': 'A',\n        '\\u0200': 'A',\n        '\\u0202': 'A',\n        '\\u1EA0': 'A',\n        '\\u1EAC': 'A',\n        '\\u1EB6': 'A',\n        '\\u1E00': 'A',\n        '\\u0104': 'A',\n        '\\u023A': 'A',\n        '\\u2C6F': 'A',\n        '\\uA732': 'AA',\n        '\\u00C6': 'AE',\n        '\\u01FC': 'AE',\n        '\\u01E2': 'AE',\n        '\\uA734': 'AO',\n        '\\uA736': 'AU',\n        '\\uA738': 'AV',\n        '\\uA73A': 'AV',\n        '\\uA73C': 'AY',\n        '\\u24B7': 'B',\n        '\\uFF22': 'B',\n        '\\u1E02': 'B',\n        '\\u1E04': 'B',\n        '\\u1E06': 'B',\n        '\\u0243': 'B',\n        '\\u0182': 'B',\n        '\\u0181': 'B',\n        '\\u24B8': 'C',\n        '\\uFF23': 'C',\n        '\\u0106': 'C',\n        '\\u0108': 'C',\n        '\\u010A': 'C',\n        '\\u010C': 'C',\n        '\\u00C7': 'C',\n        '\\u1E08': 'C',\n        '\\u0187': 'C',\n        '\\u023B': 'C',\n        '\\uA73E': 'C',\n        '\\u24B9': 'D',\n        '\\uFF24': 'D',\n        '\\u1E0A': 'D',\n        '\\u010E': 'D',\n        '\\u1E0C': 'D',\n        '\\u1E10': 'D',\n        '\\u1E12': 'D',\n        '\\u1E0E': 'D',\n        '\\u0110': 'D',\n        '\\u018B': 'D',\n        '\\u018A': 'D',\n        '\\u0189': 'D',\n        '\\uA779': 'D',\n        '\\u01F1': 'DZ',\n        '\\u01C4': 'DZ',\n        '\\u01F2': 'Dz',\n        '\\u01C5': 'Dz',\n        '\\u24BA': 'E',\n        '\\uFF25': 'E',\n        '\\u00C8': 'E',\n        '\\u00C9': 'E',\n        '\\u00CA': 'E',\n        '\\u1EC0': 'E',\n        '\\u1EBE': 'E',\n        '\\u1EC4': 'E',\n        '\\u1EC2': 'E',\n        '\\u1EBC': 'E',\n        '\\u0112': 'E',\n        '\\u1E14': 'E',\n        '\\u1E16': 'E',\n        '\\u0114': 'E',\n        '\\u0116': 'E',\n        '\\u00CB': 'E',\n        '\\u1EBA': 'E',\n        '\\u011A': 'E',\n        '\\u0204': 'E',\n        '\\u0206': 'E',\n        '\\u1EB8': 'E',\n        '\\u1EC6': 'E',\n        '\\u0228': 'E',\n        '\\u1E1C': 'E',\n        '\\u0118': 'E',\n        '\\u1E18': 'E',\n        '\\u1E1A': 'E',\n        '\\u0190': 'E',\n        '\\u018E': 'E',\n        '\\u24BB': 'F',\n        '\\uFF26': 'F',\n        '\\u1E1E': 'F',\n        '\\u0191': 'F',\n        '\\uA77B': 'F',\n        '\\u24BC': 'G',\n        '\\uFF27': 'G',\n        '\\u01F4': 'G',\n        '\\u011C': 'G',\n        '\\u1E20': 'G',\n        '\\u011E': 'G',\n        '\\u0120': 'G',\n        '\\u01E6': 'G',\n        '\\u0122': 'G',\n        '\\u01E4': 'G',\n        '\\u0193': 'G',\n        '\\uA7A0': 'G',\n        '\\uA77D': 'G',\n        '\\uA77E': 'G',\n        '\\u24BD': 'H',\n        '\\uFF28': 'H',\n        '\\u0124': 'H',\n        '\\u1E22': 'H',\n        '\\u1E26': 'H',\n        '\\u021E': 'H',\n        '\\u1E24': 'H',\n        '\\u1E28': 'H',\n        '\\u1E2A': 'H',\n        '\\u0126': 'H',\n        '\\u2C67': 'H',\n        '\\u2C75': 'H',\n        '\\uA78D': 'H',\n        '\\u24BE': 'I',\n        '\\uFF29': 'I',\n        '\\u00CC': 'I',\n        '\\u00CD': 'I',\n        '\\u00CE': 'I',\n        '\\u0128': 'I',\n        '\\u012A': 'I',\n        '\\u012C': 'I',\n        '\\u0130': 'I',\n        '\\u00CF': 'I',\n        '\\u1E2E': 'I',\n        '\\u1EC8': 'I',\n        '\\u01CF': 'I',\n        '\\u0208': 'I',\n        '\\u020A': 'I',\n        '\\u1ECA': 'I',\n        '\\u012E': 'I',\n        '\\u1E2C': 'I',\n        '\\u0197': 'I',\n        '\\u24BF': 'J',\n        '\\uFF2A': 'J',\n        '\\u0134': 'J',\n        '\\u0248': 'J',\n        '\\u24C0': 'K',\n        '\\uFF2B': 'K',\n        '\\u1E30': 'K',\n        '\\u01E8': 'K',\n        '\\u1E32': 'K',\n        '\\u0136': 'K',\n        '\\u1E34': 'K',\n        '\\u0198': 'K',\n        '\\u2C69': 'K',\n        '\\uA740': 'K',\n        '\\uA742': 'K',\n        '\\uA744': 'K',\n        '\\uA7A2': 'K',\n        '\\u24C1': 'L',\n        '\\uFF2C': 'L',\n        '\\u013F': 'L',\n        '\\u0139': 'L',\n        '\\u013D': 'L',\n        '\\u1E36': 'L',\n        '\\u1E38': 'L',\n        '\\u013B': 'L',\n        '\\u1E3C': 'L',\n        '\\u1E3A': 'L',\n        '\\u0141': 'L',\n        '\\u023D': 'L',\n        '\\u2C62': 'L',\n        '\\u2C60': 'L',\n        '\\uA748': 'L',\n        '\\uA746': 'L',\n        '\\uA780': 'L',\n        '\\u01C7': 'LJ',\n        '\\u01C8': 'Lj',\n        '\\u24C2': 'M',\n        '\\uFF2D': 'M',\n        '\\u1E3E': 'M',\n        '\\u1E40': 'M',\n        '\\u1E42': 'M',\n        '\\u2C6E': 'M',\n        '\\u019C': 'M',\n        '\\u24C3': 'N',\n        '\\uFF2E': 'N',\n        '\\u01F8': 'N',\n        '\\u0143': 'N',\n        '\\u00D1': 'N',\n        '\\u1E44': 'N',\n        '\\u0147': 'N',\n        '\\u1E46': 'N',\n        '\\u0145': 'N',\n        '\\u1E4A': 'N',\n        '\\u1E48': 'N',\n        '\\u0220': 'N',\n        '\\u019D': 'N',\n        '\\uA790': 'N',\n        '\\uA7A4': 'N',\n        '\\u01CA': 'NJ',\n        '\\u01CB': 'Nj',\n        '\\u24C4': 'O',\n        '\\uFF2F': 'O',\n        '\\u00D2': 'O',\n        '\\u00D3': 'O',\n        '\\u00D4': 'O',\n        '\\u1ED2': 'O',\n        '\\u1ED0': 'O',\n        '\\u1ED6': 'O',\n        '\\u1ED4': 'O',\n        '\\u00D5': 'O',\n        '\\u1E4C': 'O',\n        '\\u022C': 'O',\n        '\\u1E4E': 'O',\n        '\\u014C': 'O',\n        '\\u1E50': 'O',\n        '\\u1E52': 'O',\n        '\\u014E': 'O',\n        '\\u022E': 'O',\n        '\\u0230': 'O',\n        '\\u00D6': 'O',\n        '\\u022A': 'O',\n        '\\u1ECE': 'O',\n        '\\u0150': 'O',\n        '\\u01D1': 'O',\n        '\\u020C': 'O',\n        '\\u020E': 'O',\n        '\\u01A0': 'O',\n        '\\u1EDC': 'O',\n        '\\u1EDA': 'O',\n        '\\u1EE0': 'O',\n        '\\u1EDE': 'O',\n        '\\u1EE2': 'O',\n        '\\u1ECC': 'O',\n        '\\u1ED8': 'O',\n        '\\u01EA': 'O',\n        '\\u01EC': 'O',\n        '\\u00D8': 'O',\n        '\\u01FE': 'O',\n        '\\u0186': 'O',\n        '\\u019F': 'O',\n        '\\uA74A': 'O',\n        '\\uA74C': 'O',\n        '\\u0152': 'OE',\n        '\\u01A2': 'OI',\n        '\\uA74E': 'OO',\n        '\\u0222': 'OU',\n        '\\u24C5': 'P',\n        '\\uFF30': 'P',\n        '\\u1E54': 'P',\n        '\\u1E56': 'P',\n        '\\u01A4': 'P',\n        '\\u2C63': 'P',\n        '\\uA750': 'P',\n        '\\uA752': 'P',\n        '\\uA754': 'P',\n        '\\u24C6': 'Q',\n        '\\uFF31': 'Q',\n        '\\uA756': 'Q',\n        '\\uA758': 'Q',\n        '\\u024A': 'Q',\n        '\\u24C7': 'R',\n        '\\uFF32': 'R',\n        '\\u0154': 'R',\n        '\\u1E58': 'R',\n        '\\u0158': 'R',\n        '\\u0210': 'R',\n        '\\u0212': 'R',\n        '\\u1E5A': 'R',\n        '\\u1E5C': 'R',\n        '\\u0156': 'R',\n        '\\u1E5E': 'R',\n        '\\u024C': 'R',\n        '\\u2C64': 'R',\n        '\\uA75A': 'R',\n        '\\uA7A6': 'R',\n        '\\uA782': 'R',\n        '\\u24C8': 'S',\n        '\\uFF33': 'S',\n        '\\u1E9E': 'S',\n        '\\u015A': 'S',\n        '\\u1E64': 'S',\n        '\\u015C': 'S',\n        '\\u1E60': 'S',\n        '\\u0160': 'S',\n        '\\u1E66': 'S',\n        '\\u1E62': 'S',\n        '\\u1E68': 'S',\n        '\\u0218': 'S',\n        '\\u015E': 'S',\n        '\\u2C7E': 'S',\n        '\\uA7A8': 'S',\n        '\\uA784': 'S',\n        '\\u24C9': 'T',\n        '\\uFF34': 'T',\n        '\\u1E6A': 'T',\n        '\\u0164': 'T',\n        '\\u1E6C': 'T',\n        '\\u021A': 'T',\n        '\\u0162': 'T',\n        '\\u1E70': 'T',\n        '\\u1E6E': 'T',\n        '\\u0166': 'T',\n        '\\u01AC': 'T',\n        '\\u01AE': 'T',\n        '\\u023E': 'T',\n        '\\uA786': 'T',\n        '\\uA728': 'TZ',\n        '\\u24CA': 'U',\n        '\\uFF35': 'U',\n        '\\u00D9': 'U',\n        '\\u00DA': 'U',\n        '\\u00DB': 'U',\n        '\\u0168': 'U',\n        '\\u1E78': 'U',\n        '\\u016A': 'U',\n        '\\u1E7A': 'U',\n        '\\u016C': 'U',\n        '\\u00DC': 'U',\n        '\\u01DB': 'U',\n        '\\u01D7': 'U',\n        '\\u01D5': 'U',\n        '\\u01D9': 'U',\n        '\\u1EE6': 'U',\n        '\\u016E': 'U',\n        '\\u0170': 'U',\n        '\\u01D3': 'U',\n        '\\u0214': 'U',\n        '\\u0216': 'U',\n        '\\u01AF': 'U',\n        '\\u1EEA': 'U',\n        '\\u1EE8': 'U',\n        '\\u1EEE': 'U',\n        '\\u1EEC': 'U',\n        '\\u1EF0': 'U',\n        '\\u1EE4': 'U',\n        '\\u1E72': 'U',\n        '\\u0172': 'U',\n        '\\u1E76': 'U',\n        '\\u1E74': 'U',\n        '\\u0244': 'U',\n        '\\u24CB': 'V',\n        '\\uFF36': 'V',\n        '\\u1E7C': 'V',\n        '\\u1E7E': 'V',\n        '\\u01B2': 'V',\n        '\\uA75E': 'V',\n        '\\u0245': 'V',\n        '\\uA760': 'VY',\n        '\\u24CC': 'W',\n        '\\uFF37': 'W',\n        '\\u1E80': 'W',\n        '\\u1E82': 'W',\n        '\\u0174': 'W',\n        '\\u1E86': 'W',\n        '\\u1E84': 'W',\n        '\\u1E88': 'W',\n        '\\u2C72': 'W',\n        '\\u24CD': 'X',\n        '\\uFF38': 'X',\n        '\\u1E8A': 'X',\n        '\\u1E8C': 'X',\n        '\\u24CE': 'Y',\n        '\\uFF39': 'Y',\n        '\\u1EF2': 'Y',\n        '\\u00DD': 'Y',\n        '\\u0176': 'Y',\n        '\\u1EF8': 'Y',\n        '\\u0232': 'Y',\n        '\\u1E8E': 'Y',\n        '\\u0178': 'Y',\n        '\\u1EF6': 'Y',\n        '\\u1EF4': 'Y',\n        '\\u01B3': 'Y',\n        '\\u024E': 'Y',\n        '\\u1EFE': 'Y',\n        '\\u24CF': 'Z',\n        '\\uFF3A': 'Z',\n        '\\u0179': 'Z',\n        '\\u1E90': 'Z',\n        '\\u017B': 'Z',\n        '\\u017D': 'Z',\n        '\\u1E92': 'Z',\n        '\\u1E94': 'Z',\n        '\\u01B5': 'Z',\n        '\\u0224': 'Z',\n        '\\u2C7F': 'Z',\n        '\\u2C6B': 'Z',\n        '\\uA762': 'Z',\n        '\\u24D0': 'a',\n        '\\uFF41': 'a',\n        '\\u1E9A': 'a',\n        '\\u00E0': 'a',\n        '\\u00E1': 'a',\n        '\\u00E2': 'a',\n        '\\u1EA7': 'a',\n        '\\u1EA5': 'a',\n        '\\u1EAB': 'a',\n        '\\u1EA9': 'a',\n        '\\u00E3': 'a',\n        '\\u0101': 'a',\n        '\\u0103': 'a',\n        '\\u1EB1': 'a',\n        '\\u1EAF': 'a',\n        '\\u1EB5': 'a',\n        '\\u1EB3': 'a',\n        '\\u0227': 'a',\n        '\\u01E1': 'a',\n        '\\u00E4': 'a',\n        '\\u01DF': 'a',\n        '\\u1EA3': 'a',\n        '\\u00E5': 'a',\n        '\\u01FB': 'a',\n        '\\u01CE': 'a',\n        '\\u0201': 'a',\n        '\\u0203': 'a',\n        '\\u1EA1': 'a',\n        '\\u1EAD': 'a',\n        '\\u1EB7': 'a',\n        '\\u1E01': 'a',\n        '\\u0105': 'a',\n        '\\u2C65': 'a',\n        '\\u0250': 'a',\n        '\\uA733': 'aa',\n        '\\u00E6': 'ae',\n        '\\u01FD': 'ae',\n        '\\u01E3': 'ae',\n        '\\uA735': 'ao',\n        '\\uA737': 'au',\n        '\\uA739': 'av',\n        '\\uA73B': 'av',\n        '\\uA73D': 'ay',\n        '\\u24D1': 'b',\n        '\\uFF42': 'b',\n        '\\u1E03': 'b',\n        '\\u1E05': 'b',\n        '\\u1E07': 'b',\n        '\\u0180': 'b',\n        '\\u0183': 'b',\n        '\\u0253': 'b',\n        '\\u24D2': 'c',\n        '\\uFF43': 'c',\n        '\\u0107': 'c',\n        '\\u0109': 'c',\n        '\\u010B': 'c',\n        '\\u010D': 'c',\n        '\\u00E7': 'c',\n        '\\u1E09': 'c',\n        '\\u0188': 'c',\n        '\\u023C': 'c',\n        '\\uA73F': 'c',\n        '\\u2184': 'c',\n        '\\u24D3': 'd',\n        '\\uFF44': 'd',\n        '\\u1E0B': 'd',\n        '\\u010F': 'd',\n        '\\u1E0D': 'd',\n        '\\u1E11': 'd',\n        '\\u1E13': 'd',\n        '\\u1E0F': 'd',\n        '\\u0111': 'd',\n        '\\u018C': 'd',\n        '\\u0256': 'd',\n        '\\u0257': 'd',\n        '\\uA77A': 'd',\n        '\\u01F3': 'dz',\n        '\\u01C6': 'dz',\n        '\\u24D4': 'e',\n        '\\uFF45': 'e',\n        '\\u00E8': 'e',\n        '\\u00E9': 'e',\n        '\\u00EA': 'e',\n        '\\u1EC1': 'e',\n        '\\u1EBF': 'e',\n        '\\u1EC5': 'e',\n        '\\u1EC3': 'e',\n        '\\u1EBD': 'e',\n        '\\u0113': 'e',\n        '\\u1E15': 'e',\n        '\\u1E17': 'e',\n        '\\u0115': 'e',\n        '\\u0117': 'e',\n        '\\u00EB': 'e',\n        '\\u1EBB': 'e',\n        '\\u011B': 'e',\n        '\\u0205': 'e',\n        '\\u0207': 'e',\n        '\\u1EB9': 'e',\n        '\\u1EC7': 'e',\n        '\\u0229': 'e',\n        '\\u1E1D': 'e',\n        '\\u0119': 'e',\n        '\\u1E19': 'e',\n        '\\u1E1B': 'e',\n        '\\u0247': 'e',\n        '\\u025B': 'e',\n        '\\u01DD': 'e',\n        '\\u24D5': 'f',\n        '\\uFF46': 'f',\n        '\\u1E1F': 'f',\n        '\\u0192': 'f',\n        '\\uA77C': 'f',\n        '\\u24D6': 'g',\n        '\\uFF47': 'g',\n        '\\u01F5': 'g',\n        '\\u011D': 'g',\n        '\\u1E21': 'g',\n        '\\u011F': 'g',\n        '\\u0121': 'g',\n        '\\u01E7': 'g',\n        '\\u0123': 'g',\n        '\\u01E5': 'g',\n        '\\u0260': 'g',\n        '\\uA7A1': 'g',\n        '\\u1D79': 'g',\n        '\\uA77F': 'g',\n        '\\u24D7': 'h',\n        '\\uFF48': 'h',\n        '\\u0125': 'h',\n        '\\u1E23': 'h',\n        '\\u1E27': 'h',\n        '\\u021F': 'h',\n        '\\u1E25': 'h',\n        '\\u1E29': 'h',\n        '\\u1E2B': 'h',\n        '\\u1E96': 'h',\n        '\\u0127': 'h',\n        '\\u2C68': 'h',\n        '\\u2C76': 'h',\n        '\\u0265': 'h',\n        '\\u0195': 'hv',\n        '\\u24D8': 'i',\n        '\\uFF49': 'i',\n        '\\u00EC': 'i',\n        '\\u00ED': 'i',\n        '\\u00EE': 'i',\n        '\\u0129': 'i',\n        '\\u012B': 'i',\n        '\\u012D': 'i',\n        '\\u00EF': 'i',\n        '\\u1E2F': 'i',\n        '\\u1EC9': 'i',\n        '\\u01D0': 'i',\n        '\\u0209': 'i',\n        '\\u020B': 'i',\n        '\\u1ECB': 'i',\n        '\\u012F': 'i',\n        '\\u1E2D': 'i',\n        '\\u0268': 'i',\n        '\\u0131': 'i',\n        '\\u24D9': 'j',\n        '\\uFF4A': 'j',\n        '\\u0135': 'j',\n        '\\u01F0': 'j',\n        '\\u0249': 'j',\n        '\\u24DA': 'k',\n        '\\uFF4B': 'k',\n        '\\u1E31': 'k',\n        '\\u01E9': 'k',\n        '\\u1E33': 'k',\n        '\\u0137': 'k',\n        '\\u1E35': 'k',\n        '\\u0199': 'k',\n        '\\u2C6A': 'k',\n        '\\uA741': 'k',\n        '\\uA743': 'k',\n        '\\uA745': 'k',\n        '\\uA7A3': 'k',\n        '\\u24DB': 'l',\n        '\\uFF4C': 'l',\n        '\\u0140': 'l',\n        '\\u013A': 'l',\n        '\\u013E': 'l',\n        '\\u1E37': 'l',\n        '\\u1E39': 'l',\n        '\\u013C': 'l',\n        '\\u1E3D': 'l',\n        '\\u1E3B': 'l',\n        '\\u017F': 'l',\n        '\\u0142': 'l',\n        '\\u019A': 'l',\n        '\\u026B': 'l',\n        '\\u2C61': 'l',\n        '\\uA749': 'l',\n        '\\uA781': 'l',\n        '\\uA747': 'l',\n        '\\u01C9': 'lj',\n        '\\u24DC': 'm',\n        '\\uFF4D': 'm',\n        '\\u1E3F': 'm',\n        '\\u1E41': 'm',\n        '\\u1E43': 'm',\n        '\\u0271': 'm',\n        '\\u026F': 'm',\n        '\\u24DD': 'n',\n        '\\uFF4E': 'n',\n        '\\u01F9': 'n',\n        '\\u0144': 'n',\n        '\\u00F1': 'n',\n        '\\u1E45': 'n',\n        '\\u0148': 'n',\n        '\\u1E47': 'n',\n        '\\u0146': 'n',\n        '\\u1E4B': 'n',\n        '\\u1E49': 'n',\n        '\\u019E': 'n',\n        '\\u0272': 'n',\n        '\\u0149': 'n',\n        '\\uA791': 'n',\n        '\\uA7A5': 'n',\n        '\\u01CC': 'nj',\n        '\\u24DE': 'o',\n        '\\uFF4F': 'o',\n        '\\u00F2': 'o',\n        '\\u00F3': 'o',\n        '\\u00F4': 'o',\n        '\\u1ED3': 'o',\n        '\\u1ED1': 'o',\n        '\\u1ED7': 'o',\n        '\\u1ED5': 'o',\n        '\\u00F5': 'o',\n        '\\u1E4D': 'o',\n        '\\u022D': 'o',\n        '\\u1E4F': 'o',\n        '\\u014D': 'o',\n        '\\u1E51': 'o',\n        '\\u1E53': 'o',\n        '\\u014F': 'o',\n        '\\u022F': 'o',\n        '\\u0231': 'o',\n        '\\u00F6': 'o',\n        '\\u022B': 'o',\n        '\\u1ECF': 'o',\n        '\\u0151': 'o',\n        '\\u01D2': 'o',\n        '\\u020D': 'o',\n        '\\u020F': 'o',\n        '\\u01A1': 'o',\n        '\\u1EDD': 'o',\n        '\\u1EDB': 'o',\n        '\\u1EE1': 'o',\n        '\\u1EDF': 'o',\n        '\\u1EE3': 'o',\n        '\\u1ECD': 'o',\n        '\\u1ED9': 'o',\n        '\\u01EB': 'o',\n        '\\u01ED': 'o',\n        '\\u00F8': 'o',\n        '\\u01FF': 'o',\n        '\\u0254': 'o',\n        '\\uA74B': 'o',\n        '\\uA74D': 'o',\n        '\\u0275': 'o',\n        '\\u0153': 'oe',\n        '\\u01A3': 'oi',\n        '\\u0223': 'ou',\n        '\\uA74F': 'oo',\n        '\\u24DF': 'p',\n        '\\uFF50': 'p',\n        '\\u1E55': 'p',\n        '\\u1E57': 'p',\n        '\\u01A5': 'p',\n        '\\u1D7D': 'p',\n        '\\uA751': 'p',\n        '\\uA753': 'p',\n        '\\uA755': 'p',\n        '\\u24E0': 'q',\n        '\\uFF51': 'q',\n        '\\u024B': 'q',\n        '\\uA757': 'q',\n        '\\uA759': 'q',\n        '\\u24E1': 'r',\n        '\\uFF52': 'r',\n        '\\u0155': 'r',\n        '\\u1E59': 'r',\n        '\\u0159': 'r',\n        '\\u0211': 'r',\n        '\\u0213': 'r',\n        '\\u1E5B': 'r',\n        '\\u1E5D': 'r',\n        '\\u0157': 'r',\n        '\\u1E5F': 'r',\n        '\\u024D': 'r',\n        '\\u027D': 'r',\n        '\\uA75B': 'r',\n        '\\uA7A7': 'r',\n        '\\uA783': 'r',\n        '\\u24E2': 's',\n        '\\uFF53': 's',\n        '\\u00DF': 's',\n        '\\u015B': 's',\n        '\\u1E65': 's',\n        '\\u015D': 's',\n        '\\u1E61': 's',\n        '\\u0161': 's',\n        '\\u1E67': 's',\n        '\\u1E63': 's',\n        '\\u1E69': 's',\n        '\\u0219': 's',\n        '\\u015F': 's',\n        '\\u023F': 's',\n        '\\uA7A9': 's',\n        '\\uA785': 's',\n        '\\u1E9B': 's',\n        '\\u24E3': 't',\n        '\\uFF54': 't',\n        '\\u1E6B': 't',\n        '\\u1E97': 't',\n        '\\u0165': 't',\n        '\\u1E6D': 't',\n        '\\u021B': 't',\n        '\\u0163': 't',\n        '\\u1E71': 't',\n        '\\u1E6F': 't',\n        '\\u0167': 't',\n        '\\u01AD': 't',\n        '\\u0288': 't',\n        '\\u2C66': 't',\n        '\\uA787': 't',\n        '\\uA729': 'tz',\n        '\\u24E4': 'u',\n        '\\uFF55': 'u',\n        '\\u00F9': 'u',\n        '\\u00FA': 'u',\n        '\\u00FB': 'u',\n        '\\u0169': 'u',\n        '\\u1E79': 'u',\n        '\\u016B': 'u',\n        '\\u1E7B': 'u',\n        '\\u016D': 'u',\n        '\\u00FC': 'u',\n        '\\u01DC': 'u',\n        '\\u01D8': 'u',\n        '\\u01D6': 'u',\n        '\\u01DA': 'u',\n        '\\u1EE7': 'u',\n        '\\u016F': 'u',\n        '\\u0171': 'u',\n        '\\u01D4': 'u',\n        '\\u0215': 'u',\n        '\\u0217': 'u',\n        '\\u01B0': 'u',\n        '\\u1EEB': 'u',\n        '\\u1EE9': 'u',\n        '\\u1EEF': 'u',\n        '\\u1EED': 'u',\n        '\\u1EF1': 'u',\n        '\\u1EE5': 'u',\n        '\\u1E73': 'u',\n        '\\u0173': 'u',\n        '\\u1E77': 'u',\n        '\\u1E75': 'u',\n        '\\u0289': 'u',\n        '\\u24E5': 'v',\n        '\\uFF56': 'v',\n        '\\u1E7D': 'v',\n        '\\u1E7F': 'v',\n        '\\u028B': 'v',\n        '\\uA75F': 'v',\n        '\\u028C': 'v',\n        '\\uA761': 'vy',\n        '\\u24E6': 'w',\n        '\\uFF57': 'w',\n        '\\u1E81': 'w',\n        '\\u1E83': 'w',\n        '\\u0175': 'w',\n        '\\u1E87': 'w',\n        '\\u1E85': 'w',\n        '\\u1E98': 'w',\n        '\\u1E89': 'w',\n        '\\u2C73': 'w',\n        '\\u24E7': 'x',\n        '\\uFF58': 'x',\n        '\\u1E8B': 'x',\n        '\\u1E8D': 'x',\n        '\\u24E8': 'y',\n        '\\uFF59': 'y',\n        '\\u1EF3': 'y',\n        '\\u00FD': 'y',\n        '\\u0177': 'y',\n        '\\u1EF9': 'y',\n        '\\u0233': 'y',\n        '\\u1E8F': 'y',\n        '\\u00FF': 'y',\n        '\\u1EF7': 'y',\n        '\\u1E99': 'y',\n        '\\u1EF5': 'y',\n        '\\u01B4': 'y',\n        '\\u024F': 'y',\n        '\\u1EFF': 'y',\n        '\\u24E9': 'z',\n        '\\uFF5A': 'z',\n        '\\u017A': 'z',\n        '\\u1E91': 'z',\n        '\\u017C': 'z',\n        '\\u017E': 'z',\n        '\\u1E93': 'z',\n        '\\u1E95': 'z',\n        '\\u01B6': 'z',\n        '\\u0225': 'z',\n        '\\u0240': 'z',\n        '\\u2C6C': 'z',\n        '\\uA763': 'z',\n        '\\u0386': '\\u0391',\n        '\\u0388': '\\u0395',\n        '\\u0389': '\\u0397',\n        '\\u038A': '\\u0399',\n        '\\u03AA': '\\u0399',\n        '\\u038C': '\\u039F',\n        '\\u038E': '\\u03A5',\n        '\\u03AB': '\\u03A5',\n        '\\u038F': '\\u03A9',\n        '\\u03AC': '\\u03B1',\n        '\\u03AD': '\\u03B5',\n        '\\u03AE': '\\u03B7',\n        '\\u03AF': '\\u03B9',\n        '\\u03CA': '\\u03B9',\n        '\\u0390': '\\u03B9',\n        '\\u03CC': '\\u03BF',\n        '\\u03CD': '\\u03C5',\n        '\\u03CB': '\\u03C5',\n        '\\u03B0': '\\u03C5',\n        '\\u03CE': '\\u03C9',\n        '\\u03C2': '\\u03C3',\n        '\\u2019': '\\''\n      };\n      return diacritics;\n    });\n    S2.define('select2/data/base', ['../utils'], function (Utils) {\n      function BaseAdapter($element, options) {\n        BaseAdapter.__super__.constructor.call(this);\n      }\n      Utils.Extend(BaseAdapter, Utils.Observable);\n      BaseAdapter.prototype.current = function (callback) {\n        throw new Error('The `current` method must be defined in child classes.');\n      };\n      BaseAdapter.prototype.query = function (params, callback) {\n        throw new Error('The `query` method must be defined in child classes.');\n      };\n      BaseAdapter.prototype.bind = function (container, $container) {\n        // Can be implemented in subclasses\n      };\n      BaseAdapter.prototype.destroy = function () {\n        // Can be implemented in subclasses\n      };\n      BaseAdapter.prototype.generateResultId = function (container, data) {\n        var id = container.id + '-result-';\n        id += Utils.generateChars(4);\n        if (data.id != null) {\n          id += '-' + data.id.toString();\n        } else {\n          id += '-' + Utils.generateChars(4);\n        }\n        return id;\n      };\n      return BaseAdapter;\n    });\n    S2.define('select2/data/select', ['./base', '../utils', 'jquery'], function (BaseAdapter, Utils, $) {\n      function SelectAdapter($element, options) {\n        this.$element = $element;\n        this.options = options;\n        SelectAdapter.__super__.constructor.call(this);\n      }\n      Utils.Extend(SelectAdapter, BaseAdapter);\n      SelectAdapter.prototype.current = function (callback) {\n        var self = this;\n        var data = Array.prototype.map.call(this.$element[0].querySelectorAll(':checked'), function (selectedElement) {\n          return self.item($(selectedElement));\n        });\n        callback(data);\n      };\n      SelectAdapter.prototype.select = function (data) {\n        var self = this;\n        data.selected = true;\n\n        // If data.element is a DOM node, use it instead\n        if (data.element != null && data.element.tagName.toLowerCase() === 'option') {\n          data.element.selected = true;\n          this.$element.trigger('input').trigger('change');\n          return;\n        }\n        if (this.$element.prop('multiple')) {\n          this.current(function (currentData) {\n            var val = [];\n            data = [data];\n            data.push.apply(data, currentData);\n            for (var d = 0; d < data.length; d++) {\n              var id = data[d].id;\n              if (val.indexOf(id) === -1) {\n                val.push(id);\n              }\n            }\n            self.$element.val(val);\n            self.$element.trigger('input').trigger('change');\n          });\n        } else {\n          var val = data.id;\n          this.$element.val(val);\n          this.$element.trigger('input').trigger('change');\n        }\n      };\n      SelectAdapter.prototype.unselect = function (data) {\n        var self = this;\n        if (!this.$element.prop('multiple')) {\n          return;\n        }\n        data.selected = false;\n        if (data.element != null && data.element.tagName.toLowerCase() === 'option') {\n          data.element.selected = false;\n          this.$element.trigger('input').trigger('change');\n          return;\n        }\n        this.current(function (currentData) {\n          var val = [];\n          for (var d = 0; d < currentData.length; d++) {\n            var id = currentData[d].id;\n            if (id !== data.id && val.indexOf(id) === -1) {\n              val.push(id);\n            }\n          }\n          self.$element.val(val);\n          self.$element.trigger('input').trigger('change');\n        });\n      };\n      SelectAdapter.prototype.bind = function (container, $container) {\n        var self = this;\n        this.container = container;\n        container.on('select', function (params) {\n          self.select(params.data);\n        });\n        container.on('unselect', function (params) {\n          self.unselect(params.data);\n        });\n      };\n      SelectAdapter.prototype.destroy = function () {\n        // Remove anything added to child elements\n        this.$element.find('*').each(function () {\n          // Remove any custom data set by Select2\n          Utils.RemoveData(this);\n        });\n      };\n      SelectAdapter.prototype.query = function (params, callback) {\n        var data = [];\n        var self = this;\n        var $options = this.$element.children();\n        $options.each(function () {\n          if (this.tagName.toLowerCase() !== 'option' && this.tagName.toLowerCase() !== 'optgroup') {\n            return;\n          }\n          var $option = $(this);\n          var option = self.item($option);\n          var matches = self.matches(params, option);\n          if (matches !== null) {\n            data.push(matches);\n          }\n        });\n        callback({\n          results: data\n        });\n      };\n      SelectAdapter.prototype.addOptions = function ($options) {\n        this.$element.append($options);\n      };\n      SelectAdapter.prototype.option = function (data) {\n        var option;\n        if (data.children) {\n          option = document.createElement('optgroup');\n          option.label = data.text;\n        } else {\n          option = document.createElement('option');\n          if (option.textContent !== undefined) {\n            option.textContent = data.text;\n          } else {\n            option.innerText = data.text;\n          }\n        }\n        if (data.id !== undefined) {\n          option.value = data.id;\n        }\n        if (data.disabled) {\n          option.disabled = true;\n        }\n        if (data.selected) {\n          option.selected = true;\n        }\n        if (data.title) {\n          option.title = data.title;\n        }\n        var normalizedData = this._normalizeItem(data);\n        normalizedData.element = option;\n\n        // Override the option's data with the combined data\n        Utils.StoreData(option, 'data', normalizedData);\n        return $(option);\n      };\n      SelectAdapter.prototype.item = function ($option) {\n        var data = {};\n        data = Utils.GetData($option[0], 'data');\n        if (data != null) {\n          return data;\n        }\n        var option = $option[0];\n        if (option.tagName.toLowerCase() === 'option') {\n          data = {\n            id: $option.val(),\n            text: $option.text(),\n            disabled: $option.prop('disabled'),\n            selected: $option.prop('selected'),\n            title: $option.prop('title')\n          };\n        } else if (option.tagName.toLowerCase() === 'optgroup') {\n          data = {\n            text: $option.prop('label'),\n            children: [],\n            title: $option.prop('title')\n          };\n          var $children = $option.children('option');\n          var children = [];\n          for (var c = 0; c < $children.length; c++) {\n            var $child = $($children[c]);\n            var child = this.item($child);\n            children.push(child);\n          }\n          data.children = children;\n        }\n        data = this._normalizeItem(data);\n        data.element = $option[0];\n        Utils.StoreData($option[0], 'data', data);\n        return data;\n      };\n      SelectAdapter.prototype._normalizeItem = function (item) {\n        if (item !== Object(item)) {\n          item = {\n            id: item,\n            text: item\n          };\n        }\n        item = $.extend({}, {\n          text: ''\n        }, item);\n        var defaults = {\n          selected: false,\n          disabled: false\n        };\n        if (item.id != null) {\n          item.id = item.id.toString();\n        }\n        if (item.text != null) {\n          item.text = item.text.toString();\n        }\n        if (item._resultId == null && item.id && this.container != null) {\n          item._resultId = this.generateResultId(this.container, item);\n        }\n        return $.extend({}, defaults, item);\n      };\n      SelectAdapter.prototype.matches = function (params, data) {\n        var matcher = this.options.get('matcher');\n        return matcher(params, data);\n      };\n      return SelectAdapter;\n    });\n    S2.define('select2/data/array', ['./select', '../utils', 'jquery'], function (SelectAdapter, Utils, $) {\n      function ArrayAdapter($element, options) {\n        this._dataToConvert = options.get('data') || [];\n        ArrayAdapter.__super__.constructor.call(this, $element, options);\n      }\n      Utils.Extend(ArrayAdapter, SelectAdapter);\n      ArrayAdapter.prototype.bind = function (container, $container) {\n        ArrayAdapter.__super__.bind.call(this, container, $container);\n        this.addOptions(this.convertToOptions(this._dataToConvert));\n      };\n      ArrayAdapter.prototype.select = function (data) {\n        var $option = this.$element.find('option').filter(function (i, elm) {\n          return elm.value == data.id.toString();\n        });\n        if ($option.length === 0) {\n          $option = this.option(data);\n          this.addOptions($option);\n        }\n        ArrayAdapter.__super__.select.call(this, data);\n      };\n      ArrayAdapter.prototype.convertToOptions = function (data) {\n        var self = this;\n        var $existing = this.$element.find('option');\n        var existingIds = $existing.map(function () {\n          return self.item($(this)).id;\n        }).get();\n        var $options = [];\n\n        // Filter out all items except for the one passed in the argument\n        function onlyItem(item) {\n          return function () {\n            return $(this).val() == item.id;\n          };\n        }\n        for (var d = 0; d < data.length; d++) {\n          var item = this._normalizeItem(data[d]);\n\n          // Skip items which were pre-loaded, only merge the data\n          if (existingIds.indexOf(item.id) >= 0) {\n            var $existingOption = $existing.filter(onlyItem(item));\n            var existingData = this.item($existingOption);\n            var newData = $.extend(true, {}, item, existingData);\n            var $newOption = this.option(newData);\n            $existingOption.replaceWith($newOption);\n            continue;\n          }\n          var $option = this.option(item);\n          if (item.children) {\n            var $children = this.convertToOptions(item.children);\n            $option.append($children);\n          }\n          $options.push($option);\n        }\n        return $options;\n      };\n      return ArrayAdapter;\n    });\n    S2.define('select2/data/ajax', ['./array', '../utils', 'jquery'], function (ArrayAdapter, Utils, $) {\n      function AjaxAdapter($element, options) {\n        this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n        if (this.ajaxOptions.processResults != null) {\n          this.processResults = this.ajaxOptions.processResults;\n        }\n        AjaxAdapter.__super__.constructor.call(this, $element, options);\n      }\n      Utils.Extend(AjaxAdapter, ArrayAdapter);\n      AjaxAdapter.prototype._applyDefaults = function (options) {\n        var defaults = {\n          data: function (params) {\n            return $.extend({}, params, {\n              q: params.term\n            });\n          },\n          transport: function (params, success, failure) {\n            var $request = $.ajax(params);\n            $request.then(success);\n            $request.fail(failure);\n            return $request;\n          }\n        };\n        return $.extend({}, defaults, options, true);\n      };\n      AjaxAdapter.prototype.processResults = function (results) {\n        return results;\n      };\n      AjaxAdapter.prototype.query = function (params, callback) {\n        var matches = [];\n        var self = this;\n        if (this._request != null) {\n          // JSONP requests cannot always be aborted\n          if (typeof this._request.abort === 'function') {\n            this._request.abort();\n          }\n          this._request = null;\n        }\n        var options = $.extend({\n          type: 'GET'\n        }, this.ajaxOptions);\n        if (typeof options.url === 'function') {\n          options.url = options.url.call(this.$element, params);\n        }\n        if (typeof options.data === 'function') {\n          options.data = options.data.call(this.$element, params);\n        }\n        function request() {\n          var $request = options.transport(options, function (data) {\n            var results = self.processResults(data, params);\n            if (self.options.get('debug') && window.console && console.error) {\n              // Check to make sure that the response included a `results` key.\n              if (!results || !results.results || !Array.isArray(results.results)) {\n                console.error('Select2: The AJAX results did not return an array in the ' + '`results` key of the response.');\n              }\n            }\n            callback(results);\n          }, function () {\n            // Attempt to detect if a request was aborted\n            // Only works if the transport exposes a status property\n            if ('status' in $request && ($request.status === 0 || $request.status === '0')) {\n              return;\n            }\n            self.trigger('results:message', {\n              message: 'errorLoading'\n            });\n          });\n          self._request = $request;\n        }\n        if (this.ajaxOptions.delay && params.term != null) {\n          if (this._queryTimeout) {\n            window.clearTimeout(this._queryTimeout);\n          }\n          this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n        } else {\n          request();\n        }\n      };\n      return AjaxAdapter;\n    });\n    S2.define('select2/data/tags', ['jquery'], function ($) {\n      function Tags(decorated, $element, options) {\n        var tags = options.get('tags');\n        var createTag = options.get('createTag');\n        if (createTag !== undefined) {\n          this.createTag = createTag;\n        }\n        var insertTag = options.get('insertTag');\n        if (insertTag !== undefined) {\n          this.insertTag = insertTag;\n        }\n        decorated.call(this, $element, options);\n        if (Array.isArray(tags)) {\n          for (var t = 0; t < tags.length; t++) {\n            var tag = tags[t];\n            var item = this._normalizeItem(tag);\n            var $option = this.option(item);\n            this.$element.append($option);\n          }\n        }\n      }\n      Tags.prototype.query = function (decorated, params, callback) {\n        var self = this;\n        this._removeOldTags();\n        if (params.term == null || params.page != null) {\n          decorated.call(this, params, callback);\n          return;\n        }\n        function wrapper(obj, child) {\n          var data = obj.results;\n          for (var i = 0; i < data.length; i++) {\n            var option = data[i];\n            var checkChildren = option.children != null && !wrapper({\n              results: option.children\n            }, true);\n            var optionText = (option.text || '').toUpperCase();\n            var paramsTerm = (params.term || '').toUpperCase();\n            var checkText = optionText === paramsTerm;\n            if (checkText || checkChildren) {\n              if (child) {\n                return false;\n              }\n              obj.data = data;\n              callback(obj);\n              return;\n            }\n          }\n          if (child) {\n            return true;\n          }\n          var tag = self.createTag(params);\n          if (tag != null) {\n            var $option = self.option(tag);\n            $option.attr('data-select2-tag', 'true');\n            self.addOptions([$option]);\n            self.insertTag(data, tag);\n          }\n          obj.results = data;\n          callback(obj);\n        }\n        decorated.call(this, params, wrapper);\n      };\n      Tags.prototype.createTag = function (decorated, params) {\n        if (params.term == null) {\n          return null;\n        }\n        var term = params.term.trim();\n        if (term === '') {\n          return null;\n        }\n        return {\n          id: term,\n          text: term\n        };\n      };\n      Tags.prototype.insertTag = function (_, data, tag) {\n        data.unshift(tag);\n      };\n      Tags.prototype._removeOldTags = function (_) {\n        var $options = this.$element.find('option[data-select2-tag]');\n        $options.each(function () {\n          if (this.selected) {\n            return;\n          }\n          $(this).remove();\n        });\n      };\n      return Tags;\n    });\n    S2.define('select2/data/tokenizer', ['jquery'], function ($) {\n      function Tokenizer(decorated, $element, options) {\n        var tokenizer = options.get('tokenizer');\n        if (tokenizer !== undefined) {\n          this.tokenizer = tokenizer;\n        }\n        decorated.call(this, $element, options);\n      }\n      Tokenizer.prototype.bind = function (decorated, container, $container) {\n        decorated.call(this, container, $container);\n        this.$search = container.dropdown.$search || container.selection.$search || $container.find('.select2-search__field');\n      };\n      Tokenizer.prototype.query = function (decorated, params, callback) {\n        var self = this;\n        function createAndSelect(data) {\n          // Normalize the data object so we can use it for checks\n          var item = self._normalizeItem(data);\n\n          // Check if the data object already exists as a tag\n          // Select it if it doesn't\n          var $existingOptions = self.$element.find('option').filter(function () {\n            return $(this).val() === item.id;\n          });\n\n          // If an existing option wasn't found for it, create the option\n          if (!$existingOptions.length) {\n            var $option = self.option(item);\n            $option.attr('data-select2-tag', true);\n            self._removeOldTags();\n            self.addOptions([$option]);\n          }\n\n          // Select the item, now that we know there is an option for it\n          select(item);\n        }\n        function select(data) {\n          self.trigger('select', {\n            data: data\n          });\n        }\n        params.term = params.term || '';\n        var tokenData = this.tokenizer(params, this.options, createAndSelect);\n        if (tokenData.term !== params.term) {\n          // Replace the search term if we have the search box\n          if (this.$search.length) {\n            this.$search.val(tokenData.term);\n            this.$search.trigger('focus');\n          }\n          params.term = tokenData.term;\n        }\n        decorated.call(this, params, callback);\n      };\n      Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n        var separators = options.get('tokenSeparators') || [];\n        var term = params.term;\n        var i = 0;\n        var createTag = this.createTag || function (params) {\n          return {\n            id: params.term,\n            text: params.term\n          };\n        };\n        while (i < term.length) {\n          var termChar = term[i];\n          if (separators.indexOf(termChar) === -1) {\n            i++;\n            continue;\n          }\n          var part = term.substr(0, i);\n          var partParams = $.extend({}, params, {\n            term: part\n          });\n          var data = createTag(partParams);\n          if (data == null) {\n            i++;\n            continue;\n          }\n          callback(data);\n\n          // Reset the term to not include the tokenized portion\n          term = term.substr(i + 1) || '';\n          i = 0;\n        }\n        return {\n          term: term\n        };\n      };\n      return Tokenizer;\n    });\n    S2.define('select2/data/minimumInputLength', [], function () {\n      function MinimumInputLength(decorated, $e, options) {\n        this.minimumInputLength = options.get('minimumInputLength');\n        decorated.call(this, $e, options);\n      }\n      MinimumInputLength.prototype.query = function (decorated, params, callback) {\n        params.term = params.term || '';\n        if (params.term.length < this.minimumInputLength) {\n          this.trigger('results:message', {\n            message: 'inputTooShort',\n            args: {\n              minimum: this.minimumInputLength,\n              input: params.term,\n              params: params\n            }\n          });\n          return;\n        }\n        decorated.call(this, params, callback);\n      };\n      return MinimumInputLength;\n    });\n    S2.define('select2/data/maximumInputLength', [], function () {\n      function MaximumInputLength(decorated, $e, options) {\n        this.maximumInputLength = options.get('maximumInputLength');\n        decorated.call(this, $e, options);\n      }\n      MaximumInputLength.prototype.query = function (decorated, params, callback) {\n        params.term = params.term || '';\n        if (this.maximumInputLength > 0 && params.term.length > this.maximumInputLength) {\n          this.trigger('results:message', {\n            message: 'inputTooLong',\n            args: {\n              maximum: this.maximumInputLength,\n              input: params.term,\n              params: params\n            }\n          });\n          return;\n        }\n        decorated.call(this, params, callback);\n      };\n      return MaximumInputLength;\n    });\n    S2.define('select2/data/maximumSelectionLength', [], function () {\n      function MaximumSelectionLength(decorated, $e, options) {\n        this.maximumSelectionLength = options.get('maximumSelectionLength');\n        decorated.call(this, $e, options);\n      }\n      MaximumSelectionLength.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('select', function () {\n          self._checkIfMaximumSelected();\n        });\n      };\n      MaximumSelectionLength.prototype.query = function (decorated, params, callback) {\n        var self = this;\n        this._checkIfMaximumSelected(function () {\n          decorated.call(self, params, callback);\n        });\n      };\n      MaximumSelectionLength.prototype._checkIfMaximumSelected = function (_, successCallback) {\n        var self = this;\n        this.current(function (currentData) {\n          var count = currentData != null ? currentData.length : 0;\n          if (self.maximumSelectionLength > 0 && count >= self.maximumSelectionLength) {\n            self.trigger('results:message', {\n              message: 'maximumSelected',\n              args: {\n                maximum: self.maximumSelectionLength\n              }\n            });\n            return;\n          }\n          if (successCallback) {\n            successCallback();\n          }\n        });\n      };\n      return MaximumSelectionLength;\n    });\n    S2.define('select2/dropdown', ['jquery', './utils'], function ($, Utils) {\n      function Dropdown($element, options) {\n        this.$element = $element;\n        this.options = options;\n        Dropdown.__super__.constructor.call(this);\n      }\n      Utils.Extend(Dropdown, Utils.Observable);\n      Dropdown.prototype.render = function () {\n        var $dropdown = $('<span class=\"select2-dropdown\">' + '<span class=\"select2-results\"></span>' + '</span>');\n        $dropdown.attr('dir', this.options.get('dir'));\n        this.$dropdown = $dropdown;\n        return $dropdown;\n      };\n      Dropdown.prototype.bind = function () {\n        // Should be implemented in subclasses\n      };\n      Dropdown.prototype.position = function ($dropdown, $container) {\n        // Should be implemented in subclasses\n      };\n      Dropdown.prototype.destroy = function () {\n        // Remove the dropdown from the DOM\n        this.$dropdown.remove();\n      };\n      return Dropdown;\n    });\n    S2.define('select2/dropdown/search', ['jquery'], function ($) {\n      function Search() {}\n      Search.prototype.render = function (decorated) {\n        var $rendered = decorated.call(this);\n        var searchLabel = this.options.get('translations').get('search');\n        var $search = $('<span class=\"select2-search select2-search--dropdown\">' + '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' + ' autocorrect=\"off\" autocapitalize=\"none\"' + ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' + '</span>');\n        this.$searchContainer = $search;\n        this.$search = $search.find('input');\n        this.$search.prop('autocomplete', this.options.get('autocomplete'));\n        this.$search.attr('aria-label', searchLabel());\n        $rendered.prepend($search);\n        return $rendered;\n      };\n      Search.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        var resultsId = container.id + '-results';\n        decorated.call(this, container, $container);\n        this.$search.on('keydown', function (evt) {\n          self.trigger('keypress', evt);\n          self._keyUpPrevented = evt.isDefaultPrevented();\n        });\n\n        // Workaround for browsers which do not support the `input` event\n        // This will prevent double-triggering of events for browsers which support\n        // both the `keyup` and `input` events.\n        this.$search.on('input', function (evt) {\n          // Unbind the duplicated `keyup` event\n          $(this).off('keyup');\n        });\n        this.$search.on('keyup input', function (evt) {\n          self.handleSearch(evt);\n        });\n        container.on('open', function () {\n          self.$search.attr('tabindex', 0);\n          self.$search.attr('aria-controls', resultsId);\n          self.$search.trigger('focus');\n          window.setTimeout(function () {\n            self.$search.trigger('focus');\n          }, 0);\n        });\n        container.on('close', function () {\n          self.$search.attr('tabindex', -1);\n          self.$search.removeAttr('aria-controls');\n          self.$search.removeAttr('aria-activedescendant');\n          self.$search.val('');\n          self.$search.trigger('blur');\n        });\n        container.on('focus', function () {\n          if (!container.isOpen()) {\n            self.$search.trigger('focus');\n          }\n        });\n        container.on('results:all', function (params) {\n          if (params.query.term == null || params.query.term === '') {\n            var showSearch = self.showSearch(params);\n            if (showSearch) {\n              self.$searchContainer[0].classList.remove('select2-search--hide');\n            } else {\n              self.$searchContainer[0].classList.add('select2-search--hide');\n            }\n          }\n        });\n        container.on('results:focus', function (params) {\n          if (params.data._resultId) {\n            self.$search.attr('aria-activedescendant', params.data._resultId);\n          } else {\n            self.$search.removeAttr('aria-activedescendant');\n          }\n        });\n      };\n      Search.prototype.handleSearch = function (evt) {\n        if (!this._keyUpPrevented) {\n          var input = this.$search.val();\n          this.trigger('query', {\n            term: input\n          });\n        }\n        this._keyUpPrevented = false;\n      };\n      Search.prototype.showSearch = function (_, params) {\n        return true;\n      };\n      return Search;\n    });\n    S2.define('select2/dropdown/hidePlaceholder', [], function () {\n      function HidePlaceholder(decorated, $element, options, dataAdapter) {\n        this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n        decorated.call(this, $element, options, dataAdapter);\n      }\n      HidePlaceholder.prototype.append = function (decorated, data) {\n        data.results = this.removePlaceholder(data.results);\n        decorated.call(this, data);\n      };\n      HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n        if (typeof placeholder === 'string') {\n          placeholder = {\n            id: '',\n            text: placeholder\n          };\n        }\n        return placeholder;\n      };\n      HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n        var modifiedData = data.slice(0);\n        for (var d = data.length - 1; d >= 0; d--) {\n          var item = data[d];\n          if (this.placeholder.id === item.id) {\n            modifiedData.splice(d, 1);\n          }\n        }\n        return modifiedData;\n      };\n      return HidePlaceholder;\n    });\n    S2.define('select2/dropdown/infiniteScroll', ['jquery'], function ($) {\n      function InfiniteScroll(decorated, $element, options, dataAdapter) {\n        this.lastParams = {};\n        decorated.call(this, $element, options, dataAdapter);\n        this.$loadingMore = this.createLoadingMore();\n        this.loading = false;\n      }\n      InfiniteScroll.prototype.append = function (decorated, data) {\n        this.$loadingMore.remove();\n        this.loading = false;\n        decorated.call(this, data);\n        if (this.showLoadingMore(data)) {\n          this.$results.append(this.$loadingMore);\n          this.loadMoreIfNeeded();\n        }\n      };\n      InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('query', function (params) {\n          self.lastParams = params;\n          self.loading = true;\n        });\n        container.on('query:append', function (params) {\n          self.lastParams = params;\n          self.loading = true;\n        });\n        this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n      };\n      InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n        var isLoadMoreVisible = $.contains(document.documentElement, this.$loadingMore[0]);\n        if (this.loading || !isLoadMoreVisible) {\n          return;\n        }\n        var currentOffset = this.$results.offset().top + this.$results.outerHeight(false);\n        var loadingMoreOffset = this.$loadingMore.offset().top + this.$loadingMore.outerHeight(false);\n        if (currentOffset + 50 >= loadingMoreOffset) {\n          this.loadMore();\n        }\n      };\n      InfiniteScroll.prototype.loadMore = function () {\n        this.loading = true;\n        var params = $.extend({}, {\n          page: 1\n        }, this.lastParams);\n        params.page++;\n        this.trigger('query:append', params);\n      };\n      InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n        return data.pagination && data.pagination.more;\n      };\n      InfiniteScroll.prototype.createLoadingMore = function () {\n        var $option = $('<li ' + 'class=\"select2-results__option select2-results__option--load-more\"' + 'role=\"option\" aria-disabled=\"true\"></li>');\n        var message = this.options.get('translations').get('loadingMore');\n        $option.html(message(this.lastParams));\n        return $option;\n      };\n      return InfiniteScroll;\n    });\n    S2.define('select2/dropdown/attachBody', ['jquery', '../utils'], function ($, Utils) {\n      function AttachBody(decorated, $element, options) {\n        this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n        decorated.call(this, $element, options);\n      }\n      AttachBody.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('open', function () {\n          self._showDropdown();\n          self._attachPositioningHandler(container);\n\n          // Must bind after the results handlers to ensure correct sizing\n          self._bindContainerResultHandlers(container);\n        });\n        container.on('close', function () {\n          self._hideDropdown();\n          self._detachPositioningHandler(container);\n        });\n        this.$dropdownContainer.on('mousedown', function (evt) {\n          evt.stopPropagation();\n        });\n      };\n      AttachBody.prototype.destroy = function (decorated) {\n        decorated.call(this);\n        this.$dropdownContainer.remove();\n      };\n      AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n        // Clone all of the container classes\n        $dropdown.attr('class', $container.attr('class'));\n        $dropdown[0].classList.remove('select2');\n        $dropdown[0].classList.add('select2-container--open');\n        $dropdown.css({\n          position: 'absolute',\n          top: -999999\n        });\n        this.$container = $container;\n      };\n      AttachBody.prototype.render = function (decorated) {\n        var $container = $('<span></span>');\n        var $dropdown = decorated.call(this);\n        $container.append($dropdown);\n        this.$dropdownContainer = $container;\n        return $container;\n      };\n      AttachBody.prototype._hideDropdown = function (decorated) {\n        this.$dropdownContainer.detach();\n      };\n      AttachBody.prototype._bindContainerResultHandlers = function (decorated, container) {\n        // These should only be bound once\n        if (this._containerResultsHandlersBound) {\n          return;\n        }\n        var self = this;\n        container.on('results:all', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n        container.on('results:append', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n        container.on('results:message', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n        container.on('select', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n        container.on('unselect', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n        this._containerResultsHandlersBound = true;\n      };\n      AttachBody.prototype._attachPositioningHandler = function (decorated, container) {\n        var self = this;\n        var scrollEvent = 'scroll.select2.' + container.id;\n        var resizeEvent = 'resize.select2.' + container.id;\n        var orientationEvent = 'orientationchange.select2.' + container.id;\n        var $watchers = this.$container.parents().filter(Utils.hasScroll);\n        $watchers.each(function () {\n          Utils.StoreData(this, 'select2-scroll-position', {\n            x: $(this).scrollLeft(),\n            y: $(this).scrollTop()\n          });\n        });\n        $watchers.on(scrollEvent, function (ev) {\n          var position = Utils.GetData(this, 'select2-scroll-position');\n          $(this).scrollTop(position.y);\n        });\n        $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, function (e) {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n      };\n      AttachBody.prototype._detachPositioningHandler = function (decorated, container) {\n        var scrollEvent = 'scroll.select2.' + container.id;\n        var resizeEvent = 'resize.select2.' + container.id;\n        var orientationEvent = 'orientationchange.select2.' + container.id;\n        var $watchers = this.$container.parents().filter(Utils.hasScroll);\n        $watchers.off(scrollEvent);\n        $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n      };\n      AttachBody.prototype._positionDropdown = function () {\n        var $window = $(window);\n        var isCurrentlyAbove = this.$dropdown[0].classList.contains('select2-dropdown--above');\n        var isCurrentlyBelow = this.$dropdown[0].classList.contains('select2-dropdown--below');\n        var newDirection = null;\n        var offset = this.$container.offset();\n        offset.bottom = offset.top + this.$container.outerHeight(false);\n        var container = {\n          height: this.$container.outerHeight(false)\n        };\n        container.top = offset.top;\n        container.bottom = offset.top + container.height;\n        var dropdown = {\n          height: this.$dropdown.outerHeight(false)\n        };\n        var viewport = {\n          top: $window.scrollTop(),\n          bottom: $window.scrollTop() + $window.height()\n        };\n        var enoughRoomAbove = viewport.top < offset.top - dropdown.height;\n        var enoughRoomBelow = viewport.bottom > offset.bottom + dropdown.height;\n        var css = {\n          left: offset.left,\n          top: container.bottom\n        };\n\n        // Determine what the parent element is to use for calculating the offset\n        var $offsetParent = this.$dropdownParent;\n\n        // For statically positioned elements, we need to get the element\n        // that is determining the offset\n        if ($offsetParent.css('position') === 'static') {\n          $offsetParent = $offsetParent.offsetParent();\n        }\n        var parentOffset = {\n          top: 0,\n          left: 0\n        };\n        if ($.contains(document.body, $offsetParent[0]) || $offsetParent[0].isConnected) {\n          parentOffset = $offsetParent.offset();\n        }\n        css.top -= parentOffset.top;\n        css.left -= parentOffset.left;\n        if (!isCurrentlyAbove && !isCurrentlyBelow) {\n          newDirection = 'below';\n        }\n        if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n          newDirection = 'above';\n        } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n          newDirection = 'below';\n        }\n        if (newDirection == 'above' || isCurrentlyAbove && newDirection !== 'below') {\n          css.top = container.top - parentOffset.top - dropdown.height;\n        }\n        if (newDirection != null) {\n          this.$dropdown[0].classList.remove('select2-dropdown--below');\n          this.$dropdown[0].classList.remove('select2-dropdown--above');\n          this.$dropdown[0].classList.add('select2-dropdown--' + newDirection);\n          this.$container[0].classList.remove('select2-container--below');\n          this.$container[0].classList.remove('select2-container--above');\n          this.$container[0].classList.add('select2-container--' + newDirection);\n        }\n        this.$dropdownContainer.css(css);\n      };\n      AttachBody.prototype._resizeDropdown = function () {\n        var css = {\n          width: this.$container.outerWidth(false) + 'px'\n        };\n        if (this.options.get('dropdownAutoWidth')) {\n          css.minWidth = css.width;\n          css.position = 'relative';\n          css.width = 'auto';\n        }\n        this.$dropdown.css(css);\n      };\n      AttachBody.prototype._showDropdown = function (decorated) {\n        this.$dropdownContainer.appendTo(this.$dropdownParent);\n        this._positionDropdown();\n        this._resizeDropdown();\n      };\n      return AttachBody;\n    });\n    S2.define('select2/dropdown/minimumResultsForSearch', [], function () {\n      function countResults(data) {\n        var count = 0;\n        for (var d = 0; d < data.length; d++) {\n          var item = data[d];\n          if (item.children) {\n            count += countResults(item.children);\n          } else {\n            count++;\n          }\n        }\n        return count;\n      }\n      function MinimumResultsForSearch(decorated, $element, options, dataAdapter) {\n        this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n        if (this.minimumResultsForSearch < 0) {\n          this.minimumResultsForSearch = Infinity;\n        }\n        decorated.call(this, $element, options, dataAdapter);\n      }\n      MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n        if (countResults(params.data.results) < this.minimumResultsForSearch) {\n          return false;\n        }\n        return decorated.call(this, params);\n      };\n      return MinimumResultsForSearch;\n    });\n    S2.define('select2/dropdown/selectOnClose', ['../utils'], function (Utils) {\n      function SelectOnClose() {}\n      SelectOnClose.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('close', function (params) {\n          self._handleSelectOnClose(params);\n        });\n      };\n      SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n        if (params && params.originalSelect2Event != null) {\n          var event = params.originalSelect2Event;\n\n          // Don't select an item if the close event was triggered from a select or\n          // unselect event\n          if (event._type === 'select' || event._type === 'unselect') {\n            return;\n          }\n        }\n        var $highlightedResults = this.getHighlightedResults();\n\n        // Only select highlighted results\n        if ($highlightedResults.length < 1) {\n          return;\n        }\n        var data = Utils.GetData($highlightedResults[0], 'data');\n\n        // Don't re-select already selected resulte\n        if (data.element != null && data.element.selected || data.element == null && data.selected) {\n          return;\n        }\n        this.trigger('select', {\n          data: data\n        });\n      };\n      return SelectOnClose;\n    });\n    S2.define('select2/dropdown/closeOnSelect', [], function () {\n      function CloseOnSelect() {}\n      CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('select', function (evt) {\n          self._selectTriggered(evt);\n        });\n        container.on('unselect', function (evt) {\n          self._selectTriggered(evt);\n        });\n      };\n      CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n        var originalEvent = evt.originalEvent;\n\n        // Don't close if the control key is being held\n        if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n          return;\n        }\n        this.trigger('close', {\n          originalEvent: originalEvent,\n          originalSelect2Event: evt\n        });\n      };\n      return CloseOnSelect;\n    });\n    S2.define('select2/dropdown/dropdownCss', ['../utils'], function (Utils) {\n      function DropdownCSS() {}\n      DropdownCSS.prototype.render = function (decorated) {\n        var $dropdown = decorated.call(this);\n        var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n        if (dropdownCssClass.indexOf(':all:') !== -1) {\n          dropdownCssClass = dropdownCssClass.replace(':all:', '');\n          Utils.copyNonInternalCssClasses($dropdown[0], this.$element[0]);\n        }\n        $dropdown.addClass(dropdownCssClass);\n        return $dropdown;\n      };\n      return DropdownCSS;\n    });\n    S2.define('select2/dropdown/tagsSearchHighlight', ['../utils'], function (Utils) {\n      function TagsSearchHighlight() {}\n      TagsSearchHighlight.prototype.highlightFirstItem = function (decorated) {\n        var $options = this.$results.find('.select2-results__option--selectable' + ':not(.select2-results__option--selected)');\n        if ($options.length > 0) {\n          var $firstOption = $options.first();\n          var data = Utils.GetData($firstOption[0], 'data');\n          var firstElement = data.element;\n          if (firstElement && firstElement.getAttribute) {\n            if (firstElement.getAttribute('data-select2-tag') === 'true') {\n              $firstOption.trigger('mouseenter');\n              return;\n            }\n          }\n        }\n        decorated.call(this);\n      };\n      return TagsSearchHighlight;\n    });\n    S2.define('select2/i18n/en', [], function () {\n      // English\n      return {\n        errorLoading: function () {\n          return 'The results could not be loaded.';\n        },\n        inputTooLong: function (args) {\n          var overChars = args.input.length - args.maximum;\n          var message = 'Please delete ' + overChars + ' character';\n          if (overChars != 1) {\n            message += 's';\n          }\n          return message;\n        },\n        inputTooShort: function (args) {\n          var remainingChars = args.minimum - args.input.length;\n          var message = 'Please enter ' + remainingChars + ' or more characters';\n          return message;\n        },\n        loadingMore: function () {\n          return 'Loading more results…';\n        },\n        maximumSelected: function (args) {\n          var message = 'You can only select ' + args.maximum + ' item';\n          if (args.maximum != 1) {\n            message += 's';\n          }\n          return message;\n        },\n        noResults: function () {\n          return 'No results found';\n        },\n        searching: function () {\n          return 'Searching…';\n        },\n        removeAllItems: function () {\n          return 'Remove all items';\n        },\n        removeItem: function () {\n          return 'Remove item';\n        },\n        search: function () {\n          return 'Search';\n        }\n      };\n    });\n    S2.define('select2/defaults', ['jquery', './results', './selection/single', './selection/multiple', './selection/placeholder', './selection/allowClear', './selection/search', './selection/selectionCss', './selection/eventRelay', './utils', './translation', './diacritics', './data/select', './data/array', './data/ajax', './data/tags', './data/tokenizer', './data/minimumInputLength', './data/maximumInputLength', './data/maximumSelectionLength', './dropdown', './dropdown/search', './dropdown/hidePlaceholder', './dropdown/infiniteScroll', './dropdown/attachBody', './dropdown/minimumResultsForSearch', './dropdown/selectOnClose', './dropdown/closeOnSelect', './dropdown/dropdownCss', './dropdown/tagsSearchHighlight', './i18n/en'], function ($, ResultsList, SingleSelection, MultipleSelection, Placeholder, AllowClear, SelectionSearch, SelectionCSS, EventRelay, Utils, Translation, DIACRITICS, SelectData, ArrayData, AjaxData, Tags, Tokenizer, MinimumInputLength, MaximumInputLength, MaximumSelectionLength, Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, DropdownCSS, TagsSearchHighlight, EnglishTranslation) {\n      function Defaults() {\n        this.reset();\n      }\n      Defaults.prototype.apply = function (options) {\n        options = $.extend(true, {}, this.defaults, options);\n        if (options.dataAdapter == null) {\n          if (options.ajax != null) {\n            options.dataAdapter = AjaxData;\n          } else if (options.data != null) {\n            options.dataAdapter = ArrayData;\n          } else {\n            options.dataAdapter = SelectData;\n          }\n          if (options.minimumInputLength > 0) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, MinimumInputLength);\n          }\n          if (options.maximumInputLength > 0) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, MaximumInputLength);\n          }\n          if (options.maximumSelectionLength > 0) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, MaximumSelectionLength);\n          }\n          if (options.tags) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n          }\n          if (options.tokenSeparators != null || options.tokenizer != null) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, Tokenizer);\n          }\n        }\n        if (options.resultsAdapter == null) {\n          options.resultsAdapter = ResultsList;\n          if (options.ajax != null) {\n            options.resultsAdapter = Utils.Decorate(options.resultsAdapter, InfiniteScroll);\n          }\n          if (options.placeholder != null) {\n            options.resultsAdapter = Utils.Decorate(options.resultsAdapter, HidePlaceholder);\n          }\n          if (options.selectOnClose) {\n            options.resultsAdapter = Utils.Decorate(options.resultsAdapter, SelectOnClose);\n          }\n          if (options.tags) {\n            options.resultsAdapter = Utils.Decorate(options.resultsAdapter, TagsSearchHighlight);\n          }\n        }\n        if (options.dropdownAdapter == null) {\n          if (options.multiple) {\n            options.dropdownAdapter = Dropdown;\n          } else {\n            var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n            options.dropdownAdapter = SearchableDropdown;\n          }\n          if (options.minimumResultsForSearch !== 0) {\n            options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, MinimumResultsForSearch);\n          }\n          if (options.closeOnSelect) {\n            options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, CloseOnSelect);\n          }\n          if (options.dropdownCssClass != null) {\n            options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, DropdownCSS);\n          }\n          options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, AttachBody);\n        }\n        if (options.selectionAdapter == null) {\n          if (options.multiple) {\n            options.selectionAdapter = MultipleSelection;\n          } else {\n            options.selectionAdapter = SingleSelection;\n          }\n\n          // Add the placeholder mixin if a placeholder was specified\n          if (options.placeholder != null) {\n            options.selectionAdapter = Utils.Decorate(options.selectionAdapter, Placeholder);\n          }\n          if (options.allowClear) {\n            options.selectionAdapter = Utils.Decorate(options.selectionAdapter, AllowClear);\n          }\n          if (options.multiple) {\n            options.selectionAdapter = Utils.Decorate(options.selectionAdapter, SelectionSearch);\n          }\n          if (options.selectionCssClass != null) {\n            options.selectionAdapter = Utils.Decorate(options.selectionAdapter, SelectionCSS);\n          }\n          options.selectionAdapter = Utils.Decorate(options.selectionAdapter, EventRelay);\n        }\n\n        // If the defaults were not previously applied from an element, it is\n        // possible for the language option to have not been resolved\n        options.language = this._resolveLanguage(options.language);\n\n        // Always fall back to English since it will always be complete\n        options.language.push('en');\n        var uniqueLanguages = [];\n        for (var l = 0; l < options.language.length; l++) {\n          var language = options.language[l];\n          if (uniqueLanguages.indexOf(language) === -1) {\n            uniqueLanguages.push(language);\n          }\n        }\n        options.language = uniqueLanguages;\n        options.translations = this._processTranslations(options.language, options.debug);\n        return options;\n      };\n      Defaults.prototype.reset = function () {\n        function stripDiacritics(text) {\n          // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n          function match(a) {\n            return DIACRITICS[a] || a;\n          }\n          return text.replace(/[^\\u0000-\\u007E]/g, match);\n        }\n        function matcher(params, data) {\n          // Always return the object if there is nothing to compare\n          if (params.term == null || params.term.trim() === '') {\n            return data;\n          }\n\n          // Do a recursive check for options with children\n          if (data.children && data.children.length > 0) {\n            // Clone the data object if there are children\n            // This is required as we modify the object to remove any non-matches\n            var match = $.extend(true, {}, data);\n\n            // Check each child of the option\n            for (var c = data.children.length - 1; c >= 0; c--) {\n              var child = data.children[c];\n              var matches = matcher(params, child);\n\n              // If there wasn't a match, remove the object in the array\n              if (matches == null) {\n                match.children.splice(c, 1);\n              }\n            }\n\n            // If any children matched, return the new object\n            if (match.children.length > 0) {\n              return match;\n            }\n\n            // If there were no matching children, check just the plain object\n            return matcher(params, match);\n          }\n          var original = stripDiacritics(data.text).toUpperCase();\n          var term = stripDiacritics(params.term).toUpperCase();\n\n          // Check if the text contains the term\n          if (original.indexOf(term) > -1) {\n            return data;\n          }\n\n          // If it doesn't contain the term, don't return anything\n          return null;\n        }\n        this.defaults = {\n          amdLanguageBase: './i18n/',\n          autocomplete: 'off',\n          closeOnSelect: true,\n          debug: false,\n          dropdownAutoWidth: false,\n          escapeMarkup: Utils.escapeMarkup,\n          language: {},\n          matcher: matcher,\n          minimumInputLength: 0,\n          maximumInputLength: 0,\n          maximumSelectionLength: 0,\n          minimumResultsForSearch: 0,\n          selectOnClose: false,\n          scrollAfterSelect: false,\n          sorter: function (data) {\n            return data;\n          },\n          templateResult: function (result) {\n            return result.text;\n          },\n          templateSelection: function (selection) {\n            return selection.text;\n          },\n          theme: 'default',\n          width: 'resolve'\n        };\n      };\n      Defaults.prototype.applyFromElement = function (options, $element) {\n        var optionLanguage = options.language;\n        var defaultLanguage = this.defaults.language;\n        var elementLanguage = $element.prop('lang');\n        var parentLanguage = $element.closest('[lang]').prop('lang');\n        var languages = Array.prototype.concat.call(this._resolveLanguage(elementLanguage), this._resolveLanguage(optionLanguage), this._resolveLanguage(defaultLanguage), this._resolveLanguage(parentLanguage));\n        options.language = languages;\n        return options;\n      };\n      Defaults.prototype._resolveLanguage = function (language) {\n        if (!language) {\n          return [];\n        }\n        if ($.isEmptyObject(language)) {\n          return [];\n        }\n        if ($.isPlainObject(language)) {\n          return [language];\n        }\n        var languages;\n        if (!Array.isArray(language)) {\n          languages = [language];\n        } else {\n          languages = language;\n        }\n        var resolvedLanguages = [];\n        for (var l = 0; l < languages.length; l++) {\n          resolvedLanguages.push(languages[l]);\n          if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n            // Extract the region information if it is included\n            var languageParts = languages[l].split('-');\n            var baseLanguage = languageParts[0];\n            resolvedLanguages.push(baseLanguage);\n          }\n        }\n        return resolvedLanguages;\n      };\n      Defaults.prototype._processTranslations = function (languages, debug) {\n        var translations = new Translation();\n        for (var l = 0; l < languages.length; l++) {\n          var languageData = new Translation();\n          var language = languages[l];\n          if (typeof language === 'string') {\n            try {\n              // Try to load it with the original name\n              languageData = Translation.loadPath(language);\n            } catch (e) {\n              try {\n                // If we couldn't load it, check if it wasn't the full path\n                language = this.defaults.amdLanguageBase + language;\n                languageData = Translation.loadPath(language);\n              } catch (ex) {\n                // The translation could not be loaded at all. Sometimes this is\n                // because of a configuration problem, other times this can be\n                // because of how Select2 helps load all possible translation files\n                if (debug && window.console && console.warn) {\n                  console.warn('Select2: The language file for \"' + language + '\" could ' + 'not be automatically loaded. A fallback will be used instead.');\n                }\n              }\n            }\n          } else if ($.isPlainObject(language)) {\n            languageData = new Translation(language);\n          } else {\n            languageData = language;\n          }\n          translations.extend(languageData);\n        }\n        return translations;\n      };\n      Defaults.prototype.set = function (key, value) {\n        var camelKey = $.camelCase(key);\n        var data = {};\n        data[camelKey] = value;\n        var convertedData = Utils._convertData(data);\n        $.extend(true, this.defaults, convertedData);\n      };\n      var defaults = new Defaults();\n      return defaults;\n    });\n    S2.define('select2/options', ['jquery', './defaults', './utils'], function ($, Defaults, Utils) {\n      function Options(options, $element) {\n        this.options = options;\n        if ($element != null) {\n          this.fromElement($element);\n        }\n        if ($element != null) {\n          this.options = Defaults.applyFromElement(this.options, $element);\n        }\n        this.options = Defaults.apply(this.options);\n      }\n      Options.prototype.fromElement = function ($e) {\n        var excludedData = ['select2'];\n        if (this.options.multiple == null) {\n          this.options.multiple = $e.prop('multiple');\n        }\n        if (this.options.disabled == null) {\n          this.options.disabled = $e.prop('disabled');\n        }\n        if (this.options.autocomplete == null && $e.prop('autocomplete')) {\n          this.options.autocomplete = $e.prop('autocomplete');\n        }\n        if (this.options.dir == null) {\n          if ($e.prop('dir')) {\n            this.options.dir = $e.prop('dir');\n          } else if ($e.closest('[dir]').prop('dir')) {\n            this.options.dir = $e.closest('[dir]').prop('dir');\n          } else {\n            this.options.dir = 'ltr';\n          }\n        }\n        $e.prop('disabled', this.options.disabled);\n        $e.prop('multiple', this.options.multiple);\n        if (Utils.GetData($e[0], 'select2Tags')) {\n          if (this.options.debug && window.console && console.warn) {\n            console.warn('Select2: The `data-select2-tags` attribute has been changed to ' + 'use the `data-data` and `data-tags=\"true\"` attributes and will be ' + 'removed in future versions of Select2.');\n          }\n          Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n          Utils.StoreData($e[0], 'tags', true);\n        }\n        if (Utils.GetData($e[0], 'ajaxUrl')) {\n          if (this.options.debug && window.console && console.warn) {\n            console.warn('Select2: The `data-ajax-url` attribute has been changed to ' + '`data-ajax--url` and support for the old attribute will be removed' + ' in future versions of Select2.');\n          }\n          $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n          Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n        }\n        var dataset = {};\n        function upperCaseLetter(_, letter) {\n          return letter.toUpperCase();\n        }\n\n        // Pre-load all of the attributes which are prefixed with `data-`\n        for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n          var attributeName = $e[0].attributes[attr].name;\n          var prefix = 'data-';\n          if (attributeName.substr(0, prefix.length) == prefix) {\n            // Get the contents of the attribute after `data-`\n            var dataName = attributeName.substring(prefix.length);\n\n            // Get the data contents from the consistent source\n            // This is more than likely the jQuery data helper\n            var dataValue = Utils.GetData($e[0], dataName);\n\n            // camelCase the attribute name to match the spec\n            var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n            // Store the data attribute contents into the dataset since\n            dataset[camelDataName] = dataValue;\n          }\n        }\n\n        // Prefer the element's `dataset` attribute if it exists\n        // jQuery 1.x does not correctly handle data attributes with multiple dashes\n        if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n          dataset = $.extend(true, {}, $e[0].dataset, dataset);\n        }\n\n        // Prefer our internal data cache if it exists\n        var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n        data = Utils._convertData(data);\n        for (var key in data) {\n          if (excludedData.indexOf(key) > -1) {\n            continue;\n          }\n          if ($.isPlainObject(this.options[key])) {\n            $.extend(this.options[key], data[key]);\n          } else {\n            this.options[key] = data[key];\n          }\n        }\n        return this;\n      };\n      Options.prototype.get = function (key) {\n        return this.options[key];\n      };\n      Options.prototype.set = function (key, val) {\n        this.options[key] = val;\n      };\n      return Options;\n    });\n    S2.define('select2/core', ['jquery', './options', './utils', './keys'], function ($, Options, Utils, KEYS) {\n      var Select2 = function ($element, options) {\n        if (Utils.GetData($element[0], 'select2') != null) {\n          Utils.GetData($element[0], 'select2').destroy();\n        }\n        this.$element = $element;\n        this.id = this._generateId($element);\n        options = options || {};\n        this.options = new Options(options, $element);\n        Select2.__super__.constructor.call(this);\n\n        // Set up the tabindex\n\n        var tabindex = $element.attr('tabindex') || 0;\n        Utils.StoreData($element[0], 'old-tabindex', tabindex);\n        $element.attr('tabindex', '-1');\n\n        // Set up containers and adapters\n\n        var DataAdapter = this.options.get('dataAdapter');\n        this.dataAdapter = new DataAdapter($element, this.options);\n        var $container = this.render();\n        this._placeContainer($container);\n        var SelectionAdapter = this.options.get('selectionAdapter');\n        this.selection = new SelectionAdapter($element, this.options);\n        this.$selection = this.selection.render();\n        this.selection.position(this.$selection, $container);\n        var DropdownAdapter = this.options.get('dropdownAdapter');\n        this.dropdown = new DropdownAdapter($element, this.options);\n        this.$dropdown = this.dropdown.render();\n        this.dropdown.position(this.$dropdown, $container);\n        var ResultsAdapter = this.options.get('resultsAdapter');\n        this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n        this.$results = this.results.render();\n        this.results.position(this.$results, this.$dropdown);\n\n        // Bind events\n\n        var self = this;\n\n        // Bind the container to all of the adapters\n        this._bindAdapters();\n\n        // Register any DOM event handlers\n        this._registerDomEvents();\n\n        // Register any internal event handlers\n        this._registerDataEvents();\n        this._registerSelectionEvents();\n        this._registerDropdownEvents();\n        this._registerResultsEvents();\n        this._registerEvents();\n\n        // Set the initial state\n        this.dataAdapter.current(function (initialData) {\n          self.trigger('selection:update', {\n            data: initialData\n          });\n        });\n\n        // Hide the original select\n        $element[0].classList.add('select2-hidden-accessible');\n        $element.attr('aria-hidden', 'true');\n\n        // Synchronize any monitored attributes\n        this._syncAttributes();\n        Utils.StoreData($element[0], 'select2', this);\n\n        // Ensure backwards compatibility with $element.data('select2').\n        $element.data('select2', this);\n      };\n      Utils.Extend(Select2, Utils.Observable);\n      Select2.prototype._generateId = function ($element) {\n        var id = '';\n        if ($element.attr('id') != null) {\n          id = $element.attr('id');\n        } else if ($element.attr('name') != null) {\n          id = $element.attr('name') + '-' + Utils.generateChars(2);\n        } else {\n          id = Utils.generateChars(4);\n        }\n        id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n        id = 'select2-' + id;\n        return id;\n      };\n      Select2.prototype._placeContainer = function ($container) {\n        $container.insertAfter(this.$element);\n        var width = this._resolveWidth(this.$element, this.options.get('width'));\n        if (width != null) {\n          $container.css('width', width);\n        }\n      };\n      Select2.prototype._resolveWidth = function ($element, method) {\n        var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n        if (method == 'resolve') {\n          var styleWidth = this._resolveWidth($element, 'style');\n          if (styleWidth != null) {\n            return styleWidth;\n          }\n          return this._resolveWidth($element, 'element');\n        }\n        if (method == 'element') {\n          var elementWidth = $element.outerWidth(false);\n          if (elementWidth <= 0) {\n            return 'auto';\n          }\n          return elementWidth + 'px';\n        }\n        if (method == 'style') {\n          var style = $element.attr('style');\n          if (typeof style !== 'string') {\n            return null;\n          }\n          var attrs = style.split(';');\n          for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n            var attr = attrs[i].replace(/\\s/g, '');\n            var matches = attr.match(WIDTH);\n            if (matches !== null && matches.length >= 1) {\n              return matches[1];\n            }\n          }\n          return null;\n        }\n        if (method == 'computedstyle') {\n          var computedStyle = window.getComputedStyle($element[0]);\n          return computedStyle.width;\n        }\n        return method;\n      };\n      Select2.prototype._bindAdapters = function () {\n        this.dataAdapter.bind(this, this.$container);\n        this.selection.bind(this, this.$container);\n        this.dropdown.bind(this, this.$container);\n        this.results.bind(this, this.$container);\n      };\n      Select2.prototype._registerDomEvents = function () {\n        var self = this;\n        this.$element.on('change.select2', function () {\n          self.dataAdapter.current(function (data) {\n            self.trigger('selection:update', {\n              data: data\n            });\n          });\n        });\n        this.$element.on('focus.select2', function (evt) {\n          self.trigger('focus', evt);\n        });\n        this._syncA = Utils.bind(this._syncAttributes, this);\n        this._syncS = Utils.bind(this._syncSubtree, this);\n        this._observer = new window.MutationObserver(function (mutations) {\n          self._syncA();\n          self._syncS(mutations);\n        });\n        this._observer.observe(this.$element[0], {\n          attributes: true,\n          childList: true,\n          subtree: false\n        });\n      };\n      Select2.prototype._registerDataEvents = function () {\n        var self = this;\n        this.dataAdapter.on('*', function (name, params) {\n          self.trigger(name, params);\n        });\n      };\n      Select2.prototype._registerSelectionEvents = function () {\n        var self = this;\n        var nonRelayEvents = ['toggle', 'focus'];\n        this.selection.on('toggle', function () {\n          self.toggleDropdown();\n        });\n        this.selection.on('focus', function (params) {\n          self.focus(params);\n        });\n        this.selection.on('*', function (name, params) {\n          if (nonRelayEvents.indexOf(name) !== -1) {\n            return;\n          }\n          self.trigger(name, params);\n        });\n      };\n      Select2.prototype._registerDropdownEvents = function () {\n        var self = this;\n        this.dropdown.on('*', function (name, params) {\n          self.trigger(name, params);\n        });\n      };\n      Select2.prototype._registerResultsEvents = function () {\n        var self = this;\n        this.results.on('*', function (name, params) {\n          self.trigger(name, params);\n        });\n      };\n      Select2.prototype._registerEvents = function () {\n        var self = this;\n        this.on('open', function () {\n          self.$container[0].classList.add('select2-container--open');\n        });\n        this.on('close', function () {\n          self.$container[0].classList.remove('select2-container--open');\n        });\n        this.on('enable', function () {\n          self.$container[0].classList.remove('select2-container--disabled');\n        });\n        this.on('disable', function () {\n          self.$container[0].classList.add('select2-container--disabled');\n        });\n        this.on('blur', function () {\n          self.$container[0].classList.remove('select2-container--focus');\n        });\n        this.on('query', function (params) {\n          if (!self.isOpen()) {\n            self.trigger('open', {});\n          }\n          this.dataAdapter.query(params, function (data) {\n            self.trigger('results:all', {\n              data: data,\n              query: params\n            });\n          });\n        });\n        this.on('query:append', function (params) {\n          this.dataAdapter.query(params, function (data) {\n            self.trigger('results:append', {\n              data: data,\n              query: params\n            });\n          });\n        });\n        this.on('keypress', function (evt) {\n          var key = evt.which;\n          if (self.isOpen()) {\n            if (key === KEYS.ESC || key === KEYS.UP && evt.altKey) {\n              self.close(evt);\n              evt.preventDefault();\n            } else if (key === KEYS.ENTER || key === KEYS.TAB) {\n              self.trigger('results:select', {});\n              evt.preventDefault();\n            } else if (key === KEYS.SPACE && evt.ctrlKey) {\n              self.trigger('results:toggle', {});\n              evt.preventDefault();\n            } else if (key === KEYS.UP) {\n              self.trigger('results:previous', {});\n              evt.preventDefault();\n            } else if (key === KEYS.DOWN) {\n              self.trigger('results:next', {});\n              evt.preventDefault();\n            }\n          } else {\n            if (key === KEYS.ENTER || key === KEYS.SPACE || key === KEYS.DOWN && evt.altKey) {\n              self.open();\n              evt.preventDefault();\n            }\n          }\n        });\n      };\n      Select2.prototype._syncAttributes = function () {\n        this.options.set('disabled', this.$element.prop('disabled'));\n        if (this.isDisabled()) {\n          if (this.isOpen()) {\n            this.close();\n          }\n          this.trigger('disable', {});\n        } else {\n          this.trigger('enable', {});\n        }\n      };\n      Select2.prototype._isChangeMutation = function (mutations) {\n        var self = this;\n        if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n          for (var n = 0; n < mutations.addedNodes.length; n++) {\n            var node = mutations.addedNodes[n];\n            if (node.selected) {\n              return true;\n            }\n          }\n        } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n          return true;\n        } else if (Array.isArray(mutations)) {\n          return mutations.some(function (mutation) {\n            return self._isChangeMutation(mutation);\n          });\n        }\n        return false;\n      };\n      Select2.prototype._syncSubtree = function (mutations) {\n        var changed = this._isChangeMutation(mutations);\n        var self = this;\n\n        // Only re-pull the data if we think there is a change\n        if (changed) {\n          this.dataAdapter.current(function (currentData) {\n            self.trigger('selection:update', {\n              data: currentData\n            });\n          });\n        }\n      };\n\n      /**\n       * Override the trigger method to automatically trigger pre-events when\n       * there are events that can be prevented.\n       */\n      Select2.prototype.trigger = function (name, args) {\n        var actualTrigger = Select2.__super__.trigger;\n        var preTriggerMap = {\n          'open': 'opening',\n          'close': 'closing',\n          'select': 'selecting',\n          'unselect': 'unselecting',\n          'clear': 'clearing'\n        };\n        if (args === undefined) {\n          args = {};\n        }\n        if (name in preTriggerMap) {\n          var preTriggerName = preTriggerMap[name];\n          var preTriggerArgs = {\n            prevented: false,\n            name: name,\n            args: args\n          };\n          actualTrigger.call(this, preTriggerName, preTriggerArgs);\n          if (preTriggerArgs.prevented) {\n            args.prevented = true;\n            return;\n          }\n        }\n        actualTrigger.call(this, name, args);\n      };\n      Select2.prototype.toggleDropdown = function () {\n        if (this.isDisabled()) {\n          return;\n        }\n        if (this.isOpen()) {\n          this.close();\n        } else {\n          this.open();\n        }\n      };\n      Select2.prototype.open = function () {\n        if (this.isOpen()) {\n          return;\n        }\n        if (this.isDisabled()) {\n          return;\n        }\n        this.trigger('query', {});\n      };\n      Select2.prototype.close = function (evt) {\n        if (!this.isOpen()) {\n          return;\n        }\n        this.trigger('close', {\n          originalEvent: evt\n        });\n      };\n\n      /**\n       * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n       * object.\n       *\n       * @return {true} if the instance is not disabled.\n       * @return {false} if the instance is disabled.\n       */\n      Select2.prototype.isEnabled = function () {\n        return !this.isDisabled();\n      };\n\n      /**\n       * Helper method to abstract the \"disabled\" state of this object.\n       *\n       * @return {true} if the disabled option is true.\n       * @return {false} if the disabled option is false.\n       */\n      Select2.prototype.isDisabled = function () {\n        return this.options.get('disabled');\n      };\n      Select2.prototype.isOpen = function () {\n        return this.$container[0].classList.contains('select2-container--open');\n      };\n      Select2.prototype.hasFocus = function () {\n        return this.$container[0].classList.contains('select2-container--focus');\n      };\n      Select2.prototype.focus = function (data) {\n        // No need to re-trigger focus events if we are already focused\n        if (this.hasFocus()) {\n          return;\n        }\n        this.$container[0].classList.add('select2-container--focus');\n        this.trigger('focus', {});\n      };\n      Select2.prototype.enable = function (args) {\n        if (this.options.get('debug') && window.console && console.warn) {\n          console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will' + ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' + ' instead.');\n        }\n        if (args == null || args.length === 0) {\n          args = [true];\n        }\n        var disabled = !args[0];\n        this.$element.prop('disabled', disabled);\n      };\n      Select2.prototype.data = function () {\n        if (this.options.get('debug') && arguments.length > 0 && window.console && console.warn) {\n          console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You ' + 'should consider setting the value instead using `$element.val()`.');\n        }\n        var data = [];\n        this.dataAdapter.current(function (currentData) {\n          data = currentData;\n        });\n        return data;\n      };\n      Select2.prototype.val = function (args) {\n        if (this.options.get('debug') && window.console && console.warn) {\n          console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be' + ' removed in later Select2 versions. Use $element.val() instead.');\n        }\n        if (args == null || args.length === 0) {\n          return this.$element.val();\n        }\n        var newVal = args[0];\n        if (Array.isArray(newVal)) {\n          newVal = newVal.map(function (obj) {\n            return obj.toString();\n          });\n        }\n        this.$element.val(newVal).trigger('input').trigger('change');\n      };\n      Select2.prototype.destroy = function () {\n        Utils.RemoveData(this.$container[0]);\n        this.$container.remove();\n        this._observer.disconnect();\n        this._observer = null;\n        this._syncA = null;\n        this._syncS = null;\n        this.$element.off('.select2');\n        this.$element.attr('tabindex', Utils.GetData(this.$element[0], 'old-tabindex'));\n        this.$element[0].classList.remove('select2-hidden-accessible');\n        this.$element.attr('aria-hidden', 'false');\n        Utils.RemoveData(this.$element[0]);\n        this.$element.removeData('select2');\n        this.dataAdapter.destroy();\n        this.selection.destroy();\n        this.dropdown.destroy();\n        this.results.destroy();\n        this.dataAdapter = null;\n        this.selection = null;\n        this.dropdown = null;\n        this.results = null;\n      };\n      Select2.prototype.render = function () {\n        var $container = $('<span class=\"select2 select2-container\">' + '<span class=\"selection\"></span>' + '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' + '</span>');\n        $container.attr('dir', this.options.get('dir'));\n        this.$container = $container;\n        this.$container[0].classList.add('select2-container--' + this.options.get('theme'));\n        Utils.StoreData($container[0], 'element', this.$element);\n        return $container;\n      };\n      return Select2;\n    });\n    S2.define('jquery-mousewheel', ['jquery'], function ($) {\n      // Used to shim jQuery.mousewheel for non-full builds.\n      return $;\n    });\n    S2.define('jquery.select2', ['jquery', 'jquery-mousewheel', './select2/core', './select2/defaults', './select2/utils'], function ($, _, Select2, Defaults, Utils) {\n      if ($.fn.select2 == null) {\n        // All methods that should return the element\n        var thisMethods = ['open', 'close', 'destroy'];\n        $.fn.select2 = function (options) {\n          options = options || {};\n          if (typeof options === 'object') {\n            this.each(function () {\n              var instanceOptions = $.extend(true, {}, options);\n              var instance = new Select2($(this), instanceOptions);\n            });\n            return this;\n          } else if (typeof options === 'string') {\n            var ret;\n            var args = Array.prototype.slice.call(arguments, 1);\n            this.each(function () {\n              var instance = Utils.GetData(this, 'select2');\n              if (instance == null && window.console && console.error) {\n                console.error('The select2(\\'' + options + '\\') method was called on an ' + 'element that is not using Select2.');\n              }\n              ret = instance[options].apply(instance, args);\n            });\n\n            // Check if we should be returning `this`\n            if (thisMethods.indexOf(options) > -1) {\n              return this;\n            }\n            return ret;\n          } else {\n            throw new Error('Invalid arguments for Select2: ' + options);\n          }\n        };\n      }\n      if ($.fn.select2.defaults == null) {\n        $.fn.select2.defaults = Defaults;\n      }\n      return Select2;\n    });\n\n    // Return the AMD loader configuration so it can be used outside of this file\n    return {\n      define: S2.define,\n      require: S2.require\n    };\n  }();\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n});","!function (t, e) {\n  \"object\" == typeof exports && \"object\" == typeof module ? module.exports = e() : \"function\" == typeof define && define.amd ? define([], e) : \"object\" == typeof exports ? exports.swal = e() : t.swal = e();\n}(this, function () {\n  return function (t) {\n    function e(o) {\n      if (n[o]) return n[o].exports;\n      var r = n[o] = {\n        i: o,\n        l: !1,\n        exports: {}\n      };\n      return t[o].call(r.exports, r, r.exports, e), r.l = !0, r.exports;\n    }\n    var n = {};\n    return e.m = t, e.c = n, e.d = function (t, n, o) {\n      e.o(t, n) || Object.defineProperty(t, n, {\n        configurable: !1,\n        enumerable: !0,\n        get: o\n      });\n    }, e.n = function (t) {\n      var n = t && t.__esModule ? function () {\n        return t.default;\n      } : function () {\n        return t;\n      };\n      return e.d(n, \"a\", n), n;\n    }, e.o = function (t, e) {\n      return Object.prototype.hasOwnProperty.call(t, e);\n    }, e.p = \"\", e(e.s = 8);\n  }([function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = \"swal-button\";\n    e.CLASS_NAMES = {\n      MODAL: \"swal-modal\",\n      OVERLAY: \"swal-overlay\",\n      SHOW_MODAL: \"swal-overlay--show-modal\",\n      MODAL_TITLE: \"swal-title\",\n      MODAL_TEXT: \"swal-text\",\n      ICON: \"swal-icon\",\n      ICON_CUSTOM: \"swal-icon--custom\",\n      CONTENT: \"swal-content\",\n      FOOTER: \"swal-footer\",\n      BUTTON_CONTAINER: \"swal-button-container\",\n      BUTTON: o,\n      CONFIRM_BUTTON: o + \"--confirm\",\n      CANCEL_BUTTON: o + \"--cancel\",\n      DANGER_BUTTON: o + \"--danger\",\n      BUTTON_LOADING: o + \"--loading\",\n      BUTTON_LOADER: o + \"__loader\"\n    }, e.default = e.CLASS_NAMES;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    }), e.getNode = function (t) {\n      var e = \".\" + t;\n      return document.querySelector(e);\n    }, e.stringToNode = function (t) {\n      var e = document.createElement(\"div\");\n      return e.innerHTML = t.trim(), e.firstChild;\n    }, e.insertAfter = function (t, e) {\n      var n = e.nextSibling;\n      e.parentNode.insertBefore(t, n);\n    }, e.removeNode = function (t) {\n      t.parentElement.removeChild(t);\n    }, e.throwErr = function (t) {\n      throw t = t.replace(/ +(?= )/g, \"\"), \"SweetAlert: \" + (t = t.trim());\n    }, e.isPlainObject = function (t) {\n      if (\"[object Object]\" !== Object.prototype.toString.call(t)) return !1;\n      var e = Object.getPrototypeOf(t);\n      return null === e || e === Object.prototype;\n    }, e.ordinalSuffixOf = function (t) {\n      var e = t % 10,\n        n = t % 100;\n      return 1 === e && 11 !== n ? t + \"st\" : 2 === e && 12 !== n ? t + \"nd\" : 3 === e && 13 !== n ? t + \"rd\" : t + \"th\";\n    };\n  }, function (t, e, n) {\n    \"use strict\";\n\n    function o(t) {\n      for (var n in t) e.hasOwnProperty(n) || (e[n] = t[n]);\n    }\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    }), o(n(25));\n    var r = n(26);\n    e.overlayMarkup = r.default, o(n(27)), o(n(28)), o(n(29));\n    var i = n(0),\n      a = i.default.MODAL_TITLE,\n      s = i.default.MODAL_TEXT,\n      c = i.default.ICON,\n      l = i.default.FOOTER;\n    e.iconMarkup = '\\n  <div class=\"' + c + '\"></div>', e.titleMarkup = '\\n  <div class=\"' + a + '\"></div>\\n', e.textMarkup = '\\n  <div class=\"' + s + '\"></div>', e.footerMarkup = '\\n  <div class=\"' + l + '\"></div>\\n';\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(1);\n    e.CONFIRM_KEY = \"confirm\", e.CANCEL_KEY = \"cancel\";\n    var r = {\n        visible: !0,\n        text: null,\n        value: null,\n        className: \"\",\n        closeModal: !0\n      },\n      i = Object.assign({}, r, {\n        visible: !1,\n        text: \"Cancel\",\n        value: null\n      }),\n      a = Object.assign({}, r, {\n        text: \"OK\",\n        value: !0\n      });\n    e.defaultButtonList = {\n      cancel: i,\n      confirm: a\n    };\n    var s = function (t) {\n        switch (t) {\n          case e.CONFIRM_KEY:\n            return a;\n          case e.CANCEL_KEY:\n            return i;\n          default:\n            var n = t.charAt(0).toUpperCase() + t.slice(1);\n            return Object.assign({}, r, {\n              text: n,\n              value: t\n            });\n        }\n      },\n      c = function (t, e) {\n        var n = s(t);\n        return !0 === e ? Object.assign({}, n, {\n          visible: !0\n        }) : \"string\" == typeof e ? Object.assign({}, n, {\n          visible: !0,\n          text: e\n        }) : o.isPlainObject(e) ? Object.assign({\n          visible: !0\n        }, n, e) : Object.assign({}, n, {\n          visible: !1\n        });\n      },\n      l = function (t) {\n        for (var e = {}, n = 0, o = Object.keys(t); n < o.length; n++) {\n          var r = o[n],\n            a = t[r],\n            s = c(r, a);\n          e[r] = s;\n        }\n        return e.cancel || (e.cancel = i), e;\n      },\n      u = function (t) {\n        var n = {};\n        switch (t.length) {\n          case 1:\n            n[e.CANCEL_KEY] = Object.assign({}, i, {\n              visible: !1\n            });\n            break;\n          case 2:\n            n[e.CANCEL_KEY] = c(e.CANCEL_KEY, t[0]), n[e.CONFIRM_KEY] = c(e.CONFIRM_KEY, t[1]);\n            break;\n          default:\n            o.throwErr(\"Invalid number of 'buttons' in array (\" + t.length + \").\\n      If you want more than 2 buttons, you need to use an object!\");\n        }\n        return n;\n      };\n    e.getButtonListOpts = function (t) {\n      var n = e.defaultButtonList;\n      return \"string\" == typeof t ? n[e.CONFIRM_KEY] = c(e.CONFIRM_KEY, t) : Array.isArray(t) ? n = u(t) : o.isPlainObject(t) ? n = l(t) : !0 === t ? n = u([!0, !0]) : !1 === t ? n = u([!1, !1]) : void 0 === t && (n = e.defaultButtonList), n;\n    };\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(1),\n      r = n(2),\n      i = n(0),\n      a = i.default.MODAL,\n      s = i.default.OVERLAY,\n      c = n(30),\n      l = n(31),\n      u = n(32),\n      f = n(33);\n    e.injectElIntoModal = function (t) {\n      var e = o.getNode(a),\n        n = o.stringToNode(t);\n      return e.appendChild(n), n;\n    };\n    var d = function (t) {\n        t.className = a, t.textContent = \"\";\n      },\n      p = function (t, e) {\n        d(t);\n        var n = e.className;\n        n && t.classList.add(n);\n      };\n    e.initModalContent = function (t) {\n      var e = o.getNode(a);\n      p(e, t), c.default(t.icon), l.initTitle(t.title), l.initText(t.text), f.default(t.content), u.default(t.buttons, t.dangerMode);\n    };\n    var m = function () {\n      var t = o.getNode(s),\n        e = o.stringToNode(r.modalMarkup);\n      t.appendChild(e);\n    };\n    e.default = m;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(3),\n      r = {\n        isOpen: !1,\n        promise: null,\n        actions: {},\n        timer: null\n      },\n      i = Object.assign({}, r);\n    e.resetState = function () {\n      i = Object.assign({}, r);\n    }, e.setActionValue = function (t) {\n      if (\"string\" == typeof t) return a(o.CONFIRM_KEY, t);\n      for (var e in t) a(e, t[e]);\n    };\n    var a = function (t, e) {\n      i.actions[t] || (i.actions[t] = {}), Object.assign(i.actions[t], {\n        value: e\n      });\n    };\n    e.setActionOptionsFor = function (t, e) {\n      var n = (void 0 === e ? {} : e).closeModal,\n        o = void 0 === n || n;\n      Object.assign(i.actions[t], {\n        closeModal: o\n      });\n    }, e.default = i;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(1),\n      r = n(3),\n      i = n(0),\n      a = i.default.OVERLAY,\n      s = i.default.SHOW_MODAL,\n      c = i.default.BUTTON,\n      l = i.default.BUTTON_LOADING,\n      u = n(5);\n    e.openModal = function () {\n      o.getNode(a).classList.add(s), u.default.isOpen = !0;\n    };\n    var f = function () {\n      o.getNode(a).classList.remove(s), u.default.isOpen = !1;\n    };\n    e.onAction = function (t) {\n      void 0 === t && (t = r.CANCEL_KEY);\n      var e = u.default.actions[t],\n        n = e.value;\n      if (!1 === e.closeModal) {\n        var i = c + \"--\" + t;\n        o.getNode(i).classList.add(l);\n      } else f();\n      u.default.promise.resolve(n);\n    }, e.getState = function () {\n      var t = Object.assign({}, u.default);\n      return delete t.promise, delete t.timer, t;\n    }, e.stopLoading = function () {\n      for (var t = document.querySelectorAll(\".\" + c), e = 0; e < t.length; e++) {\n        t[e].classList.remove(l);\n      }\n    };\n  }, function (t, e) {\n    var n;\n    n = function () {\n      return this;\n    }();\n    try {\n      n = n || Function(\"return this\")() || (0, eval)(\"this\");\n    } catch (t) {\n      \"object\" == typeof window && (n = window);\n    }\n    t.exports = n;\n  }, function (t, e, n) {\n    (function (e) {\n      t.exports = e.sweetAlert = n(9);\n    }).call(e, n(7));\n  }, function (t, e, n) {\n    (function (e) {\n      t.exports = e.swal = n(10);\n    }).call(e, n(7));\n  }, function (t, e, n) {\n    \"undefined\" != typeof window && n(11), n(16);\n    var o = n(23).default;\n    t.exports = o;\n  }, function (t, e, n) {\n    var o = n(12);\n    \"string\" == typeof o && (o = [[t.i, o, \"\"]]);\n    var r = {\n      insertAt: \"top\"\n    };\n    r.transform = void 0;\n    n(14)(o, r);\n    o.locals && (t.exports = o.locals);\n  }, function (t, e, n) {\n    e = t.exports = n(13)(void 0), e.push([t.i, '.swal-icon--error{border-color:#f27474;-webkit-animation:animateErrorIcon .5s;animation:animateErrorIcon .5s}.swal-icon--error__x-mark{position:relative;display:block;-webkit-animation:animateXMark .5s;animation:animateXMark .5s}.swal-icon--error__line{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal-icon--error__line--left{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal-icon--error__line--right{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}@-webkit-keyframes animateErrorIcon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}to{-webkit-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}}@keyframes animateErrorIcon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}to{-webkit-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}}@-webkit-keyframes animateXMark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}to{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animateXMark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}to{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.swal-icon--warning{border-color:#f8bb86;-webkit-animation:pulseWarning .75s infinite alternate;animation:pulseWarning .75s infinite alternate}.swal-icon--warning__body{width:5px;height:47px;top:10px;border-radius:2px;margin-left:-2px}.swal-icon--warning__body,.swal-icon--warning__dot{position:absolute;left:50%;background-color:#f8bb86}.swal-icon--warning__dot{width:7px;height:7px;border-radius:50%;margin-left:-4px;bottom:-11px}@-webkit-keyframes pulseWarning{0%{border-color:#f8d486}to{border-color:#f8bb86}}@keyframes pulseWarning{0%{border-color:#f8d486}to{border-color:#f8bb86}}.swal-icon--success{border-color:#a5dc86}.swal-icon--success:after,.swal-icon--success:before{content:\"\";border-radius:50%;position:absolute;width:60px;height:120px;background:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal-icon--success:before{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal-icon--success:after{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px;-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}.swal-icon--success__ring{width:80px;height:80px;border:4px solid hsla(98,55%,69%,.2);border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal-icon--success__hide-corners{width:5px;height:90px;background-color:#fff;padding:1px;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal-icon--success__line{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal-icon--success__line--tip{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-animation:animateSuccessTip .75s;animation:animateSuccessTip .75s}.swal-icon--success__line--long{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-animation:animateSuccessLong .75s;animation:animateSuccessLong .75s}@-webkit-keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}to{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}to{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@-webkit-keyframes animateSuccessTip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}to{width:25px;left:14px;top:45px}}@keyframes animateSuccessTip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}to{width:25px;left:14px;top:45px}}@-webkit-keyframes animateSuccessLong{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}to{width:47px;right:8px;top:38px}}@keyframes animateSuccessLong{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}to{width:47px;right:8px;top:38px}}.swal-icon--info{border-color:#c9dae1}.swal-icon--info:before{width:5px;height:29px;bottom:17px;border-radius:2px;margin-left:-2px}.swal-icon--info:after,.swal-icon--info:before{content:\"\";position:absolute;left:50%;background-color:#c9dae1}.swal-icon--info:after{width:7px;height:7px;border-radius:50%;margin-left:-3px;top:19px}.swal-icon{width:80px;height:80px;border-width:4px;border-style:solid;border-radius:50%;padding:0;position:relative;box-sizing:content-box;margin:20px auto}.swal-icon:first-child{margin-top:32px}.swal-icon--custom{width:auto;height:auto;max-width:100%;border:none;border-radius:0}.swal-icon img{max-width:100%;max-height:100%}.swal-title{color:rgba(0,0,0,.65);font-weight:600;text-transform:none;position:relative;display:block;padding:13px 16px;font-size:27px;line-height:normal;text-align:center;margin-bottom:0}.swal-title:first-child{margin-top:26px}.swal-title:not(:first-child){padding-bottom:0}.swal-title:not(:last-child){margin-bottom:13px}.swal-text{font-size:16px;position:relative;float:none;line-height:normal;vertical-align:top;text-align:left;display:inline-block;margin:0;padding:0 10px;font-weight:400;color:rgba(0,0,0,.64);max-width:calc(100% - 20px);overflow-wrap:break-word;box-sizing:border-box}.swal-text:first-child{margin-top:45px}.swal-text:last-child{margin-bottom:45px}.swal-footer{text-align:right;padding-top:13px;margin-top:13px;padding:13px 16px;border-radius:inherit;border-top-left-radius:0;border-top-right-radius:0}.swal-button-container{margin:5px;display:inline-block;position:relative}.swal-button{background-color:#7cd1f9;color:#fff;border:none;box-shadow:none;border-radius:5px;font-weight:600;font-size:14px;padding:10px 24px;margin:0;cursor:pointer}.swal-button:not([disabled]):hover{background-color:#78cbf2}.swal-button:active{background-color:#70bce0}.swal-button:focus{outline:none;box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(43,114,165,.29)}.swal-button[disabled]{opacity:.5;cursor:default}.swal-button::-moz-focus-inner{border:0}.swal-button--cancel{color:#555;background-color:#efefef}.swal-button--cancel:not([disabled]):hover{background-color:#e8e8e8}.swal-button--cancel:active{background-color:#d7d7d7}.swal-button--cancel:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(116,136,150,.29)}.swal-button--danger{background-color:#e64942}.swal-button--danger:not([disabled]):hover{background-color:#df4740}.swal-button--danger:active{background-color:#cf423b}.swal-button--danger:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(165,43,43,.29)}.swal-content{padding:0 20px;margin-top:20px;font-size:medium}.swal-content:last-child{margin-bottom:20px}.swal-content__input,.swal-content__textarea{-webkit-appearance:none;background-color:#fff;border:none;font-size:14px;display:block;box-sizing:border-box;width:100%;border:1px solid rgba(0,0,0,.14);padding:10px 13px;border-radius:2px;transition:border-color .2s}.swal-content__input:focus,.swal-content__textarea:focus{outline:none;border-color:#6db8ff}.swal-content__textarea{resize:vertical}.swal-button--loading{color:transparent}.swal-button--loading~.swal-button__loader{opacity:1}.swal-button__loader{position:absolute;height:auto;width:43px;z-index:2;left:50%;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);text-align:center;pointer-events:none;opacity:0}.swal-button__loader div{display:inline-block;float:none;vertical-align:baseline;width:9px;height:9px;padding:0;border:none;margin:2px;opacity:.4;border-radius:7px;background-color:hsla(0,0%,100%,.9);transition:background .2s;-webkit-animation:swal-loading-anim 1s infinite;animation:swal-loading-anim 1s infinite}.swal-button__loader div:nth-child(3n+2){-webkit-animation-delay:.15s;animation-delay:.15s}.swal-button__loader div:nth-child(3n+3){-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes swal-loading-anim{0%{opacity:.4}20%{opacity:.4}50%{opacity:1}to{opacity:.4}}@keyframes swal-loading-anim{0%{opacity:.4}20%{opacity:.4}50%{opacity:1}to{opacity:.4}}.swal-overlay{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center;font-size:0;overflow-y:auto;background-color:rgba(0,0,0,.4);z-index:10000;pointer-events:none;opacity:0;transition:opacity .3s}.swal-overlay:before{content:\" \";display:inline-block;vertical-align:middle;height:100%}.swal-overlay--show-modal{opacity:1;pointer-events:auto}.swal-overlay--show-modal .swal-modal{opacity:1;pointer-events:auto;box-sizing:border-box;-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s;will-change:transform}.swal-modal{width:478px;opacity:0;pointer-events:none;background-color:#fff;text-align:center;border-radius:5px;position:static;margin:20px auto;display:inline-block;vertical-align:middle;-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;z-index:10001;transition:opacity .2s,-webkit-transform .3s;transition:transform .3s,opacity .2s;transition:transform .3s,opacity .2s,-webkit-transform .3s}@media (max-width:500px){.swal-modal{width:calc(100% - 20px)}}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1)}1%{-webkit-transform:scale(.5);transform:scale(.5)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1)}1%{-webkit-transform:scale(.5);transform:scale(.5)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}to{-webkit-transform:scale(1);transform:scale(1)}}', \"\"]);\n  }, function (t, e) {\n    function n(t, e) {\n      var n = t[1] || \"\",\n        r = t[3];\n      if (!r) return n;\n      if (e && \"function\" == typeof btoa) {\n        var i = o(r);\n        return [n].concat(r.sources.map(function (t) {\n          return \"/*# sourceURL=\" + r.sourceRoot + t + \" */\";\n        })).concat([i]).join(\"\\n\");\n      }\n      return [n].join(\"\\n\");\n    }\n    function o(t) {\n      return \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(t)))) + \" */\";\n    }\n    t.exports = function (t) {\n      var e = [];\n      return e.toString = function () {\n        return this.map(function (e) {\n          var o = n(e, t);\n          return e[2] ? \"@media \" + e[2] + \"{\" + o + \"}\" : o;\n        }).join(\"\");\n      }, e.i = function (t, n) {\n        \"string\" == typeof t && (t = [[null, t, \"\"]]);\n        for (var o = {}, r = 0; r < this.length; r++) {\n          var i = this[r][0];\n          \"number\" == typeof i && (o[i] = !0);\n        }\n        for (r = 0; r < t.length; r++) {\n          var a = t[r];\n          \"number\" == typeof a[0] && o[a[0]] || (n && !a[2] ? a[2] = n : n && (a[2] = \"(\" + a[2] + \") and (\" + n + \")\"), e.push(a));\n        }\n      }, e;\n    };\n  }, function (t, e, n) {\n    function o(t, e) {\n      for (var n = 0; n < t.length; n++) {\n        var o = t[n],\n          r = m[o.id];\n        if (r) {\n          r.refs++;\n          for (var i = 0; i < r.parts.length; i++) r.parts[i](o.parts[i]);\n          for (; i < o.parts.length; i++) r.parts.push(u(o.parts[i], e));\n        } else {\n          for (var a = [], i = 0; i < o.parts.length; i++) a.push(u(o.parts[i], e));\n          m[o.id] = {\n            id: o.id,\n            refs: 1,\n            parts: a\n          };\n        }\n      }\n    }\n    function r(t, e) {\n      for (var n = [], o = {}, r = 0; r < t.length; r++) {\n        var i = t[r],\n          a = e.base ? i[0] + e.base : i[0],\n          s = i[1],\n          c = i[2],\n          l = i[3],\n          u = {\n            css: s,\n            media: c,\n            sourceMap: l\n          };\n        o[a] ? o[a].parts.push(u) : n.push(o[a] = {\n          id: a,\n          parts: [u]\n        });\n      }\n      return n;\n    }\n    function i(t, e) {\n      var n = v(t.insertInto);\n      if (!n) throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n      var o = w[w.length - 1];\n      if (\"top\" === t.insertAt) o ? o.nextSibling ? n.insertBefore(e, o.nextSibling) : n.appendChild(e) : n.insertBefore(e, n.firstChild), w.push(e);else {\n        if (\"bottom\" !== t.insertAt) throw new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");\n        n.appendChild(e);\n      }\n    }\n    function a(t) {\n      if (null === t.parentNode) return !1;\n      t.parentNode.removeChild(t);\n      var e = w.indexOf(t);\n      e >= 0 && w.splice(e, 1);\n    }\n    function s(t) {\n      var e = document.createElement(\"style\");\n      return t.attrs.type = \"text/css\", l(e, t.attrs), i(t, e), e;\n    }\n    function c(t) {\n      var e = document.createElement(\"link\");\n      return t.attrs.type = \"text/css\", t.attrs.rel = \"stylesheet\", l(e, t.attrs), i(t, e), e;\n    }\n    function l(t, e) {\n      Object.keys(e).forEach(function (n) {\n        t.setAttribute(n, e[n]);\n      });\n    }\n    function u(t, e) {\n      var n, o, r, i;\n      if (e.transform && t.css) {\n        if (!(i = e.transform(t.css))) return function () {};\n        t.css = i;\n      }\n      if (e.singleton) {\n        var l = h++;\n        n = g || (g = s(e)), o = f.bind(null, n, l, !1), r = f.bind(null, n, l, !0);\n      } else t.sourceMap && \"function\" == typeof URL && \"function\" == typeof URL.createObjectURL && \"function\" == typeof URL.revokeObjectURL && \"function\" == typeof Blob && \"function\" == typeof btoa ? (n = c(e), o = p.bind(null, n, e), r = function () {\n        a(n), n.href && URL.revokeObjectURL(n.href);\n      }) : (n = s(e), o = d.bind(null, n), r = function () {\n        a(n);\n      });\n      return o(t), function (e) {\n        if (e) {\n          if (e.css === t.css && e.media === t.media && e.sourceMap === t.sourceMap) return;\n          o(t = e);\n        } else r();\n      };\n    }\n    function f(t, e, n, o) {\n      var r = n ? \"\" : o.css;\n      if (t.styleSheet) t.styleSheet.cssText = x(e, r);else {\n        var i = document.createTextNode(r),\n          a = t.childNodes;\n        a[e] && t.removeChild(a[e]), a.length ? t.insertBefore(i, a[e]) : t.appendChild(i);\n      }\n    }\n    function d(t, e) {\n      var n = e.css,\n        o = e.media;\n      if (o && t.setAttribute(\"media\", o), t.styleSheet) t.styleSheet.cssText = n;else {\n        for (; t.firstChild;) t.removeChild(t.firstChild);\n        t.appendChild(document.createTextNode(n));\n      }\n    }\n    function p(t, e, n) {\n      var o = n.css,\n        r = n.sourceMap,\n        i = void 0 === e.convertToAbsoluteUrls && r;\n      (e.convertToAbsoluteUrls || i) && (o = y(o)), r && (o += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(r)))) + \" */\");\n      var a = new Blob([o], {\n          type: \"text/css\"\n        }),\n        s = t.href;\n      t.href = URL.createObjectURL(a), s && URL.revokeObjectURL(s);\n    }\n    var m = {},\n      b = function (t) {\n        var e;\n        return function () {\n          return void 0 === e && (e = t.apply(this, arguments)), e;\n        };\n      }(function () {\n        return window && document && document.all && !window.atob;\n      }),\n      v = function (t) {\n        var e = {};\n        return function (n) {\n          return void 0 === e[n] && (e[n] = t.call(this, n)), e[n];\n        };\n      }(function (t) {\n        return document.querySelector(t);\n      }),\n      g = null,\n      h = 0,\n      w = [],\n      y = n(15);\n    t.exports = function (t, e) {\n      if (\"undefined\" != typeof DEBUG && DEBUG && \"object\" != typeof document) throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n      e = e || {}, e.attrs = \"object\" == typeof e.attrs ? e.attrs : {}, e.singleton || (e.singleton = b()), e.insertInto || (e.insertInto = \"head\"), e.insertAt || (e.insertAt = \"bottom\");\n      var n = r(t, e);\n      return o(n, e), function (t) {\n        for (var i = [], a = 0; a < n.length; a++) {\n          var s = n[a],\n            c = m[s.id];\n          c.refs--, i.push(c);\n        }\n        if (t) {\n          o(r(t, e), e);\n        }\n        for (var a = 0; a < i.length; a++) {\n          var c = i[a];\n          if (0 === c.refs) {\n            for (var l = 0; l < c.parts.length; l++) c.parts[l]();\n            delete m[c.id];\n          }\n        }\n      };\n    };\n    var x = function () {\n      var t = [];\n      return function (e, n) {\n        return t[e] = n, t.filter(Boolean).join(\"\\n\");\n      };\n    }();\n  }, function (t, e) {\n    t.exports = function (t) {\n      var e = \"undefined\" != typeof window && window.location;\n      if (!e) throw new Error(\"fixUrls requires window.location\");\n      if (!t || \"string\" != typeof t) return t;\n      var n = e.protocol + \"//\" + e.host,\n        o = n + e.pathname.replace(/\\/[^\\/]*$/, \"/\");\n      return t.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function (t, e) {\n        var r = e.trim().replace(/^\"(.*)\"$/, function (t, e) {\n          return e;\n        }).replace(/^'(.*)'$/, function (t, e) {\n          return e;\n        });\n        if (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(r)) return t;\n        var i;\n        return i = 0 === r.indexOf(\"//\") ? r : 0 === r.indexOf(\"/\") ? n + r : o + r.replace(/^\\.\\//, \"\"), \"url(\" + JSON.stringify(i) + \")\";\n      });\n    };\n  }, function (t, e, n) {\n    var o = n(17);\n    \"undefined\" == typeof window || window.Promise || (window.Promise = o), n(21), String.prototype.includes || (String.prototype.includes = function (t, e) {\n      \"use strict\";\n\n      return \"number\" != typeof e && (e = 0), !(e + t.length > this.length) && -1 !== this.indexOf(t, e);\n    }), Array.prototype.includes || Object.defineProperty(Array.prototype, \"includes\", {\n      value: function (t, e) {\n        if (null == this) throw new TypeError('\"this\" is null or not defined');\n        var n = Object(this),\n          o = n.length >>> 0;\n        if (0 === o) return !1;\n        for (var r = 0 | e, i = Math.max(r >= 0 ? r : o - Math.abs(r), 0); i < o;) {\n          if (function (t, e) {\n            return t === e || \"number\" == typeof t && \"number\" == typeof e && isNaN(t) && isNaN(e);\n          }(n[i], t)) return !0;\n          i++;\n        }\n        return !1;\n      }\n    }), \"undefined\" != typeof window && function (t) {\n      t.forEach(function (t) {\n        t.hasOwnProperty(\"remove\") || Object.defineProperty(t, \"remove\", {\n          configurable: !0,\n          enumerable: !0,\n          writable: !0,\n          value: function () {\n            this.parentNode.removeChild(this);\n          }\n        });\n      });\n    }([Element.prototype, CharacterData.prototype, DocumentType.prototype]);\n  }, function (t, e, n) {\n    (function (e) {\n      !function (n) {\n        function o() {}\n        function r(t, e) {\n          return function () {\n            t.apply(e, arguments);\n          };\n        }\n        function i(t) {\n          if (\"object\" != typeof this) throw new TypeError(\"Promises must be constructed via new\");\n          if (\"function\" != typeof t) throw new TypeError(\"not a function\");\n          this._state = 0, this._handled = !1, this._value = void 0, this._deferreds = [], f(t, this);\n        }\n        function a(t, e) {\n          for (; 3 === t._state;) t = t._value;\n          if (0 === t._state) return void t._deferreds.push(e);\n          t._handled = !0, i._immediateFn(function () {\n            var n = 1 === t._state ? e.onFulfilled : e.onRejected;\n            if (null === n) return void (1 === t._state ? s : c)(e.promise, t._value);\n            var o;\n            try {\n              o = n(t._value);\n            } catch (t) {\n              return void c(e.promise, t);\n            }\n            s(e.promise, o);\n          });\n        }\n        function s(t, e) {\n          try {\n            if (e === t) throw new TypeError(\"A promise cannot be resolved with itself.\");\n            if (e && (\"object\" == typeof e || \"function\" == typeof e)) {\n              var n = e.then;\n              if (e instanceof i) return t._state = 3, t._value = e, void l(t);\n              if (\"function\" == typeof n) return void f(r(n, e), t);\n            }\n            t._state = 1, t._value = e, l(t);\n          } catch (e) {\n            c(t, e);\n          }\n        }\n        function c(t, e) {\n          t._state = 2, t._value = e, l(t);\n        }\n        function l(t) {\n          2 === t._state && 0 === t._deferreds.length && i._immediateFn(function () {\n            t._handled || i._unhandledRejectionFn(t._value);\n          });\n          for (var e = 0, n = t._deferreds.length; e < n; e++) a(t, t._deferreds[e]);\n          t._deferreds = null;\n        }\n        function u(t, e, n) {\n          this.onFulfilled = \"function\" == typeof t ? t : null, this.onRejected = \"function\" == typeof e ? e : null, this.promise = n;\n        }\n        function f(t, e) {\n          var n = !1;\n          try {\n            t(function (t) {\n              n || (n = !0, s(e, t));\n            }, function (t) {\n              n || (n = !0, c(e, t));\n            });\n          } catch (t) {\n            if (n) return;\n            n = !0, c(e, t);\n          }\n        }\n        var d = setTimeout;\n        i.prototype.catch = function (t) {\n          return this.then(null, t);\n        }, i.prototype.then = function (t, e) {\n          var n = new this.constructor(o);\n          return a(this, new u(t, e, n)), n;\n        }, i.all = function (t) {\n          var e = Array.prototype.slice.call(t);\n          return new i(function (t, n) {\n            function o(i, a) {\n              try {\n                if (a && (\"object\" == typeof a || \"function\" == typeof a)) {\n                  var s = a.then;\n                  if (\"function\" == typeof s) return void s.call(a, function (t) {\n                    o(i, t);\n                  }, n);\n                }\n                e[i] = a, 0 == --r && t(e);\n              } catch (t) {\n                n(t);\n              }\n            }\n            if (0 === e.length) return t([]);\n            for (var r = e.length, i = 0; i < e.length; i++) o(i, e[i]);\n          });\n        }, i.resolve = function (t) {\n          return t && \"object\" == typeof t && t.constructor === i ? t : new i(function (e) {\n            e(t);\n          });\n        }, i.reject = function (t) {\n          return new i(function (e, n) {\n            n(t);\n          });\n        }, i.race = function (t) {\n          return new i(function (e, n) {\n            for (var o = 0, r = t.length; o < r; o++) t[o].then(e, n);\n          });\n        }, i._immediateFn = \"function\" == typeof e && function (t) {\n          e(t);\n        } || function (t) {\n          d(t, 0);\n        }, i._unhandledRejectionFn = function (t) {\n          \"undefined\" != typeof console && console && console.warn(\"Possible Unhandled Promise Rejection:\", t);\n        }, i._setImmediateFn = function (t) {\n          i._immediateFn = t;\n        }, i._setUnhandledRejectionFn = function (t) {\n          i._unhandledRejectionFn = t;\n        }, void 0 !== t && t.exports ? t.exports = i : n.Promise || (n.Promise = i);\n      }(this);\n    }).call(e, n(18).setImmediate);\n  }, function (t, e, n) {\n    function o(t, e) {\n      this._id = t, this._clearFn = e;\n    }\n    var r = Function.prototype.apply;\n    e.setTimeout = function () {\n      return new o(r.call(setTimeout, window, arguments), clearTimeout);\n    }, e.setInterval = function () {\n      return new o(r.call(setInterval, window, arguments), clearInterval);\n    }, e.clearTimeout = e.clearInterval = function (t) {\n      t && t.close();\n    }, o.prototype.unref = o.prototype.ref = function () {}, o.prototype.close = function () {\n      this._clearFn.call(window, this._id);\n    }, e.enroll = function (t, e) {\n      clearTimeout(t._idleTimeoutId), t._idleTimeout = e;\n    }, e.unenroll = function (t) {\n      clearTimeout(t._idleTimeoutId), t._idleTimeout = -1;\n    }, e._unrefActive = e.active = function (t) {\n      clearTimeout(t._idleTimeoutId);\n      var e = t._idleTimeout;\n      e >= 0 && (t._idleTimeoutId = setTimeout(function () {\n        t._onTimeout && t._onTimeout();\n      }, e));\n    }, n(19), e.setImmediate = setImmediate, e.clearImmediate = clearImmediate;\n  }, function (t, e, n) {\n    (function (t, e) {\n      !function (t, n) {\n        \"use strict\";\n\n        function o(t) {\n          \"function\" != typeof t && (t = new Function(\"\" + t));\n          for (var e = new Array(arguments.length - 1), n = 0; n < e.length; n++) e[n] = arguments[n + 1];\n          var o = {\n            callback: t,\n            args: e\n          };\n          return l[c] = o, s(c), c++;\n        }\n        function r(t) {\n          delete l[t];\n        }\n        function i(t) {\n          var e = t.callback,\n            o = t.args;\n          switch (o.length) {\n            case 0:\n              e();\n              break;\n            case 1:\n              e(o[0]);\n              break;\n            case 2:\n              e(o[0], o[1]);\n              break;\n            case 3:\n              e(o[0], o[1], o[2]);\n              break;\n            default:\n              e.apply(n, o);\n          }\n        }\n        function a(t) {\n          if (u) setTimeout(a, 0, t);else {\n            var e = l[t];\n            if (e) {\n              u = !0;\n              try {\n                i(e);\n              } finally {\n                r(t), u = !1;\n              }\n            }\n          }\n        }\n        if (!t.setImmediate) {\n          var s,\n            c = 1,\n            l = {},\n            u = !1,\n            f = t.document,\n            d = Object.getPrototypeOf && Object.getPrototypeOf(t);\n          d = d && d.setTimeout ? d : t, \"[object process]\" === {}.toString.call(t.process) ? function () {\n            s = function (t) {\n              e.nextTick(function () {\n                a(t);\n              });\n            };\n          }() : function () {\n            if (t.postMessage && !t.importScripts) {\n              var e = !0,\n                n = t.onmessage;\n              return t.onmessage = function () {\n                e = !1;\n              }, t.postMessage(\"\", \"*\"), t.onmessage = n, e;\n            }\n          }() ? function () {\n            var e = \"setImmediate$\" + Math.random() + \"$\",\n              n = function (n) {\n                n.source === t && \"string\" == typeof n.data && 0 === n.data.indexOf(e) && a(+n.data.slice(e.length));\n              };\n            t.addEventListener ? t.addEventListener(\"message\", n, !1) : t.attachEvent(\"onmessage\", n), s = function (n) {\n              t.postMessage(e + n, \"*\");\n            };\n          }() : t.MessageChannel ? function () {\n            var t = new MessageChannel();\n            t.port1.onmessage = function (t) {\n              a(t.data);\n            }, s = function (e) {\n              t.port2.postMessage(e);\n            };\n          }() : f && \"onreadystatechange\" in f.createElement(\"script\") ? function () {\n            var t = f.documentElement;\n            s = function (e) {\n              var n = f.createElement(\"script\");\n              n.onreadystatechange = function () {\n                a(e), n.onreadystatechange = null, t.removeChild(n), n = null;\n              }, t.appendChild(n);\n            };\n          }() : function () {\n            s = function (t) {\n              setTimeout(a, 0, t);\n            };\n          }(), d.setImmediate = o, d.clearImmediate = r;\n        }\n      }(\"undefined\" == typeof self ? void 0 === t ? this : t : self);\n    }).call(e, n(7), n(20));\n  }, function (t, e) {\n    function n() {\n      throw new Error(\"setTimeout has not been defined\");\n    }\n    function o() {\n      throw new Error(\"clearTimeout has not been defined\");\n    }\n    function r(t) {\n      if (u === setTimeout) return setTimeout(t, 0);\n      if ((u === n || !u) && setTimeout) return u = setTimeout, setTimeout(t, 0);\n      try {\n        return u(t, 0);\n      } catch (e) {\n        try {\n          return u.call(null, t, 0);\n        } catch (e) {\n          return u.call(this, t, 0);\n        }\n      }\n    }\n    function i(t) {\n      if (f === clearTimeout) return clearTimeout(t);\n      if ((f === o || !f) && clearTimeout) return f = clearTimeout, clearTimeout(t);\n      try {\n        return f(t);\n      } catch (e) {\n        try {\n          return f.call(null, t);\n        } catch (e) {\n          return f.call(this, t);\n        }\n      }\n    }\n    function a() {\n      b && p && (b = !1, p.length ? m = p.concat(m) : v = -1, m.length && s());\n    }\n    function s() {\n      if (!b) {\n        var t = r(a);\n        b = !0;\n        for (var e = m.length; e;) {\n          for (p = m, m = []; ++v < e;) p && p[v].run();\n          v = -1, e = m.length;\n        }\n        p = null, b = !1, i(t);\n      }\n    }\n    function c(t, e) {\n      this.fun = t, this.array = e;\n    }\n    function l() {}\n    var u,\n      f,\n      d = t.exports = {};\n    !function () {\n      try {\n        u = \"function\" == typeof setTimeout ? setTimeout : n;\n      } catch (t) {\n        u = n;\n      }\n      try {\n        f = \"function\" == typeof clearTimeout ? clearTimeout : o;\n      } catch (t) {\n        f = o;\n      }\n    }();\n    var p,\n      m = [],\n      b = !1,\n      v = -1;\n    d.nextTick = function (t) {\n      var e = new Array(arguments.length - 1);\n      if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];\n      m.push(new c(t, e)), 1 !== m.length || b || r(s);\n    }, c.prototype.run = function () {\n      this.fun.apply(null, this.array);\n    }, d.title = \"browser\", d.browser = !0, d.env = {}, d.argv = [], d.version = \"\", d.versions = {}, d.on = l, d.addListener = l, d.once = l, d.off = l, d.removeListener = l, d.removeAllListeners = l, d.emit = l, d.prependListener = l, d.prependOnceListener = l, d.listeners = function (t) {\n      return [];\n    }, d.binding = function (t) {\n      throw new Error(\"process.binding is not supported\");\n    }, d.cwd = function () {\n      return \"/\";\n    }, d.chdir = function (t) {\n      throw new Error(\"process.chdir is not supported\");\n    }, d.umask = function () {\n      return 0;\n    };\n  }, function (t, e, n) {\n    \"use strict\";\n\n    n(22).polyfill();\n  }, function (t, e, n) {\n    \"use strict\";\n\n    function o(t, e) {\n      if (void 0 === t || null === t) throw new TypeError(\"Cannot convert first argument to object\");\n      for (var n = Object(t), o = 1; o < arguments.length; o++) {\n        var r = arguments[o];\n        if (void 0 !== r && null !== r) for (var i = Object.keys(Object(r)), a = 0, s = i.length; a < s; a++) {\n          var c = i[a],\n            l = Object.getOwnPropertyDescriptor(r, c);\n          void 0 !== l && l.enumerable && (n[c] = r[c]);\n        }\n      }\n      return n;\n    }\n    function r() {\n      Object.assign || Object.defineProperty(Object, \"assign\", {\n        enumerable: !1,\n        configurable: !0,\n        writable: !0,\n        value: o\n      });\n    }\n    t.exports = {\n      assign: o,\n      polyfill: r\n    };\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(24),\n      r = n(6),\n      i = n(5),\n      a = n(36),\n      s = function () {\n        for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n        if (\"undefined\" != typeof window) {\n          var n = a.getOpts.apply(void 0, t);\n          return new Promise(function (t, e) {\n            i.default.promise = {\n              resolve: t,\n              reject: e\n            }, o.default(n), setTimeout(function () {\n              r.openModal();\n            });\n          });\n        }\n      };\n    s.close = r.onAction, s.getState = r.getState, s.setActionValue = i.setActionValue, s.stopLoading = r.stopLoading, s.setDefaults = a.setDefaults, e.default = s;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(1),\n      r = n(0),\n      i = r.default.MODAL,\n      a = n(4),\n      s = n(34),\n      c = n(35),\n      l = n(1);\n    e.init = function (t) {\n      o.getNode(i) || (document.body || l.throwErr(\"You can only use SweetAlert AFTER the DOM has loaded!\"), s.default(), a.default()), a.initModalContent(t), c.default(t);\n    }, e.default = e.init;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(0),\n      r = o.default.MODAL;\n    e.modalMarkup = '\\n  <div class=\"' + r + '\" role=\"dialog\" aria-modal=\"true\"></div>', e.default = e.modalMarkup;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(0),\n      r = o.default.OVERLAY,\n      i = '<div \\n    class=\"' + r + '\"\\n    tabIndex=\"-1\">\\n  </div>';\n    e.default = i;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(0),\n      r = o.default.ICON;\n    e.errorIconMarkup = function () {\n      var t = r + \"--error\",\n        e = t + \"__line\";\n      return '\\n    <div class=\"' + t + '__x-mark\">\\n      <span class=\"' + e + \" \" + e + '--left\"></span>\\n      <span class=\"' + e + \" \" + e + '--right\"></span>\\n    </div>\\n  ';\n    }, e.warningIconMarkup = function () {\n      var t = r + \"--warning\";\n      return '\\n    <span class=\"' + t + '__body\">\\n      <span class=\"' + t + '__dot\"></span>\\n    </span>\\n  ';\n    }, e.successIconMarkup = function () {\n      var t = r + \"--success\";\n      return '\\n    <span class=\"' + t + \"__line \" + t + '__line--long\"></span>\\n    <span class=\"' + t + \"__line \" + t + '__line--tip\"></span>\\n\\n    <div class=\"' + t + '__ring\"></div>\\n    <div class=\"' + t + '__hide-corners\"></div>\\n  ';\n    };\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(0),\n      r = o.default.CONTENT;\n    e.contentMarkup = '\\n  <div class=\"' + r + '\">\\n\\n  </div>\\n';\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(0),\n      r = o.default.BUTTON_CONTAINER,\n      i = o.default.BUTTON,\n      a = o.default.BUTTON_LOADER;\n    e.buttonMarkup = '\\n  <div class=\"' + r + '\">\\n\\n    <button\\n      class=\"' + i + '\"\\n    ></button>\\n\\n    <div class=\"' + a + '\">\\n      <div></div>\\n      <div></div>\\n      <div></div>\\n    </div>\\n\\n  </div>\\n';\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(4),\n      r = n(2),\n      i = n(0),\n      a = i.default.ICON,\n      s = i.default.ICON_CUSTOM,\n      c = [\"error\", \"warning\", \"success\", \"info\"],\n      l = {\n        error: r.errorIconMarkup(),\n        warning: r.warningIconMarkup(),\n        success: r.successIconMarkup()\n      },\n      u = function (t, e) {\n        var n = a + \"--\" + t;\n        e.classList.add(n);\n        var o = l[t];\n        o && (e.innerHTML = o);\n      },\n      f = function (t, e) {\n        e.classList.add(s);\n        var n = document.createElement(\"img\");\n        n.src = t, e.appendChild(n);\n      },\n      d = function (t) {\n        if (t) {\n          var e = o.injectElIntoModal(r.iconMarkup);\n          c.includes(t) ? u(t, e) : f(t, e);\n        }\n      };\n    e.default = d;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(2),\n      r = n(4),\n      i = function (t) {\n        navigator.userAgent.includes(\"AppleWebKit\") && (t.style.display = \"none\", t.offsetHeight, t.style.display = \"\");\n      };\n    e.initTitle = function (t) {\n      if (t) {\n        var e = r.injectElIntoModal(o.titleMarkup);\n        e.textContent = t, i(e);\n      }\n    }, e.initText = function (t) {\n      if (t) {\n        var e = document.createDocumentFragment();\n        t.split(\"\\n\").forEach(function (t, n, o) {\n          e.appendChild(document.createTextNode(t)), n < o.length - 1 && e.appendChild(document.createElement(\"br\"));\n        });\n        var n = r.injectElIntoModal(o.textMarkup);\n        n.appendChild(e), i(n);\n      }\n    };\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(1),\n      r = n(4),\n      i = n(0),\n      a = i.default.BUTTON,\n      s = i.default.DANGER_BUTTON,\n      c = n(3),\n      l = n(2),\n      u = n(6),\n      f = n(5),\n      d = function (t, e, n) {\n        var r = e.text,\n          i = e.value,\n          d = e.className,\n          p = e.closeModal,\n          m = o.stringToNode(l.buttonMarkup),\n          b = m.querySelector(\".\" + a),\n          v = a + \"--\" + t;\n        if (b.classList.add(v), d) {\n          (Array.isArray(d) ? d : d.split(\" \")).filter(function (t) {\n            return t.length > 0;\n          }).forEach(function (t) {\n            b.classList.add(t);\n          });\n        }\n        n && t === c.CONFIRM_KEY && b.classList.add(s), b.textContent = r;\n        var g = {};\n        return g[t] = i, f.setActionValue(g), f.setActionOptionsFor(t, {\n          closeModal: p\n        }), b.addEventListener(\"click\", function () {\n          return u.onAction(t);\n        }), m;\n      },\n      p = function (t, e) {\n        var n = r.injectElIntoModal(l.footerMarkup);\n        for (var o in t) {\n          var i = t[o],\n            a = d(o, i, e);\n          i.visible && n.appendChild(a);\n        }\n        0 === n.children.length && n.remove();\n      };\n    e.default = p;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(3),\n      r = n(4),\n      i = n(2),\n      a = n(5),\n      s = n(6),\n      c = n(0),\n      l = c.default.CONTENT,\n      u = function (t) {\n        t.addEventListener(\"input\", function (t) {\n          var e = t.target,\n            n = e.value;\n          a.setActionValue(n);\n        }), t.addEventListener(\"keyup\", function (t) {\n          if (\"Enter\" === t.key) return s.onAction(o.CONFIRM_KEY);\n        }), setTimeout(function () {\n          t.focus(), a.setActionValue(\"\");\n        }, 0);\n      },\n      f = function (t, e, n) {\n        var o = document.createElement(e),\n          r = l + \"__\" + e;\n        o.classList.add(r);\n        for (var i in n) {\n          var a = n[i];\n          o[i] = a;\n        }\n        \"input\" === e && u(o), t.appendChild(o);\n      },\n      d = function (t) {\n        if (t) {\n          var e = r.injectElIntoModal(i.contentMarkup),\n            n = t.element,\n            o = t.attributes;\n          \"string\" == typeof n ? f(e, n, o) : e.appendChild(n);\n        }\n      };\n    e.default = d;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(1),\n      r = n(2),\n      i = function () {\n        var t = o.stringToNode(r.overlayMarkup);\n        document.body.appendChild(t);\n      };\n    e.default = i;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(5),\n      r = n(6),\n      i = n(1),\n      a = n(3),\n      s = n(0),\n      c = s.default.MODAL,\n      l = s.default.BUTTON,\n      u = s.default.OVERLAY,\n      f = function (t) {\n        t.preventDefault(), v();\n      },\n      d = function (t) {\n        t.preventDefault(), g();\n      },\n      p = function (t) {\n        if (o.default.isOpen) switch (t.key) {\n          case \"Escape\":\n            return r.onAction(a.CANCEL_KEY);\n        }\n      },\n      m = function (t) {\n        if (o.default.isOpen) switch (t.key) {\n          case \"Tab\":\n            return f(t);\n        }\n      },\n      b = function (t) {\n        if (o.default.isOpen) return \"Tab\" === t.key && t.shiftKey ? d(t) : void 0;\n      },\n      v = function () {\n        var t = i.getNode(l);\n        t && (t.tabIndex = 0, t.focus());\n      },\n      g = function () {\n        var t = i.getNode(c),\n          e = t.querySelectorAll(\".\" + l),\n          n = e.length - 1,\n          o = e[n];\n        o && o.focus();\n      },\n      h = function (t) {\n        t[t.length - 1].addEventListener(\"keydown\", m);\n      },\n      w = function (t) {\n        t[0].addEventListener(\"keydown\", b);\n      },\n      y = function () {\n        var t = i.getNode(c),\n          e = t.querySelectorAll(\".\" + l);\n        e.length && (h(e), w(e));\n      },\n      x = function (t) {\n        if (i.getNode(u) === t.target) return r.onAction(a.CANCEL_KEY);\n      },\n      _ = function (t) {\n        var e = i.getNode(u);\n        e.removeEventListener(\"click\", x), t && e.addEventListener(\"click\", x);\n      },\n      k = function (t) {\n        o.default.timer && clearTimeout(o.default.timer), t && (o.default.timer = window.setTimeout(function () {\n          return r.onAction(a.CANCEL_KEY);\n        }, t));\n      },\n      O = function (t) {\n        t.closeOnEsc ? document.addEventListener(\"keyup\", p) : document.removeEventListener(\"keyup\", p), t.dangerMode ? v() : g(), y(), _(t.closeOnClickOutside), k(t.timer);\n      };\n    e.default = O;\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(1),\n      r = n(3),\n      i = n(37),\n      a = n(38),\n      s = {\n        title: null,\n        text: null,\n        icon: null,\n        buttons: r.defaultButtonList,\n        content: null,\n        className: null,\n        closeOnClickOutside: !0,\n        closeOnEsc: !0,\n        dangerMode: !1,\n        timer: null\n      },\n      c = Object.assign({}, s);\n    e.setDefaults = function (t) {\n      c = Object.assign({}, s, t);\n    };\n    var l = function (t) {\n        var e = t && t.button,\n          n = t && t.buttons;\n        return void 0 !== e && void 0 !== n && o.throwErr(\"Cannot set both 'button' and 'buttons' options!\"), void 0 !== e ? {\n          confirm: e\n        } : n;\n      },\n      u = function (t) {\n        return o.ordinalSuffixOf(t + 1);\n      },\n      f = function (t, e) {\n        o.throwErr(u(e) + \" argument ('\" + t + \"') is invalid\");\n      },\n      d = function (t, e) {\n        var n = t + 1,\n          r = e[n];\n        o.isPlainObject(r) || void 0 === r || o.throwErr(\"Expected \" + u(n) + \" argument ('\" + r + \"') to be a plain object\");\n      },\n      p = function (t, e) {\n        var n = t + 1,\n          r = e[n];\n        void 0 !== r && o.throwErr(\"Unexpected \" + u(n) + \" argument (\" + r + \")\");\n      },\n      m = function (t, e, n, r) {\n        var i = typeof e,\n          a = \"string\" === i,\n          s = e instanceof Element;\n        if (a) {\n          if (0 === n) return {\n            text: e\n          };\n          if (1 === n) return {\n            text: e,\n            title: r[0]\n          };\n          if (2 === n) return d(n, r), {\n            icon: e\n          };\n          f(e, n);\n        } else {\n          if (s && 0 === n) return d(n, r), {\n            content: e\n          };\n          if (o.isPlainObject(e)) return p(n, r), e;\n          f(e, n);\n        }\n      };\n    e.getOpts = function () {\n      for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n      var n = {};\n      t.forEach(function (e, o) {\n        var r = m(0, e, o, t);\n        Object.assign(n, r);\n      });\n      var o = l(n);\n      n.buttons = r.getButtonListOpts(o), delete n.button, n.content = i.getContentOpts(n.content);\n      var u = Object.assign({}, s, c, n);\n      return Object.keys(u).forEach(function (t) {\n        a.DEPRECATED_OPTS[t] && a.logDeprecation(t);\n      }), u;\n    };\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    });\n    var o = n(1),\n      r = {\n        element: \"input\",\n        attributes: {\n          placeholder: \"\"\n        }\n      };\n    e.getContentOpts = function (t) {\n      var e = {};\n      return o.isPlainObject(t) ? Object.assign(e, t) : t instanceof Element ? {\n        element: t\n      } : \"input\" === t ? r : null;\n    };\n  }, function (t, e, n) {\n    \"use strict\";\n\n    Object.defineProperty(e, \"__esModule\", {\n      value: !0\n    }), e.logDeprecation = function (t) {\n      var n = e.DEPRECATED_OPTS[t],\n        o = n.onlyRename,\n        r = n.replacement,\n        i = n.subOption,\n        a = n.link,\n        s = o ? \"renamed\" : \"deprecated\",\n        c = 'SweetAlert warning: \"' + t + '\" option has been ' + s + \".\";\n      if (r) {\n        c += \" Please use\" + (i ? ' \"' + i + '\" in ' : \" \") + '\"' + r + '\" instead.';\n      }\n      var l = \"https://sweetalert.js.org\";\n      c += a ? \" More details: \" + l + a : \" More details: \" + l + \"/guides/#upgrading-from-1x\", console.warn(c);\n    }, e.DEPRECATED_OPTS = {\n      type: {\n        replacement: \"icon\",\n        link: \"/docs/#icon\"\n      },\n      imageUrl: {\n        replacement: \"icon\",\n        link: \"/docs/#icon\"\n      },\n      customClass: {\n        replacement: \"className\",\n        onlyRename: !0,\n        link: \"/docs/#classname\"\n      },\n      imageSize: {},\n      showCancelButton: {\n        replacement: \"buttons\",\n        link: \"/docs/#buttons\"\n      },\n      showConfirmButton: {\n        replacement: \"button\",\n        link: \"/docs/#button\"\n      },\n      confirmButtonText: {\n        replacement: \"button\",\n        link: \"/docs/#button\"\n      },\n      confirmButtonColor: {},\n      cancelButtonText: {\n        replacement: \"buttons\",\n        link: \"/docs/#buttons\"\n      },\n      closeOnConfirm: {\n        replacement: \"button\",\n        subOption: \"closeModal\",\n        link: \"/docs/#button\"\n      },\n      closeOnCancel: {\n        replacement: \"buttons\",\n        subOption: \"closeModal\",\n        link: \"/docs/#buttons\"\n      },\n      showLoaderOnConfirm: {\n        replacement: \"buttons\"\n      },\n      animation: {},\n      inputType: {\n        replacement: \"content\",\n        link: \"/docs/#content\"\n      },\n      inputValue: {\n        replacement: \"content\",\n        link: \"/docs/#content\"\n      },\n      inputPlaceholder: {\n        replacement: \"content\",\n        link: \"/docs/#content\"\n      },\n      html: {\n        replacement: \"content\",\n        link: \"/docs/#content\"\n      },\n      allowEscapeKey: {\n        replacement: \"closeOnEsc\",\n        onlyRename: !0,\n        link: \"/docs/#closeonesc\"\n      },\n      allowClickOutside: {\n        replacement: \"closeOnClickOutside\",\n        onlyRename: !0,\n        link: \"/docs/#closeonclickoutside\"\n      }\n    };\n  }]);\n});","(function (global, undefined) {\n  \"use strict\";\n\n  if (global.setImmediate) {\n    return;\n  }\n  var nextHandle = 1; // Spec says greater than zero\n  var tasksByHandle = {};\n  var currentlyRunningATask = false;\n  var doc = global.document;\n  var registerImmediate;\n  function setImmediate(callback) {\n    // Callback can either be a function or a string\n    if (typeof callback !== \"function\") {\n      callback = new Function(\"\" + callback);\n    }\n    // Copy function arguments\n    var args = new Array(arguments.length - 1);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i + 1];\n    }\n    // Store and register the task\n    var task = {\n      callback: callback,\n      args: args\n    };\n    tasksByHandle[nextHandle] = task;\n    registerImmediate(nextHandle);\n    return nextHandle++;\n  }\n  function clearImmediate(handle) {\n    delete tasksByHandle[handle];\n  }\n  function run(task) {\n    var callback = task.callback;\n    var args = task.args;\n    switch (args.length) {\n      case 0:\n        callback();\n        break;\n      case 1:\n        callback(args[0]);\n        break;\n      case 2:\n        callback(args[0], args[1]);\n        break;\n      case 3:\n        callback(args[0], args[1], args[2]);\n        break;\n      default:\n        callback.apply(undefined, args);\n        break;\n    }\n  }\n  function runIfPresent(handle) {\n    // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n    // So if we're currently running a task, we'll need to delay this invocation.\n    if (currentlyRunningATask) {\n      // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n      // \"too much recursion\" error.\n      setTimeout(runIfPresent, 0, handle);\n    } else {\n      var task = tasksByHandle[handle];\n      if (task) {\n        currentlyRunningATask = true;\n        try {\n          run(task);\n        } finally {\n          clearImmediate(handle);\n          currentlyRunningATask = false;\n        }\n      }\n    }\n  }\n  function installNextTickImplementation() {\n    registerImmediate = function (handle) {\n      process.nextTick(function () {\n        runIfPresent(handle);\n      });\n    };\n  }\n  function canUsePostMessage() {\n    // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n    // where `global.postMessage` means something completely different and can't be used for this purpose.\n    if (global.postMessage && !global.importScripts) {\n      var postMessageIsAsynchronous = true;\n      var oldOnMessage = global.onmessage;\n      global.onmessage = function () {\n        postMessageIsAsynchronous = false;\n      };\n      global.postMessage(\"\", \"*\");\n      global.onmessage = oldOnMessage;\n      return postMessageIsAsynchronous;\n    }\n  }\n  function installPostMessageImplementation() {\n    // Installs an event handler on `global` for the `message` event: see\n    // * https://developer.mozilla.org/en/DOM/window.postMessage\n    // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n    var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n    var onGlobalMessage = function (event) {\n      if (event.source === global && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n        runIfPresent(+event.data.slice(messagePrefix.length));\n      }\n    };\n    if (global.addEventListener) {\n      global.addEventListener(\"message\", onGlobalMessage, false);\n    } else {\n      global.attachEvent(\"onmessage\", onGlobalMessage);\n    }\n    registerImmediate = function (handle) {\n      global.postMessage(messagePrefix + handle, \"*\");\n    };\n  }\n  function installMessageChannelImplementation() {\n    var channel = new MessageChannel();\n    channel.port1.onmessage = function (event) {\n      var handle = event.data;\n      runIfPresent(handle);\n    };\n    registerImmediate = function (handle) {\n      channel.port2.postMessage(handle);\n    };\n  }\n  function installReadyStateChangeImplementation() {\n    var html = doc.documentElement;\n    registerImmediate = function (handle) {\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var script = doc.createElement(\"script\");\n      script.onreadystatechange = function () {\n        runIfPresent(handle);\n        script.onreadystatechange = null;\n        html.removeChild(script);\n        script = null;\n      };\n      html.appendChild(script);\n    };\n  }\n  function installSetTimeoutImplementation() {\n    registerImmediate = function (handle) {\n      setTimeout(runIfPresent, 0, handle);\n    };\n  }\n\n  // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n  var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n  attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n  // Don't get fooled by e.g. browserify environments.\n  if ({}.toString.call(global.process) === \"[object process]\") {\n    // For Node.js before 0.9\n    installNextTickImplementation();\n  } else if (canUsePostMessage()) {\n    // For non-IE10 modern browsers\n    installPostMessageImplementation();\n  } else if (global.MessageChannel) {\n    // For web workers, where supported\n    installMessageChannelImplementation();\n  } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n    // For IE 6–8\n    installReadyStateChangeImplementation();\n  } else {\n    // For older browsers\n    installSetTimeoutImplementation();\n  }\n  attachTo.setImmediate = setImmediate;\n  attachTo.clearImmediate = clearImmediate;\n})(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self);","/**\n * jquery.detectSwipe v2.1.3\n * jQuery Plugin to obtain touch gestures from iPhone, iPod Touch, iPad and Android\n * http://github.com/marcandre/detect_swipe\n * Based on touchwipe by Andreas Waltl, netCU Internetagentur (http://www.netcu.de)\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS\n        module.exports = factory(require('jquery'));\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function($) {\n\n  $.detectSwipe = {\n    version: '2.1.2',\n    enabled: 'ontouchstart' in document.documentElement,\n    preventDefault: true,\n    threshold: 20\n  };\n\n  var startX,\n    startY,\n    isMoving = false;\n\n  function onTouchEnd() {\n    this.removeEventListener('touchmove', onTouchMove);\n    this.removeEventListener('touchend', onTouchEnd);\n    isMoving = false;\n  }\n\n  function onTouchMove(e) {\n    if ($.detectSwipe.preventDefault) { e.preventDefault(); }\n    if(isMoving) {\n      var x = e.touches[0].pageX;\n      var y = e.touches[0].pageY;\n      var dx = startX - x;\n      var dy = startY - y;\n      var dir;\n      var ratio = window.devicePixelRatio || 1;\n      if(Math.abs(dx) * ratio >= $.detectSwipe.threshold) {\n        dir = dx > 0 ? 'left' : 'right'\n      }\n      else if(Math.abs(dy) * ratio >= $.detectSwipe.threshold) {\n        dir = dy > 0 ? 'up' : 'down'\n      }\n      if(dir) {\n        onTouchEnd.call(this);\n        $(this).trigger('swipe', dir).trigger('swipe' + dir);\n      }\n    }\n  }\n\n  function onTouchStart(e) {\n    if (e.touches.length == 1) {\n      startX = e.touches[0].pageX;\n      startY = e.touches[0].pageY;\n      isMoving = true;\n      this.addEventListener('touchmove', onTouchMove, false);\n      this.addEventListener('touchend', onTouchEnd, false);\n    }\n  }\n\n  function setup() {\n    this.addEventListener && this.addEventListener('touchstart', onTouchStart, false);\n  }\n\n  function teardown() {\n    this.removeEventListener('touchstart', onTouchStart);\n  }\n\n  $.event.special.swipe = { setup: setup };\n\n  $.each(['left', 'up', 'down', 'right'], function () {\n    $.event.special['swipe' + this] = { setup: function(){\n      $(this).on('swipe', $.noop);\n    } };\n  });\n}));\n","/**\n * Featherlight - ultra slim jQuery lightbox\n * Version 1.7.14 - http://noelboss.github.io/featherlight/\n *\n * Copyright 2019, Noël Raoul Bossart (http://www.noelboss.com)\n * MIT Licensed.\n**/\n!function(a){\"function\"==typeof define&&define.amd?define([\"jquery\"],a):\"object\"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c=\"undefined\"!=typeof window?require(\"jquery\"):require(\"jquery\")(b)),a(c),c}:a(jQuery)}(function(a){\"use strict\";function b(a,c){if(!(this instanceof b)){var d=new b(a,c);return d.open(),d}this.id=b.id++,this.setup(a,c),this.chainCallbacks(b._callbackChain)}function c(a,b){var c={};for(var d in a)d in b&&(c[d]=a[d],delete a[d]);return c}function d(a,b){var c={},d=new RegExp(\"^\"+b+\"([A-Z])(.*)\");for(var e in a){var f=e.match(d);if(f){var g=(f[1]+f[2].replace(/([A-Z])/g,\"-$1\")).toLowerCase();c[g]=a[e]}}return c}if(\"undefined\"==typeof a)return void(\"console\"in window&&window.console.info(\"Too much lightness, Featherlight needs jQuery.\"));if(a.fn.jquery.match(/-ajax/))return void(\"console\"in window&&window.console.info(\"Featherlight needs regular jQuery, not the slim version.\"));var e=[],f=function(b){return e=a.grep(e,function(a){return a!==b&&a.$instance.closest(\"body\").length>0})},g={allow:1,allowfullscreen:1,frameborder:1,height:1,longdesc:1,marginheight:1,marginwidth:1,mozallowfullscreen:1,name:1,referrerpolicy:1,sandbox:1,scrolling:1,src:1,srcdoc:1,style:1,webkitallowfullscreen:1,width:1},h={keyup:\"onKeyUp\",resize:\"onResize\"},i=function(c){a.each(b.opened().reverse(),function(){return c.isDefaultPrevented()||!1!==this[h[c.type]](c)?void 0:(c.preventDefault(),c.stopPropagation(),!1)})},j=function(c){if(c!==b._globalHandlerInstalled){b._globalHandlerInstalled=c;var d=a.map(h,function(a,c){return c+\".\"+b.prototype.namespace}).join(\" \");a(window)[c?\"on\":\"off\"](d,i)}};b.prototype={constructor:b,namespace:\"featherlight\",targetAttr:\"data-featherlight\",variant:null,resetCss:!1,background:null,openTrigger:\"click\",closeTrigger:\"click\",filter:null,root:\"body\",openSpeed:250,closeSpeed:250,closeOnClick:\"background\",closeOnEsc:!0,closeIcon:\"&#10005;\",loading:\"\",persist:!1,otherClose:null,beforeOpen:a.noop,beforeContent:a.noop,beforeClose:a.noop,afterOpen:a.noop,afterContent:a.noop,afterClose:a.noop,onKeyUp:a.noop,onResize:a.noop,type:null,contentFilters:[\"jquery\",\"image\",\"html\",\"ajax\",\"iframe\",\"text\"],setup:function(b,c){\"object\"!=typeof b||b instanceof a!=!1||c||(c=b,b=void 0);var d=a.extend(this,c,{target:b}),e=d.resetCss?d.namespace+\"-reset\":d.namespace,f=a(d.background||['<div class=\"'+e+\"-loading \"+e+'\">','<div class=\"'+e+'-content\">','<button class=\"'+e+\"-close-icon \"+d.namespace+'-close\" aria-label=\"Close\">',d.closeIcon,\"</button>\",'<div class=\"'+d.namespace+'-inner\">'+d.loading+\"</div>\",\"</div>\",\"</div>\"].join(\"\")),g=\".\"+d.namespace+\"-close\"+(d.otherClose?\",\"+d.otherClose:\"\");return d.$instance=f.clone().addClass(d.variant),d.$instance.on(d.closeTrigger+\".\"+d.namespace,function(b){if(!b.isDefaultPrevented()){var c=a(b.target);(\"background\"===d.closeOnClick&&c.is(\".\"+d.namespace)||\"anywhere\"===d.closeOnClick||c.closest(g).length)&&(d.close(b),b.preventDefault())}}),this},getContent:function(){if(this.persist!==!1&&this.$content)return this.$content;var b=this,c=this.constructor.contentFilters,d=function(a){return b.$currentTarget&&b.$currentTarget.attr(a)},e=d(b.targetAttr),f=b.target||e||\"\",g=c[b.type];if(!g&&f in c&&(g=c[f],f=b.target&&e),f=f||d(\"href\")||\"\",!g)for(var h in c)b[h]&&(g=c[h],f=b[h]);if(!g){var i=f;if(f=null,a.each(b.contentFilters,function(){return g=c[this],g.test&&(f=g.test(i)),!f&&g.regex&&i.match&&i.match(g.regex)&&(f=i),!f}),!f)return\"console\"in window&&window.console.error(\"Featherlight: no content filter found \"+(i?' for \"'+i+'\"':\" (no target specified)\")),!1}return g.process.call(b,f)},setContent:function(b){return this.$instance.removeClass(this.namespace+\"-loading\"),this.$instance.toggleClass(this.namespace+\"-iframe\",b.is(\"iframe\")),this.$instance.find(\".\"+this.namespace+\"-inner\").not(b).slice(1).remove().end().replaceWith(a.contains(this.$instance[0],b[0])?\"\":b),this.$content=b.addClass(this.namespace+\"-inner\"),this},open:function(b){var c=this;if(c.$instance.hide().appendTo(c.root),!(b&&b.isDefaultPrevented()||c.beforeOpen(b)===!1)){b&&b.preventDefault();var d=c.getContent();if(d)return e.push(c),j(!0),c.$instance.fadeIn(c.openSpeed),c.beforeContent(b),a.when(d).always(function(a){a&&(c.setContent(a),c.afterContent(b))}).then(c.$instance.promise()).done(function(){c.afterOpen(b)})}return c.$instance.detach(),a.Deferred().reject().promise()},close:function(b){var c=this,d=a.Deferred();return c.beforeClose(b)===!1?d.reject():(0===f(c).length&&j(!1),c.$instance.fadeOut(c.closeSpeed,function(){c.$instance.detach(),c.afterClose(b),d.resolve()})),d.promise()},resize:function(a,b){if(a&&b){this.$content.css(\"width\",\"\").css(\"height\",\"\");var c=Math.max(a/(this.$content.parent().width()-1),b/(this.$content.parent().height()-1));c>1&&(c=b/Math.floor(b/c),this.$content.css(\"width\",\"\"+a/c+\"px\").css(\"height\",\"\"+b/c+\"px\"))}},chainCallbacks:function(b){for(var c in b)this[c]=a.proxy(b[c],this,a.proxy(this[c],this))}},a.extend(b,{id:0,autoBind:\"[data-featherlight]\",defaults:b.prototype,contentFilters:{jquery:{regex:/^[#.]\\w/,test:function(b){return b instanceof a&&b},process:function(b){return this.persist!==!1?a(b):a(b).clone(!0)}},image:{regex:/\\.(png|jpg|jpeg|gif|tiff?|bmp|svg)(\\?\\S*)?$/i,process:function(b){var c=this,d=a.Deferred(),e=new Image,f=a('<img src=\"'+b+'\" alt=\"\" class=\"'+c.namespace+'-image\" />');return e.onload=function(){f.naturalWidth=e.width,f.naturalHeight=e.height,d.resolve(f)},e.onerror=function(){d.reject(f)},e.src=b,d.promise()}},html:{regex:/^\\s*<[\\w!][^<]*>/,process:function(b){return a(b)}},ajax:{regex:/./,process:function(b){var c=a.Deferred(),d=a(\"<div></div>\").load(b,function(a,b){\"error\"!==b&&c.resolve(d.contents()),c.reject()});return c.promise()}},iframe:{process:function(b){var e=new a.Deferred,f=a(\"<iframe/>\"),h=d(this,\"iframe\"),i=c(h,g);return f.hide().attr(\"src\",b).attr(i).css(h).on(\"load\",function(){e.resolve(f.show())}).appendTo(this.$instance.find(\".\"+this.namespace+\"-content\")),e.promise()}},text:{process:function(b){return a(\"<div>\",{text:b})}}},functionAttributes:[\"beforeOpen\",\"afterOpen\",\"beforeContent\",\"afterContent\",\"beforeClose\",\"afterClose\"],readElementConfig:function(b,c){var d=this,e=new RegExp(\"^data-\"+c+\"-(.*)\"),f={};return b&&b.attributes&&a.each(b.attributes,function(){var b=this.name.match(e);if(b){var c=this.value,g=a.camelCase(b[1]);if(a.inArray(g,d.functionAttributes)>=0)c=new Function(c);else try{c=JSON.parse(c)}catch(h){}f[g]=c}}),f},extend:function(b,c){var d=function(){this.constructor=b};return d.prototype=this.prototype,b.prototype=new d,b.__super__=this.prototype,a.extend(b,this,c),b.defaults=b.prototype,b},attach:function(b,c,d){var e=this;\"object\"!=typeof c||c instanceof a!=!1||d||(d=c,c=void 0),d=a.extend({},d);var f,g=d.namespace||e.defaults.namespace,h=a.extend({},e.defaults,e.readElementConfig(b[0],g),d),i=function(g){var i=a(g.currentTarget),j=a.extend({$source:b,$currentTarget:i},e.readElementConfig(b[0],h.namespace),e.readElementConfig(g.currentTarget,h.namespace),d),k=f||i.data(\"featherlight-persisted\")||new e(c,j);\"shared\"===k.persist?f=k:k.persist!==!1&&i.data(\"featherlight-persisted\",k),j.$currentTarget.blur&&j.$currentTarget.blur(),k.open(g)};return b.on(h.openTrigger+\".\"+h.namespace,h.filter,i),{filter:h.filter,handler:i}},current:function(){var a=this.opened();return a[a.length-1]||null},opened:function(){var b=this;return f(),a.grep(e,function(a){return a instanceof b})},close:function(a){var b=this.current();return b?b.close(a):void 0},_onReady:function(){var b=this;if(b.autoBind){var c=a(b.autoBind);c.each(function(){b.attach(a(this))}),a(document).on(\"click\",b.autoBind,function(d){if(!d.isDefaultPrevented()){var e=a(d.currentTarget),f=c.length;if(c=c.add(e),f!==c.length){var g=b.attach(e);(!g.filter||a(d.target).parentsUntil(e,g.filter).length>0)&&g.handler(d)}}})}},_callbackChain:{onKeyUp:function(b,c){return 27===c.keyCode?(this.closeOnEsc&&a.featherlight.close(c),!1):b(c)},beforeOpen:function(b,c){return a(document.documentElement).addClass(\"with-featherlight\"),this._previouslyActive=document.activeElement,this._$previouslyTabbable=a(\"a, input, select, textarea, iframe, button, iframe, [contentEditable=true]\").not(\"[tabindex]\").not(this.$instance.find(\"button\")),this._$previouslyWithTabIndex=a(\"[tabindex]\").not('[tabindex=\"-1\"]'),this._previousWithTabIndices=this._$previouslyWithTabIndex.map(function(b,c){return a(c).attr(\"tabindex\")}),this._$previouslyWithTabIndex.add(this._$previouslyTabbable).attr(\"tabindex\",-1),document.activeElement.blur&&document.activeElement.blur(),b(c)},afterClose:function(c,d){var e=c(d),f=this;return this._$previouslyTabbable.removeAttr(\"tabindex\"),this._$previouslyWithTabIndex.each(function(b,c){a(c).attr(\"tabindex\",f._previousWithTabIndices[b])}),this._previouslyActive.focus(),0===b.opened().length&&a(document.documentElement).removeClass(\"with-featherlight\"),e},onResize:function(a,b){return this.resize(this.$content.naturalWidth,this.$content.naturalHeight),a(b)},afterContent:function(a,b){var c=a(b);return this.$instance.find(\"[autofocus]:not([disabled])\").focus(),this.onResize(b),c}}}),a.featherlight=b,a.fn.featherlight=function(a,c){return b.attach(this,a,c),this},a(document).ready(function(){b._onReady()})});\n","/**\n * Featherlight Gallery – an extension for the ultra slim jQuery lightbox\n * Version 1.7.14 - http://noelboss.github.io/featherlight/\n *\n * Copyright 2019, Noël Raoul Bossart (http://www.noelboss.com)\n * MIT Licensed.\n**/!function(a){\"function\"==typeof define&&define.amd?define([\"jquery\"],a):\"object\"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c=\"undefined\"!=typeof window?require(\"jquery\"):require(\"jquery\")(b)),a(c),c}:a(jQuery)}(function(a){\"use strict\";function b(c,d){if(!(this instanceof b)){var e=new b(a.extend({$source:c,$currentTarget:c.first()},d));return e.open(),e}a.featherlight.apply(this,arguments),this.chainCallbacks(h)}var c=function(a){window.console&&window.console.warn&&window.console.warn(\"FeatherlightGallery: \"+a)};if(\"undefined\"==typeof a)return c(\"Too much lightness, Featherlight needs jQuery.\");if(!a.featherlight)return c(\"Load the featherlight plugin before the gallery plugin\");var d=\"ontouchstart\"in window||window.DocumentTouch&&document instanceof DocumentTouch,e=a.event&&a.event.special.swipeleft&&a,f=window.Hammer&&function(a){var b=new window.Hammer.Manager(a[0]);return b.add(new window.Hammer.Swipe),b},g=d&&(e||f);d&&!g&&c(\"No compatible swipe library detected; one must be included before featherlightGallery for swipe motions to navigate the galleries.\");var h={afterClose:function(a,b){var c=this;return c.$instance.off(\"next.\"+c.namespace+\" previous.\"+c.namespace),c._swiper&&(c._swiper.off(\"swipeleft\",c._swipeleft).off(\"swiperight\",c._swiperight),c._swiper=null),a(b)},beforeOpen:function(a,b){var c=this;return c.$instance.on(\"next.\"+c.namespace+\" previous.\"+c.namespace,function(a){var b=\"next\"===a.type?1:-1;c.navigateTo(c.currentNavigation()+b)}),g&&(c._swiper=g(c.$instance).on(\"swipeleft\",c._swipeleft=function(){c.$instance.trigger(\"next\")}).on(\"swiperight\",c._swiperight=function(){c.$instance.trigger(\"previous\")}),c.$instance.addClass(this.namespace+\"-swipe-aware\",g)),c.$instance.find(\".\"+c.namespace+\"-content\").append(c.createNavigation(\"previous\")).append(c.createNavigation(\"next\")),a(b)},beforeContent:function(a,b){var c=this.currentNavigation(),d=this.slides().length;return this.$instance.toggleClass(this.namespace+\"-first-slide\",0===c).toggleClass(this.namespace+\"-last-slide\",c===d-1),a(b)},onKeyUp:function(a,b){var c={37:\"previous\",39:\"next\"}[b.keyCode];return c?(this.$instance.trigger(c),!1):a(b)}};a.featherlight.extend(b,{autoBind:\"[data-featherlight-gallery]\"}),a.extend(b.prototype,{previousIcon:\"&#9664;\",nextIcon:\"&#9654;\",galleryFadeIn:100,galleryFadeOut:300,slides:function(){return this.filter?this.$source.find(this.filter):this.$source},images:function(){return c(\"images is deprecated, please use slides instead\"),this.slides()},currentNavigation:function(){return this.slides().index(this.$currentTarget)},navigateTo:function(b){var c=this,d=c.slides(),e=d.length,f=c.$instance.find(\".\"+c.namespace+\"-inner\");return b=(b%e+e)%e,this.$instance.addClass(this.namespace+\"-loading\"),c.$currentTarget=d.eq(b),c.beforeContent(),a.when(c.getContent(),f.fadeTo(c.galleryFadeOut,.2)).always(function(a){c.setContent(a),c.afterContent(),a.fadeTo(c.galleryFadeIn,1)})},createNavigation:function(b){var c=this;return a('<span title=\"'+b+'\" class=\"'+this.namespace+\"-\"+b+'\"><span>'+this[b+\"Icon\"]+\"</span></span>\").click(function(d){a(this).trigger(b+\".\"+c.namespace),d.preventDefault()})}}),a.featherlightGallery=b,a.fn.featherlightGallery=function(a){return b.attach(this,a),this},a(document).ready(function(){b._onReady()})});\n","/**\n * jQuery Bar Rating Plugin v1.2.1\n *\n * http://github.com/antennaio/jquery-bar-rating\n *\n * Copyright (c) 2012-2016 Kazik Pietruszewski\n *\n * This plugin is available under the MIT license.\n * http://www.opensource.org/licenses/mit-license.php\n */\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = factory(require('jquery'));\n    } else {\n        // browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var BarRating = (function() {\n\n        function BarRating() {\n            var self = this;\n\n            // wrap element in a wrapper div\n            var wrapElement = function() {\n                var classes = ['br-wrapper'];\n\n                if (self.options.theme !== '') {\n                    classes.push('br-theme-' + self.options.theme);\n                }\n\n                self.$elem.wrap($('<div />', {\n                    'class': classes.join(' ')\n                }));\n            };\n\n            // unwrap element\n            var unwrapElement = function() {\n                self.$elem.unwrap();\n            };\n\n            // find option by value\n            var findOption = function(value) {\n                if ($.isNumeric(value)) {\n                    value = Math.floor(value);\n                }\n\n                return $('option[value=\"' + value  + '\"]', self.$elem);\n            };\n\n            // find initial option\n            var findInitialOption = function() {\n                var initialRating = self.options.initialRating;\n\n                if (!initialRating) {\n                    return $('option:selected', self.$elem);\n                }\n\n                return findOption(initialRating);\n            };\n\n            // get data\n            var getData = function(key) {\n                var data = self.$elem.data('barrating');\n\n                if (typeof key !== 'undefined') {\n                    return data[key];\n                }\n\n                return data;\n            };\n\n            // set data\n            var setData = function(key, value) {\n                if (value !== null && typeof value === 'object') {\n                    self.$elem.data('barrating', value);\n                } else {\n                    self.$elem.data('barrating')[key] = value;\n                }\n            };\n\n            // save data on element\n            var saveDataOnElement = function() {\n                var $opt = findInitialOption();\n\n                var value = $opt.val();\n                var text = $opt.data('html') ? $opt.data('html') : $opt.text();\n\n                setData(null, {\n                    userOptions: self.options,\n\n                    // initial rating based on the OPTION value\n                    ratingValue: value,\n                    ratingText: text,\n\n                    // rating will be restored by calling clear method\n                    originalRatingValue: value,\n                    originalRatingText: text,\n\n                    // read-only state\n                    readOnly: self.options.readonly,\n\n                    // did the user already select a rating?\n                    ratingMade: false\n                });\n            };\n\n            // remove data on element\n            var removeDataOnElement = function() {\n                self.$elem.removeData('barrating');\n            };\n\n            // return current rating text\n            var ratingText = function() {\n                return getData('ratingText');\n            };\n\n            // return current rating value\n            var ratingValue = function() {\n                return getData('ratingValue');\n            };\n\n            // build widget and return jQuery element\n            var buildWidget = function() {\n                var $w = $('<div />', { 'class': 'br-widget' });\n\n                // create A elements that will replace OPTIONs\n                self.$elem.find('option').each(function() {\n                    var val, text, html, $a;\n\n                    val = $(this).val();\n\n                    // create ratings - but only if val is defined\n                    if (val) {\n                        text = $(this).text();\n                        html = $(this).data('html');\n                        if (html) { text = html; }\n\n                        $a = $('<a />', {\n                            'href': '#',\n                            'data-rating-value': val,\n                            'data-rating-text': text,\n                            'html': (self.options.showValues) ? text : ''\n                        });\n\n                        $w.append($a);\n                    }\n\n                });\n\n                // append .br-current-rating div to the widget\n                if (self.options.showSelectedRating) {\n                    $w.append($('<div />', { 'text': '', 'class': 'br-current-rating' }));\n                }\n\n                // additional classes for the widget\n                if (self.options.reverse) {\n                    $w.addClass('br-reverse');\n                }\n\n                if (self.options.readonly) {\n                    $w.addClass('br-readonly');\n                }\n\n                return $w;\n            };\n\n            // return a jQuery function name depending on the 'reverse' setting\n            var nextAllorPreviousAll = function() {\n                if (getData('userOptions').reverse) {\n                    return 'nextAll';\n                } else {\n                    return 'prevAll';\n                }\n            };\n\n            // set the value of the select field\n            var setSelectFieldValue = function(value) {\n                // change selected option\n                findOption(value).prop('selected', true);\n\n                self.$elem.change();\n            };\n\n            // reset select field\n            var resetSelectField = function() {\n                $('option', self.$elem).prop('selected', function() {\n                    return this.defaultSelected;\n                });\n\n                self.$elem.change();\n            };\n\n            // display the currently selected rating\n            var showSelectedRating = function(text) {\n                // text undefined?\n                text = text ? text : ratingText();\n\n                // update .br-current-rating div\n                if (self.options.showSelectedRating) {\n                    self.$elem.parent().find('.br-current-rating').text(text);\n                }\n            };\n\n            // return rounded fraction of a value (14.4 -> 40, 0.99 -> 90)\n            var fraction = function(value) {\n                return Math.round(((Math.floor(value * 10) / 10) % 1) * 100);\n            };\n\n            // remove all classes from elements\n            var resetStyle = function() {\n                // remove all classes starting with br-*\n                self.$widget.find('a').removeClass(function(index, classes) {\n                    return (classes.match(/(^|\\s)br-\\S+/g) || []).join(' ');\n                });\n            };\n\n            // apply style by setting classes on elements\n            var applyStyle = function() {\n                var $a = self.$widget.find('a[data-rating-value=\"' + ratingValue() + '\"]');\n                var initialRating = getData('userOptions').initialRating;\n                var baseValue = $.isNumeric(ratingValue()) ? ratingValue() : 0;\n                var f = fraction(initialRating);\n                var $all, $fractional;\n\n                resetStyle();\n\n                // add classes\n                $a.addClass('br-selected br-current')[nextAllorPreviousAll()]()\n                    .addClass('br-selected');\n\n                if (!getData('ratingMade') && $.isNumeric(initialRating)) {\n                    if ((initialRating <= baseValue) || !f) {\n                        return;\n                    }\n\n                    $all = self.$widget.find('a');\n\n                    $fractional = ($a.length) ?\n                        $a[(getData('userOptions').reverse) ? 'prev' : 'next']() :\n                        $all[(getData('userOptions').reverse) ? 'last' : 'first']();\n\n                    $fractional.addClass('br-fractional');\n                    $fractional.addClass('br-fractional-' + f);\n                }\n            };\n\n            // check if the element is deselectable?\n            var isDeselectable = function($element) {\n                if (!self.options.deselectable) {\n                    return false;\n                }\n\n                if (self.$elem.find('option:first').val()) {\n                    // empty option not found\n                    return false;\n                }\n\n                return (ratingValue() == $element.attr('data-rating-value'));\n            };\n\n            // handle click events\n            var attachClickHandler = function($elements) {\n                $elements.on('click.barrating', function(event) {\n                    var $a = $(this),\n                        options = getData('userOptions'),\n                        value,\n                        text;\n\n                    event.preventDefault();\n\n                    value = $a.attr('data-rating-value');\n                    text = $a.attr('data-rating-text');\n\n                    // is current and deselectable?\n                    if (isDeselectable($a)) {\n                        value = '';\n                        text = '';\n                    }\n\n                    // remember selected rating\n                    setData('ratingValue', value);\n                    setData('ratingText', text);\n                    setData('ratingMade', true);\n\n                    setSelectFieldValue(value);\n                    showSelectedRating(text);\n\n                    applyStyle();\n\n                    // onSelect callback\n                    options.onSelect.call(\n                        self,\n                        ratingValue(),\n                        ratingText(),\n                        event\n                    );\n\n                    return false;\n                });\n            };\n\n            // handle mouseenter events\n            var attachMouseEnterHandler = function($elements) {\n                $elements.on('mouseenter.barrating', function() {\n                    var $a = $(this);\n\n                    resetStyle();\n\n                    $a.addClass('br-active')[nextAllorPreviousAll()]()\n                        .addClass('br-active');\n\n                    showSelectedRating($a.attr('data-rating-text'));\n                });\n            };\n\n            // handle mouseleave events\n            var attachMouseLeaveHandler = function($elements) {\n                self.$widget.on('mouseleave.barrating blur.barrating', function() {\n                    showSelectedRating();\n                    applyStyle();\n                });\n            };\n\n            // somewhat primitive way to remove 300ms click delay on touch devices\n            // for a more advanced solution consider setting `fastClicks` option to false\n            // and using a library such as fastclick (https://github.com/ftlabs/fastclick)\n            var fastClicks = function($elements) {\n                $elements.on('touchstart.barrating', function(event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n\n                    $(this).click();\n                });\n            };\n\n            // disable clicks\n            var disableClicks = function($elements) {\n                $elements.on('click.barrating', function(event) {\n                    event.preventDefault();\n                });\n            };\n\n            var attachHandlers = function($elements) {\n                // attach click event handler\n                attachClickHandler($elements);\n\n                if (self.options.hoverState) {\n                    // attach mouseenter event handler\n                    attachMouseEnterHandler($elements);\n\n                    // attach mouseleave event handler\n                    attachMouseLeaveHandler($elements);\n                }\n            };\n\n            var detachHandlers = function($elements) {\n                // remove event handlers in the \".barrating\" namespace\n                $elements.off('.barrating');\n            };\n\n            var setupHandlers = function(readonly) {\n                var $elements = self.$widget.find('a');\n\n                if (fastClicks) {\n                    fastClicks($elements);\n                }\n\n                if (readonly) {\n                    detachHandlers($elements);\n                    disableClicks($elements);\n                } else {\n                    attachHandlers($elements);\n                }\n            };\n\n            this.show = function() {\n                // run only once\n                if (getData()) return;\n\n                // wrap element\n                wrapElement();\n\n                // save data\n                saveDataOnElement();\n\n                // build & append widget to the DOM\n                self.$widget = buildWidget();\n                self.$widget.insertAfter(self.$elem);\n\n                applyStyle();\n\n                showSelectedRating();\n\n                setupHandlers(self.options.readonly);\n\n                // hide the select field\n                self.$elem.hide();\n            };\n\n            this.readonly = function(state) {\n                if (typeof state !== 'boolean' || getData('readOnly') == state) return;\n\n                setupHandlers(state);\n                setData('readOnly', state);\n                self.$widget.toggleClass('br-readonly');\n            };\n\n            this.set = function(value) {\n                var options = getData('userOptions');\n\n                if (!self.$elem.find('option[value=\"' + value + '\"]').val()) return;\n\n                // set data\n                setData('ratingValue', value);\n                setData('ratingText', self.$elem.find('option[value=\"' + value + '\"]').text());\n                setData('ratingMade', true);\n\n                setSelectFieldValue(ratingValue());\n                showSelectedRating(ratingText());\n\n                applyStyle();\n\n                // onSelect callback\n                if (!options.silent) {\n                    options.onSelect.call(\n                        this,\n                        ratingValue(),\n                        ratingText()\n                    );\n                }\n            };\n\n            this.clear = function() {\n                var options = getData('userOptions');\n\n                // restore original data\n                setData('ratingValue', getData('originalRatingValue'));\n                setData('ratingText', getData('originalRatingText'));\n                setData('ratingMade', false);\n\n                resetSelectField();\n                showSelectedRating(ratingText());\n\n                applyStyle();\n\n                // onClear callback\n                options.onClear.call(\n                    this,\n                    ratingValue(),\n                    ratingText()\n                );\n            };\n\n            this.destroy = function() {\n                var value = ratingValue();\n                var text = ratingText();\n                var options = getData('userOptions');\n\n                // detach handlers\n                detachHandlers(self.$widget.find('a'));\n\n                // remove widget\n                self.$widget.remove();\n\n                // remove data\n                removeDataOnElement();\n\n                // unwrap the element\n                unwrapElement();\n\n                // show the element\n                self.$elem.show();\n\n                // onDestroy callback\n                options.onDestroy.call(\n                    this,\n                    value,\n                    text\n                );\n            };\n        }\n\n        BarRating.prototype.init = function (options, elem) {\n            this.$elem = $(elem);\n            this.options = $.extend({}, $.fn.barrating.defaults, options);\n\n            return this.options;\n        };\n\n        return BarRating;\n    })();\n\n    $.fn.barrating = function (method, options) {\n        return this.each(function () {\n            var plugin = new BarRating();\n\n            // plugin works with select fields\n            if (!$(this).is('select')) {\n                $.error('Sorry, this plugin only works with select fields.');\n            }\n\n            // method supplied\n            if (plugin.hasOwnProperty(method)) {\n                plugin.init(options, this);\n                if (method === 'show') {\n                    return plugin.show(options);\n                } else {\n                    // plugin exists?\n                    if (plugin.$elem.data('barrating')) {\n                        plugin.$widget = $(this).next('.br-widget');\n                        return plugin[method](options);\n                    }\n                }\n\n            // no method supplied or only options supplied\n            } else if (typeof method === 'object' || !method) {\n                options = method;\n                plugin.init(options, this);\n                return plugin.show();\n\n            } else {\n                $.error('Method ' + method + ' does not exist on jQuery.barrating');\n            }\n        });\n    };\n\n    $.fn.barrating.defaults = {\n        theme:'',\n        initialRating:null, // initial rating\n        showValues:false, // display rating values on the bars?\n        showSelectedRating:true, // append a div with a rating to the widget?\n        deselectable:true, // allow to deselect ratings\n        reverse:false, // reverse the rating?\n        readonly:false, // make the rating ready-only?\n        fastClicks:true, // remove 300ms click delay on touch devices?\n        hoverState:true, // change state on hover?\n        silent:false, // supress callbacks when controlling ratings programatically\n        onSelect:function (value, text, event) {\n        }, // callback fired when a rating is selected\n        onClear:function (value, text) {\n        }, // callback fired when a rating is cleared\n        onDestroy:function (value, text) {\n        } // callback fired when a widget is destroyed\n    };\n\n    $.fn.barrating.BarRating = BarRating;\n\n}));"],"sourceRoot":""}